lib/pork/mode/shuffled.rb in pork-1.3.1 vs lib/pork/mode/shuffled.rb in pork-1.4.0
- old
+ new
@@ -1,102 +1,11 @@
-require 'pork'
+require 'pork/isolate'
module Pork
module Shuffled
- def all_tests
- @all_tests ||= build_all_tests
- end
-
- def all_paths
- (all_tests[:files] || {}).values.flat_map(&:values).flatten(1).
- select{ |path| path.kind_of?(Array) }
- end
-
- def [] index
- by_groups(index) || by_source(index)
- end
-
- def by_groups groups
- return unless tests = all_tests[:groups]
- paths = groups.split(',').flat_map do |g|
- tests[g.strip] || []
- end.uniq
- paths unless paths.empty?
- end
-
- def by_source source
- return unless tests = all_tests[:files]
- file_str, line_str = source.split(':')
- file, line = File.expand_path(file_str), line_str.to_i
- return unless cases = tests[file]
- if line.zero?
- cases.values.flatten(1)
- else
- _, paths = cases.reverse_each.find{ |(l, _)| l <= line }
- paths
- end
- end
-
def shuffled stat=Stat.new, paths=all_paths
paths.shuffle.inject(stat, &method(:isolate))
- end
-
- protected
- def isolate stat, path, super_env=nil
- env = Env.new(super_env)
- idx = path.first
-
- @tests.first(idx).each do |(type, arg, _)|
- case type
- when :before
- env.before << arg
- when :after
- env.after << arg
- end
- end
-
- if path.size == 1
- _, desc, test = @tests[idx]
- run(stat, desc, test, env)
- else
- @tests[idx][1].isolate(stat, path.drop(1), env)
- end
-
- stat
- end
-
- def build_all_tests result={}, path=[]
- @tests.each_with_index.inject(result) do |r,
- ((type, imp, test, opts),
- index)|
- current = path + [index]
- path_or_imp = case type
- when :describe
- imp
- when :would
- current
- else
- next r
- end
- groups = opts[:groups]
- store_for_groups(r, path_or_imp, groups) if groups
- store_for_source(r, path_or_imp, *test.source_location)
- imp.build_all_tests(r, current) if type == :describe
- r
- end
- end
-
- def store_for_groups tests, path_or_imp, groups
- r = tests[:groups] ||= {}
- groups.each do |g|
- (r[g.to_s] ||= []) << path_or_imp
- end
- end
-
- def store_for_source tests, path_or_imp, file, line
- r = tests[:files] ||= {}
- ((r[File.expand_path(file)] ||= {})[line] ||= []) << path_or_imp
end
end
Executor.extend(Shuffled)
end