parallel_tests 1.0.9 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (56) hide show
  1. checksums.yaml +4 -4
  2. data/Readme.md +7 -3
  3. data/bin/parallel_cucumber +5 -1
  4. data/bin/parallel_rspec +5 -1
  5. data/bin/parallel_spinach +5 -1
  6. data/bin/parallel_test +5 -2
  7. data/lib/parallel_tests.rb +0 -1
  8. metadata +3 -51
  9. data/.gitignore +0 -4
  10. data/.rspec +0 -2
  11. data/.travis.yml +0 -10
  12. data/Gemfile +0 -9
  13. data/Gemfile.lock +0 -53
  14. data/Rakefile +0 -10
  15. data/ReadmeRails2.md +0 -48
  16. data/lib/parallel_tests/cli.rb +0 -206
  17. data/lib/parallel_tests/cucumber/failures_logger.rb +0 -25
  18. data/lib/parallel_tests/cucumber/runner.rb +0 -37
  19. data/lib/parallel_tests/cucumber/scenario_line_logger.rb +0 -51
  20. data/lib/parallel_tests/cucumber/scenarios.rb +0 -34
  21. data/lib/parallel_tests/gherkin/io.rb +0 -41
  22. data/lib/parallel_tests/gherkin/listener.rb +0 -87
  23. data/lib/parallel_tests/gherkin/runner.rb +0 -116
  24. data/lib/parallel_tests/gherkin/runtime_logger.rb +0 -28
  25. data/lib/parallel_tests/grouper.rb +0 -73
  26. data/lib/parallel_tests/railtie.rb +0 -8
  27. data/lib/parallel_tests/rspec/failures_logger.rb +0 -54
  28. data/lib/parallel_tests/rspec/logger_base.rb +0 -55
  29. data/lib/parallel_tests/rspec/runner.rb +0 -73
  30. data/lib/parallel_tests/rspec/runtime_logger.rb +0 -59
  31. data/lib/parallel_tests/rspec/summary_logger.rb +0 -19
  32. data/lib/parallel_tests/spinach/runner.rb +0 -19
  33. data/lib/parallel_tests/tasks.rb +0 -157
  34. data/lib/parallel_tests/test/runner.rb +0 -186
  35. data/lib/parallel_tests/test/runtime_logger.rb +0 -98
  36. data/lib/parallel_tests/version.rb +0 -3
  37. data/parallel_tests.gemspec +0 -14
  38. data/spec/integration_spec.rb +0 -437
  39. data/spec/parallel_tests/cli_spec.rb +0 -149
  40. data/spec/parallel_tests/cucumber/failure_logger_spec.rb +0 -43
  41. data/spec/parallel_tests/cucumber/runner_spec.rb +0 -25
  42. data/spec/parallel_tests/cucumber/scenarios_spec.rb +0 -69
  43. data/spec/parallel_tests/gherkin/listener_spec.rb +0 -96
  44. data/spec/parallel_tests/gherkin/runner_behaviour.rb +0 -216
  45. data/spec/parallel_tests/grouper_spec.rb +0 -61
  46. data/spec/parallel_tests/rspec/failures_logger_spec.rb +0 -82
  47. data/spec/parallel_tests/rspec/logger_base_spec.rb +0 -35
  48. data/spec/parallel_tests/rspec/runner_spec.rb +0 -201
  49. data/spec/parallel_tests/rspec/runtime_logger_spec.rb +0 -131
  50. data/spec/parallel_tests/rspec/summary_logger_spec.rb +0 -37
  51. data/spec/parallel_tests/spinach/runner_spec.rb +0 -12
  52. data/spec/parallel_tests/tasks_spec.rb +0 -178
  53. data/spec/parallel_tests/test/runner_spec.rb +0 -407
  54. data/spec/parallel_tests/test/runtime_logger_spec.rb +0 -112
  55. data/spec/parallel_tests_spec.rb +0 -137
  56. data/spec/spec_helper.rb +0 -182
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: dbd377cc06273701434d7d01cd12c2da000425f1
4
- data.tar.gz: cb7bd407b705223e273146cefff4dad1e3845b1d
3
+ metadata.gz: d378dd684c7e7a13876bc30b017c2d7d38a65238
4
+ data.tar.gz: 15a61d401253bcff02d591f5d73345beb3244fec
5
5
  SHA512:
6
- metadata.gz: 7d155b74b7ea83a7521decb4dcaf72d2cccb97f3eb8d43950424001e57b20b895d2f826d93b2960351e7d5435bf055e4d4a829d6baff7dcfe9d391591987ddac
7
- data.tar.gz: 66a159a28709388b78930da6e2e772b6dcc2898f6d3743a869d6d45e4292af65edfa4960daa0cca41a5e0f313d6a5b6b17d1489ac3033d5d46b649165362ecb9
6
+ metadata.gz: 3a743c635bd8a247d26536bb163f1b5383edc75c5e4cc9ca923d774a81df3656cdac6cfd15ebab70ead6293e07b7b71633d90d71e8c687f9968b36ebfab6a0ad
7
+ data.tar.gz: 788fd6fb129d348952fe7ed52314d19d573c59f420fbbe06a9a2b08937ca7dd50a454f267154a80325f4845b1c18d563382909b4ebf34985336f7ae3d6e05689
data/Readme.md CHANGED
@@ -170,12 +170,14 @@ Options are:
170
170
  -p, --pattern [PATTERN] run tests matching this pattern
171
171
  --group-by [TYPE] group tests by:
172
172
  found - order of finding files
173
- steps - number of cucumber steps
174
- filesize - size of files on disk
173
+ steps - number of cucumber/spinach steps
174
+ scenarios - individual cucumber scenarios
175
+ filesize - by size of the file
175
176
  default - runtime or filesize
176
177
  -m, --multiply-processes [FLOAT] use given number as a multiplier of processes to run
177
178
  -s, --single [PATTERN] Run all matching files in the same process
178
179
  -i, --isolate Do not run any other tests in the group used by --single(-s)
180
+ --only-group INT[, INT]
179
181
  -e, --exec [COMMAND] execute this code parallel and with ENV['TEST_ENV_NUM']
180
182
  -o, --test-options '[OPTIONS]' execute test commands with those options
181
183
  -t, --type [TYPE] test(default) / rspec / cucumber / spinach
@@ -185,7 +187,8 @@ Options are:
185
187
  --no-symlinks Do not traverse symbolic links to find test files
186
188
  --ignore-tags [PATTERN] When counting steps ignore scenarios with tags that match this pattern
187
189
  --nice execute test commands with low priority.
188
- --only-group INT[, INT] Group the files, but only run the group(s) specified here. Requires group-by filesize (will be set automatically if group-by is blank and only-group is specified)
190
+ --runtime-log [PATH] Location of previously recorded test runtimes
191
+ --verbose Print more output
189
192
  -v, --version Show Version
190
193
  -h, --help Show this.
191
194
 
@@ -302,6 +305,7 @@ inspired by [pivotal labs](http://pivotallabs.com/users/miked/blog/articles/849-
302
305
  - [Samer Masry](https://github.com/smasry)
303
306
  - [Volodymyr Mykhailyk](https:/github.com/volodymyr-mykhailyk)
304
307
  - [Mike Mueller](https://github.com/mmueller)
308
+ - [Aaron Jensen](https://github.com/aaronjensen)
305
309
 
306
310
  [Michael Grosser](http://grosser.it)<br/>
307
311
  michael@grosser.it<br/>
@@ -1,5 +1,9 @@
1
1
  #!/usr/bin/env ruby
2
- $LOAD_PATH << File.expand_path("../../lib", __FILE__)
2
+
3
+ # enable local usage from cloned repo
4
+ root = File.expand_path("../..", __FILE__)
5
+ $LOAD_PATH << "#{root}/lib" if File.exist?("#{root}/Gemfile")
6
+
3
7
  require "parallel_tests"
4
8
 
5
9
  ParallelTests::CLI.new.run(["--type", "cucumber"] + ARGV)
@@ -1,5 +1,9 @@
1
1
  #!/usr/bin/env ruby
2
- $LOAD_PATH << File.expand_path("../../lib", __FILE__)
2
+
3
+ # enable local usage from cloned repo
4
+ root = File.expand_path("../..", __FILE__)
5
+ $LOAD_PATH << "#{root}/lib" if File.exist?("#{root}/Gemfile")
6
+
3
7
  require "parallel_tests"
4
8
 
5
9
  ParallelTests::CLI.new.run(["--type", "rspec"] + ARGV)
@@ -1,5 +1,9 @@
1
1
  #!/usr/bin/env ruby
2
- $LOAD_PATH << File.expand_path("../../lib", __FILE__)
2
+
3
+ # enable local usage from cloned repo
4
+ root = File.expand_path("../..", __FILE__)
5
+ $LOAD_PATH << "#{root}/lib" if File.exist?("#{root}/Gemfile")
6
+
3
7
  require "parallel_tests"
4
8
 
5
9
  ParallelTests::CLI.new.run(["--type", "spinach"] + ARGV)
@@ -1,6 +1,9 @@
1
1
  #!/usr/bin/env ruby
2
- require 'rubygems' if RUBY_VERSION < "1.9"
3
- $LOAD_PATH << File.expand_path("../../lib", __FILE__)
2
+
3
+ # enable local usage from cloned repo
4
+ root = File.expand_path("../..", __FILE__)
5
+ $LOAD_PATH << "#{root}/lib" if File.exist?("#{root}/Gemfile")
6
+
4
7
  require "parallel_tests"
5
8
 
6
9
  ParallelTests::CLI.new.run(["--type", "test"] + ARGV)
@@ -1,4 +1,3 @@
1
- require "rubygems"
2
1
  require "parallel"
3
2
  require "parallel_tests/railtie" if defined? Rails::Railtie
4
3
  require "rbconfig"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: parallel_tests
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.9
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Michael Grosser
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-01-08 00:00:00.000000000 Z
11
+ date: 2015-02-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: parallel
@@ -34,60 +34,12 @@ executables:
34
34
  extensions: []
35
35
  extra_rdoc_files: []
36
36
  files:
37
- - ".gitignore"
38
- - ".rspec"
39
- - ".travis.yml"
40
- - Gemfile
41
- - Gemfile.lock
42
- - Rakefile
43
37
  - Readme.md
44
- - ReadmeRails2.md
45
38
  - bin/parallel_cucumber
46
39
  - bin/parallel_rspec
47
40
  - bin/parallel_spinach
48
41
  - bin/parallel_test
49
42
  - lib/parallel_tests.rb
50
- - lib/parallel_tests/cli.rb
51
- - lib/parallel_tests/cucumber/failures_logger.rb
52
- - lib/parallel_tests/cucumber/runner.rb
53
- - lib/parallel_tests/cucumber/scenario_line_logger.rb
54
- - lib/parallel_tests/cucumber/scenarios.rb
55
- - lib/parallel_tests/gherkin/io.rb
56
- - lib/parallel_tests/gherkin/listener.rb
57
- - lib/parallel_tests/gherkin/runner.rb
58
- - lib/parallel_tests/gherkin/runtime_logger.rb
59
- - lib/parallel_tests/grouper.rb
60
- - lib/parallel_tests/railtie.rb
61
- - lib/parallel_tests/rspec/failures_logger.rb
62
- - lib/parallel_tests/rspec/logger_base.rb
63
- - lib/parallel_tests/rspec/runner.rb
64
- - lib/parallel_tests/rspec/runtime_logger.rb
65
- - lib/parallel_tests/rspec/summary_logger.rb
66
- - lib/parallel_tests/spinach/runner.rb
67
- - lib/parallel_tests/tasks.rb
68
- - lib/parallel_tests/test/runner.rb
69
- - lib/parallel_tests/test/runtime_logger.rb
70
- - lib/parallel_tests/version.rb
71
- - parallel_tests.gemspec
72
- - spec/integration_spec.rb
73
- - spec/parallel_tests/cli_spec.rb
74
- - spec/parallel_tests/cucumber/failure_logger_spec.rb
75
- - spec/parallel_tests/cucumber/runner_spec.rb
76
- - spec/parallel_tests/cucumber/scenarios_spec.rb
77
- - spec/parallel_tests/gherkin/listener_spec.rb
78
- - spec/parallel_tests/gherkin/runner_behaviour.rb
79
- - spec/parallel_tests/grouper_spec.rb
80
- - spec/parallel_tests/rspec/failures_logger_spec.rb
81
- - spec/parallel_tests/rspec/logger_base_spec.rb
82
- - spec/parallel_tests/rspec/runner_spec.rb
83
- - spec/parallel_tests/rspec/runtime_logger_spec.rb
84
- - spec/parallel_tests/rspec/summary_logger_spec.rb
85
- - spec/parallel_tests/spinach/runner_spec.rb
86
- - spec/parallel_tests/tasks_spec.rb
87
- - spec/parallel_tests/test/runner_spec.rb
88
- - spec/parallel_tests/test/runtime_logger_spec.rb
89
- - spec/parallel_tests_spec.rb
90
- - spec/spec_helper.rb
91
43
  homepage: http://github.com/grosser/parallel_tests
92
44
  licenses:
93
45
  - MIT
@@ -100,7 +52,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
100
52
  requirements:
101
53
  - - ">="
102
54
  - !ruby/object:Gem::Version
103
- version: '0'
55
+ version: 1.9.3
104
56
  required_rubygems_version: !ruby/object:Gem::Requirement
105
57
  requirements:
106
58
  - - ">="
data/.gitignore DELETED
@@ -1,4 +0,0 @@
1
- *.sh
2
- tmp
3
- .bundle
4
- vendor
data/.rspec DELETED
@@ -1,2 +0,0 @@
1
- --color
2
- --backtrace
@@ -1,10 +0,0 @@
1
- rvm:
2
- - ree
3
- - 1.9.3
4
- - 2.0.0
5
- - 2.1.0
6
- - jruby-1.7.6
7
- - jruby-head
8
- matrix:
9
- allow_failures:
10
- - rvm: jruby-head
data/Gemfile DELETED
@@ -1,9 +0,0 @@
1
- source 'https://rubygems.org'
2
- gemspec
3
-
4
- gem 'bump'
5
- gem 'test-unit'
6
- gem 'rspec', '>=2.4'
7
- gem 'cucumber'
8
- gem 'spinach'
9
- gem 'rake'
@@ -1,53 +0,0 @@
1
- PATH
2
- remote: .
3
- specs:
4
- parallel_tests (1.0.9)
5
- parallel
6
-
7
- GEM
8
- remote: https://rubygems.org/
9
- specs:
10
- builder (3.2.2)
11
- bump (0.3.8)
12
- colorize (0.5.8)
13
- cucumber (1.3.10)
14
- builder (>= 2.1.2)
15
- diff-lcs (>= 1.1.3)
16
- gherkin (~> 2.12)
17
- multi_json (>= 1.7.5, < 2.0)
18
- multi_test (>= 0.0.2)
19
- diff-lcs (1.2.5)
20
- gherkin (2.12.2)
21
- multi_json (~> 1.3)
22
- gherkin (2.12.2-java)
23
- multi_json (~> 1.3)
24
- gherkin-ruby (0.3.0)
25
- multi_json (1.8.2)
26
- multi_test (0.0.2)
27
- parallel (1.3.3)
28
- rake (10.0.3)
29
- rspec (2.13.0)
30
- rspec-core (~> 2.13.0)
31
- rspec-expectations (~> 2.13.0)
32
- rspec-mocks (~> 2.13.0)
33
- rspec-core (2.13.1)
34
- rspec-expectations (2.13.0)
35
- diff-lcs (>= 1.1.3, < 2.0)
36
- rspec-mocks (2.13.1)
37
- spinach (0.8.3)
38
- colorize (= 0.5.8)
39
- gherkin-ruby (~> 0.3.0)
40
- test-unit (2.4.4)
41
-
42
- PLATFORMS
43
- java
44
- ruby
45
-
46
- DEPENDENCIES
47
- bump
48
- cucumber
49
- parallel_tests!
50
- rake
51
- rspec (>= 2.4)
52
- spinach
53
- test-unit
data/Rakefile DELETED
@@ -1,10 +0,0 @@
1
- require 'bump/tasks'
2
- require 'bundler/gem_tasks'
3
-
4
- task :default do
5
- if RUBY_VERSION < "1.9.0"
6
- sh "rspec --tag ~fails_on_ruby_187 spec/"
7
- else
8
- sh "rspec spec/"
9
- end
10
- end
@@ -1,48 +0,0 @@
1
- ### Install
2
-
3
- As gem
4
-
5
- gem install parallel_tests
6
-
7
- # add to config/environments/development.rb
8
- config.gem "parallel_tests"
9
-
10
- # add to Rakefile
11
- begin; require 'parallel_tests/tasks'; rescue LoadError; end
12
-
13
- OR as plugin
14
-
15
- gem install parallel
16
-
17
- # add to config/environments/development.rb
18
- config.gem "parallel"
19
-
20
- ./script/plugin install git://github.com/grosser/parallel_tests.git
21
-
22
- # add to Rakefile
23
- begin; require 'vendor/plugins/parallel_tests/lib/parallel_tests/tasks'; rescue LoadError; end
24
-
25
-
26
- Even process runtimes
27
- -----------------
28
-
29
- RSpec 1.x:
30
- --format progress
31
- --require parallel_tests/rspec/runtime_logger
32
- --format ParallelTests::RSpec::RuntimeLogger:tmp/parallel_runtime_rspec.log
33
-
34
- SpecSummaryLogger
35
- --------------------
36
-
37
- RSpec 1.x:
38
- --format progress
39
- --require parallel_tests/rspec/summary_logger
40
- --format ParallelTests::RSpec::SummaryLogger:tmp/spec_summary.log
41
-
42
- SpecFailuresLogger
43
- -----------------------
44
-
45
- RSpec 1.x:
46
- --format progress
47
- --require parallel_tests/rspec/failures_logger
48
- --format ParallelTests::RSpec::FailuresLogger:tmp/failing_specs.log
@@ -1,206 +0,0 @@
1
- require 'optparse'
2
- require 'tempfile'
3
- require 'parallel_tests'
4
-
5
- module ParallelTests
6
- class CLI
7
- def run(argv)
8
- options = parse_options!(argv)
9
-
10
- num_processes = ParallelTests.determine_number_of_processes(options[:count])
11
- num_processes = num_processes * (options[:multiply] || 1)
12
-
13
- if options[:execute]
14
- execute_shell_command_in_parallel(options[:execute], num_processes, options)
15
- else
16
- run_tests_in_parallel(num_processes, options)
17
- end
18
- end
19
-
20
- private
21
-
22
- def execute_in_parallel(items, num_processes, options)
23
- Tempfile.open 'parallel_tests-lock' do |lock|
24
- return Parallel.map(items, :in_threads => num_processes) do |item|
25
- result = yield(item)
26
- report_output(result, lock) if options[:serialize_stdout]
27
- result
28
- end
29
- end
30
- end
31
-
32
- def run_tests_in_parallel(num_processes, options)
33
- test_results = nil
34
-
35
- report_time_taken do
36
- groups = @runner.tests_in_groups(options[:files], num_processes, options)
37
-
38
- test_results = if options[:only_group]
39
- groups_to_run = options[:only_group].collect{|i| groups[i - 1]}
40
- report_number_of_tests(groups_to_run)
41
- execute_in_parallel(groups_to_run, groups_to_run.size, options) do |group|
42
- run_tests(group, groups_to_run.index(group), 1, options)
43
- end
44
- else
45
- report_number_of_tests(groups)
46
-
47
- execute_in_parallel(groups, groups.size, options) do |group|
48
- run_tests(group, groups.index(group), num_processes, options)
49
- end
50
- end
51
-
52
- report_results(test_results)
53
- end
54
-
55
- abort final_fail_message if any_test_failed?(test_results)
56
- end
57
-
58
- def run_tests(group, process_number, num_processes, options)
59
- if group.empty?
60
- {:stdout => '', :exit_status => 0}
61
- else
62
- @runner.run_tests(group, process_number, num_processes, options)
63
- end
64
- end
65
-
66
- def report_output(result, lock)
67
- lock.flock File::LOCK_EX
68
- $stdout.puts result[:stdout]
69
- $stdout.flush
70
- ensure
71
- lock.flock File::LOCK_UN
72
- end
73
-
74
- def report_results(test_results)
75
- results = @runner.find_results(test_results.map { |result| result[:stdout] }*"")
76
- puts ""
77
- puts @runner.summarize_results(results)
78
- end
79
-
80
- def report_number_of_tests(groups)
81
- name = @runner.test_file_name
82
- num_processes = groups.size
83
- num_tests = groups.map(&:size).inject(:+)
84
- puts "#{num_processes} processes for #{num_tests} #{name}s, ~ #{num_tests / groups.size} #{name}s per process"
85
- end
86
-
87
- #exit with correct status code so rake parallel:test && echo 123 works
88
- def any_test_failed?(test_results)
89
- test_results.any? { |result| result[:exit_status] != 0 }
90
- end
91
-
92
- def parse_options!(argv)
93
- options = {}
94
- OptionParser.new do |opts|
95
- opts.banner = <<BANNER
96
- Run all tests in parallel, giving each process ENV['TEST_ENV_NUMBER'] ('', '2', '3', ...)
97
-
98
- [optional] Only run selected files & folders:
99
- parallel_test test/bar test/baz/xxx_text.rb
100
-
101
- Options are:
102
- BANNER
103
- opts.on("-n [PROCESSES]", Integer, "How many processes to use, default: available CPUs") { |n| options[:count] = n }
104
- opts.on("-p", "--pattern [PATTERN]", "run tests matching this pattern") { |pattern| options[:pattern] = /#{pattern}/ }
105
- opts.on("--group-by [TYPE]", <<-TEXT
106
- group tests by:
107
- found - order of finding files
108
- steps - number of cucumber/spinach steps
109
- scenarios - individual cucumber scenarios
110
- filesize - by size of the file
111
- default - runtime or filesize
112
- TEXT
113
- ) { |type| options[:group_by] = type.to_sym }
114
- opts.on("-m [FLOAT]", "--multiply-processes [FLOAT]", Float, "use given number as a multiplier of processes to run") { |multiply| options[:multiply] = multiply }
115
-
116
- opts.on("-s [PATTERN]", "--single [PATTERN]",
117
- "Run all matching files in the same process") do |pattern|
118
-
119
- options[:single_process] ||= []
120
- options[:single_process] << /#{pattern}/
121
- end
122
-
123
- opts.on("-i", "--isolate",
124
- "Do not run any other tests in the group used by --single(-s)") do |pattern|
125
-
126
- options[:isolate] = true
127
- end
128
-
129
- opts.on("--only-group INT[, INT]", Array) { |groups| options[:only_group] = groups.map(&:to_i) }
130
-
131
- opts.on("-e", "--exec [COMMAND]", "execute this code parallel and with ENV['TEST_ENV_NUM']") { |path| options[:execute] = path }
132
- opts.on("-o", "--test-options '[OPTIONS]'", "execute test commands with those options") { |arg| options[:test_options] = arg }
133
- opts.on("-t", "--type [TYPE]", "test(default) / rspec / cucumber / spinach") do |type|
134
- begin
135
- @runner = load_runner(type)
136
- rescue NameError, LoadError => e
137
- puts "Runner for `#{type}` type has not been found! (#{e})"
138
- abort
139
- end
140
- end
141
- opts.on("--serialize-stdout", "Serialize stdout output, nothing will be written until everything is done") { options[:serialize_stdout] = true }
142
- opts.on("--combine-stderr", "Combine stderr into stdout, useful in conjunction with --serialize-stdout") { options[:combine_stderr] = true }
143
- opts.on("--non-parallel", "execute same commands but do not in parallel, needs --exec") { options[:non_parallel] = true }
144
- opts.on("--no-symlinks", "Do not traverse symbolic links to find test files") { options[:symlinks] = false }
145
- opts.on('--ignore-tags [PATTERN]', 'When counting steps ignore scenarios with tags that match this pattern') { |arg| options[:ignore_tag_pattern] = arg }
146
- opts.on("--nice", "execute test commands with low priority.") { options[:nice] = true }
147
- opts.on("--runtime-log [PATH]", "Location of previously recorded test runtimes") { |path| options[:runtime_log] = path }
148
- opts.on("-v", "--version", "Show Version") { puts ParallelTests::VERSION; exit }
149
- opts.on("-h", "--help", "Show this.") { puts opts; exit }
150
- end.parse!(argv)
151
-
152
- if options[:count] == 0
153
- options.delete(:count)
154
- options[:non_parallel] = true
155
- end
156
-
157
- options[:files] = argv
158
-
159
- options[:group_by] ||= :filesize if options[:only_group]
160
-
161
- raise "--group-by found and --single-process are not supported" if options[:group_by] == :found and options[:single_process]
162
- raise "--group-by filesize is required for --only-group" if options[:group_by] != :filesize and options[:only_group]
163
-
164
- options
165
- end
166
-
167
- def load_runner(type)
168
- require "parallel_tests/#{type}/runner"
169
- runner_classname = type.split("_").map(&:capitalize).join.sub("Rspec", "RSpec")
170
- klass_name = "ParallelTests::#{runner_classname}::Runner"
171
- klass_name.split('::').inject(Object) { |x, y| x.const_get(y) }
172
- end
173
-
174
- def execute_shell_command_in_parallel(command, num_processes, options)
175
- runs = (0...num_processes).to_a
176
- results = if options[:non_parallel]
177
- runs.map do |i|
178
- ParallelTests::Test::Runner.execute_command(command, i, num_processes, options)
179
- end
180
- else
181
- execute_in_parallel(runs, num_processes, options) do |i|
182
- ParallelTests::Test::Runner.execute_command(command, i, num_processes, options)
183
- end
184
- end.flatten
185
-
186
- abort if results.any? { |r| r[:exit_status] != 0 }
187
- end
188
-
189
- def report_time_taken
190
- start = Time.now
191
- yield
192
- puts "\nTook #{Time.now - start} seconds"
193
- end
194
-
195
- def final_fail_message
196
- fail_message = "#{@runner.name}s Failed"
197
- fail_message = "\e[31m#{fail_message}\e[0m" if use_colors?
198
-
199
- fail_message
200
- end
201
-
202
- def use_colors?
203
- $stdout.tty?
204
- end
205
- end
206
- end