parallel_tests 1.0.9 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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
@@ -1,61 +0,0 @@
1
- require 'spec_helper'
2
- require 'parallel_tests/grouper'
3
- require 'tmpdir'
4
-
5
- describe ParallelTests::Grouper do
6
- describe :by_steps do
7
- def write(file, content)
8
- File.open(file,'w'){|f| f.write content }
9
- end
10
-
11
- it "sorts features by steps" do
12
- tmpdir = nil
13
- result = Dir.mktmpdir do |dir|
14
- tmpdir = dir
15
- write("#{dir}/a.feature", "Feature: xxx\n Scenario: xxx\n Given something")
16
- write("#{dir}/b.feature", "Feature: xxx\n Scenario: xxx\n Given something\n Scenario: yyy\n Given something")
17
- write("#{dir}/c.feature", "Feature: xxx\n Scenario: xxx\n Given something")
18
- ParallelTests::Grouper.by_steps(["#{dir}/a.feature", "#{dir}/b.feature", "#{dir}/c.feature"], 2, {})
19
- end
20
-
21
- # testing inside mktmpdir is always green
22
- result.should =~ [
23
- ["#{tmpdir}/a.feature", "#{tmpdir}/c.feature"],
24
- ["#{tmpdir}/b.feature"]
25
- ]
26
- end
27
- end
28
-
29
- describe :in_even_groups_by_size do
30
- let(:files_with_size){ {"1" => 1, "2" => 2, "3" => 3, "4" => 4, "5" => 5} }
31
-
32
- def call(num_groups)
33
- ParallelTests::Grouper.in_even_groups_by_size(files_with_size, num_groups)
34
- end
35
-
36
- it "groups 1 by 1 for same groups as size" do
37
- call(5).should == [["5"], ["4"], ["3"], ["2"], ["1"]]
38
- end
39
-
40
- it "groups into even groups" do
41
- call(2).should == [["1", "2", "5"], ["3", "4"]]
42
- end
43
-
44
- it "groups into a single group" do
45
- call(1).should == [["1", "2", "3", "4", "5"]]
46
- end
47
-
48
- it "adds empty groups if there are more groups than feature files" do
49
- call(6).should == [["5"], ["4"], ["3"], ["2"], ["1"], []]
50
- end
51
- end
52
-
53
- describe :by_scenarios do
54
- let(:feature_file) { double 'file' }
55
-
56
- it 'splits a feature into individual scenarios' do
57
- ParallelTests::Cucumber::Scenarios.should_receive(:all).and_return({ 'feature_file:3' => 1 })
58
- ParallelTests::Grouper.by_scenarios([feature_file], 1)
59
- end
60
- end
61
- end
@@ -1,82 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe ParallelTests::RSpec::FailuresLogger do
4
- def silence_warnings
5
- old_verbose, $VERBOSE = $VERBOSE, nil
6
- yield
7
- ensure
8
- $VERBOSE = old_verbose
9
- end
10
-
11
- before do
12
- @output = OutputLogger.new([])
13
- @example1 = mock( 'example', :location => "#{Dir.pwd}/spec/path/to/example:123", :full_description => 'should do stuff', :description => 'd' )
14
- @example2 = mock( 'example', :location => "#{Dir.pwd}/spec/path/to/example2:456", :full_description => 'should do other stuff', :description => 'd')
15
- @exception1 = mock( :to_s => 'exception', :backtrace => [ '/path/to/error/line:33' ] )
16
- @failure1 = mock( 'example', :location => "#{Dir.pwd}/example:123", :header => 'header', :exception => @exception1 )
17
- @logger = ParallelTests::RSpec::FailuresLogger.new(@output)
18
- end
19
-
20
- after do
21
- silence_warnings{ ParallelTests::RSpec::LoggerBase::RSPEC_1 = false }
22
- end
23
-
24
- def clean_output
25
- @output.output.join("\n").gsub(/\e\[\d+m/,'')
26
- end
27
-
28
- it "should produce a list of command lines for failing examples" do
29
- @logger.example_failed @example1
30
- @logger.example_failed @example2
31
-
32
- @logger.dump_failures
33
- @logger.dump_summary(1,2,3,4)
34
-
35
- clean_output.should =~ /^rspec .*? should do stuff/
36
- clean_output.should =~ /^rspec .*? should do other stuff/
37
- end
38
-
39
- it "should invoke spec for rspec 1" do
40
- silence_warnings{ ParallelTests::RSpec::LoggerBase::RSPEC_1 = true }
41
- ParallelTests.stub!(:bundler_enabled?).and_return true
42
- ParallelTests::RSpec::Runner.stub!(:run).with("bundle show rspec-core").and_return "Could not find gem 'rspec-core'."
43
- @logger.example_failed @example1
44
-
45
- @logger.dump_failures
46
- @logger.dump_summary(1,2,3,4)
47
-
48
- clean_output.should =~ /^bundle exec spec/
49
- end
50
-
51
- it "should invoke rspec for rspec 2" do
52
- ParallelTests.stub!(:bundler_enabled?).and_return true
53
- ParallelTests::RSpec::Runner.stub!(:run).with("bundle show rspec").and_return "/foo/bar/rspec-core-2.0.2"
54
- @logger.example_failed @example1
55
-
56
- @logger.dump_failures
57
- @logger.dump_summary(1,2,3,4)
58
-
59
- clean_output.should =~ /^rspec/
60
- end
61
-
62
- it "should return relative paths" do
63
- @logger.example_failed @example1
64
- @logger.example_failed @example2
65
-
66
- @logger.dump_failures
67
- @logger.dump_summary(1,2,3,4)
68
-
69
- clean_output.should =~ %r(\./spec/path/to/example:123)
70
- clean_output.should =~ %r(\./spec/path/to/example2:456)
71
- end
72
-
73
-
74
- # should not longer be a problem since its using native rspec methods
75
- xit "should not log examples without location" do
76
- example = mock('example', :location => 'bla', :full_description => 'before :all')
77
- @logger.example_failed example
78
- @logger.dump_failures
79
- @logger.dump_summary(1,2,3,4)
80
- clean_output.should == ''
81
- end
82
- end
@@ -1,35 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe ParallelTests::RSpec::LoggerBase do
4
- before do
5
- @temp_file = Tempfile.open('xxx')
6
- @logger = ParallelTests::RSpec::LoggerBase.new(@temp_file)
7
- end
8
-
9
- after do
10
- @temp_file.close
11
- end
12
-
13
- describe 'on tests finished' do
14
- it 'should respond to close' do
15
- expect(@logger).to respond_to(:close)
16
- end
17
-
18
- it 'should close output' do
19
- @temp_file.should_receive(:close)
20
- @logger.close
21
- end
22
-
23
- it 'should not close stdout' do
24
- @logger = ParallelTests::RSpec::LoggerBase.new($stdout)
25
- $stdout.should_not_receive(:close)
26
- @logger.close
27
- end
28
-
29
- it 'should not close IO instance' do
30
- io = double(IO)
31
- @logger = ParallelTests::RSpec::LoggerBase.new(io)
32
- @logger.close
33
- end
34
- end
35
- end
@@ -1,201 +0,0 @@
1
- require "spec_helper"
2
- require "parallel_tests/rspec/runner"
3
-
4
- describe ParallelTests::RSpec::Runner do
5
- test_tests_in_groups(ParallelTests::RSpec::Runner, 'spec', '_spec.rb')
6
-
7
- describe :run_tests do
8
- before do
9
- File.stub!(:file?).with('script/spec').and_return false
10
- File.stub!(:file?).with('spec/spec.opts').and_return false
11
- File.stub!(:file?).with('spec/parallel_spec.opts').and_return false
12
- File.stub!(:file?).with('.rspec_parallel').and_return false
13
- ParallelTests.stub!(:bundler_enabled?).and_return false
14
- end
15
-
16
- def call(*args)
17
- ParallelTests::RSpec::Runner.run_tests(*args)
18
- end
19
-
20
- def should_run_with(regex)
21
- ParallelTests::Test::Runner.should_receive(:execute_command).with{|a,b,c,d| a =~ regex}
22
- end
23
-
24
- def should_not_run_with(regex)
25
- ParallelTests::Test::Runner.should_receive(:execute_command).with{|a,b,c,d| a !~ regex}
26
- end
27
-
28
- it "runs command using nice when specifed" do
29
- ParallelTests::Test::Runner.should_receive(:execute_command_and_capture_output).with{|a,b,c| b =~ %r{^nice rspec}}
30
- call('xxx', 1, 22, :nice => true)
31
- end
32
-
33
- it "runs with color when called from cmdline" do
34
- should_run_with %r{ --tty}
35
- $stdout.should_receive(:tty?).and_return true
36
- call('xxx', 1, 22, {})
37
- end
38
-
39
- it "runs without color when not called from cmdline" do
40
- should_not_run_with %r{ --tty}
41
- $stdout.should_receive(:tty?).and_return false
42
- call('xxx', 1, 22, {})
43
- end
44
-
45
- it "runs with color for rspec 1 when called for the cmdline" do
46
- File.should_receive(:file?).with('script/spec').and_return true
47
- ParallelTests::Test::Runner.should_receive(:execute_command).with { |a, b, c, d| d[:env] == {"RSPEC_COLOR" => "1"} }
48
- $stdout.should_receive(:tty?).and_return true
49
- call('xxx', 1, 22, {})
50
- end
51
-
52
- it "runs without color for rspec 1 when not called for the cmdline" do
53
- File.should_receive(:file?).with('script/spec').and_return true
54
- ParallelTests::Test::Runner.should_receive(:execute_command).with { |a, b, c, d| d[:env] == {} }
55
- $stdout.should_receive(:tty?).and_return false
56
- call('xxx', 1, 22, {})
57
- end
58
-
59
- it "run bundle exec spec when on bundler rspec 1" do
60
- File.stub!(:file?).with('script/spec').and_return false
61
- ParallelTests.stub!(:bundler_enabled?).and_return true
62
- ParallelTests::RSpec::Runner.stub!(:run).with("bundle show rspec-core").and_return "Could not find gem 'rspec-core' in bundler."
63
- should_run_with %r{bundle exec spec}
64
- call('xxx', 1, 22, {})
65
- end
66
-
67
- it "run bundle exec rspec when on bundler rspec 2" do
68
- File.stub!(:file?).with('script/spec').and_return false
69
- ParallelTests.stub!(:bundler_enabled?).and_return true
70
- ParallelTests::RSpec::Runner.stub!(:run).with("bundle show rspec-core").and_return "/foo/bar/rspec-core-2.0.2"
71
- should_run_with %r{bundle exec rspec}
72
- call('xxx', 1, 22, {})
73
- end
74
-
75
- it "runs script/spec when script/spec can be found" do
76
- File.should_receive(:file?).with('script/spec').and_return true
77
- should_run_with %r{script/spec}
78
- call('xxx' ,1, 22, {})
79
- end
80
-
81
- it "runs spec when script/spec cannot be found" do
82
- File.stub!(:file?).with('script/spec').and_return false
83
- should_not_run_with %r{ script/spec}
84
- call('xxx', 1, 22, {})
85
- end
86
-
87
- it "uses bin/rspec when present" do
88
- File.stub(:exists?).with('bin/rspec').and_return true
89
- should_run_with %r{bin/rspec}
90
- call('xxx', 1, 22, {})
91
- end
92
-
93
- it "uses no -O when no opts where found" do
94
- File.stub!(:file?).with('spec/spec.opts').and_return false
95
- should_not_run_with %r{spec/spec.opts}
96
- call('xxx', 1, 22, {})
97
- end
98
-
99
- it "uses -O spec/spec.opts when found (with script/spec)" do
100
- File.stub!(:file?).with('script/spec').and_return true
101
- File.stub!(:file?).with('spec/spec.opts').and_return true
102
- should_run_with %r{script/spec\s+-O spec/spec.opts}
103
- call('xxx', 1, 22, {})
104
- end
105
-
106
- it "uses -O spec/parallel_spec.opts when found (with script/spec)" do
107
- File.stub!(:file?).with('script/spec').and_return true
108
- File.should_receive(:file?).with('spec/parallel_spec.opts').and_return true
109
- should_run_with %r{script/spec\s+-O spec/parallel_spec.opts}
110
- call('xxx', 1, 22, {})
111
- end
112
-
113
- it "uses -O .rspec_parallel when found (with script/spec)" do
114
- File.stub!(:file?).with('script/spec').and_return true
115
- File.should_receive(:file?).with('.rspec_parallel').and_return true
116
- should_run_with %r{script/spec\s+-O .rspec_parallel}
117
- call('xxx', 1, 22, {})
118
- end
119
-
120
- it "uses -O spec/parallel_spec.opts with rspec1" do
121
- File.should_receive(:file?).with('spec/parallel_spec.opts').and_return true
122
-
123
- ParallelTests.stub!(:bundler_enabled?).and_return true
124
- ParallelTests::RSpec::Runner.stub!(:run).with("bundle show rspec-core").and_return "Could not find gem 'rspec-core'."
125
-
126
- should_run_with %r{spec\s+-O spec/parallel_spec.opts}
127
- call('xxx', 1, 22, {})
128
- end
129
-
130
- it "uses -O spec/parallel_spec.opts with rspec2" do
131
- pending if RUBY_PLATFORM == "java" # FIXME not sure why, but fails on travis
132
- File.should_receive(:file?).with('spec/parallel_spec.opts').and_return true
133
-
134
- ParallelTests.stub!(:bundler_enabled?).and_return true
135
- ParallelTests::RSpec::Runner.stub!(:run).with("bundle show rspec-core").and_return "/foo/bar/rspec-core-2.4.2"
136
-
137
- should_run_with %r{rspec\s+--color --tty -O spec/parallel_spec.opts}
138
- call('xxx', 1, 22, {})
139
- end
140
-
141
- it "uses options passed in" do
142
- should_run_with %r{rspec -f n}
143
- call('xxx', 1, 22, :test_options => '-f n')
144
- end
145
-
146
- it "returns the output" do
147
- ParallelTests::RSpec::Runner.should_receive(:execute_command).and_return :x => 1
148
- call('xxx', 1, 22, {}).should == {:x => 1}
149
- end
150
- end
151
-
152
- describe :find_results do
153
- def call(*args)
154
- ParallelTests::RSpec::Runner.find_results(*args)
155
- end
156
-
157
- it "finds multiple results in spec output" do
158
- output = "
159
- ....F...
160
- ..
161
- failute fsddsfsd
162
- ...
163
- ff.**..
164
- 0 examples, 0 failures, 0 pending
165
- ff.**..
166
- 1 example, 1 failure, 1 pending
167
- "
168
-
169
- call(output).should == ['0 examples, 0 failures, 0 pending','1 example, 1 failure, 1 pending']
170
- end
171
-
172
- it "is robust against scrambeled output" do
173
- output = "
174
- ....F...
175
- ..
176
- failute fsddsfsd
177
- ...
178
- ff.**..
179
- 0 exFampl*es, 0 failures, 0 pend.ing
180
- ff.**..
181
- 1 exampF.les, 1 failures, 1 pend.ing
182
- "
183
-
184
- call(output).should == ['0 examples, 0 failures, 0 pending','1 examples, 1 failures, 1 pending']
185
- end
186
- end
187
-
188
- describe ".find_tests" do
189
- def call(*args)
190
- ParallelTests::RSpec::Runner.send(:find_tests, *args)
191
- end
192
-
193
- it "doesn't find bakup files with the same name as test files" do
194
- with_files(['a/x_spec.rb','a/x_spec.rb.bak']) do |root|
195
- call(["#{root}/"]).should == [
196
- "#{root}/a/x_spec.rb",
197
- ]
198
- end
199
- end
200
- end
201
- end
@@ -1,131 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe ParallelTests::RSpec::RuntimeLogger do
4
- before do
5
- # pretend we run in parallel or the logger will log nothing
6
- ENV['TEST_ENV_NUMBER'] = ''
7
- @clean_output = %r{^spec/foo.rb:[-\.e\d]+$}m
8
- end
9
-
10
- after do
11
- ENV.delete 'TEST_ENV_NUMBER'
12
- end
13
-
14
- def log_for_a_file(options={})
15
- Tempfile.open('xxx') do |temp|
16
- temp.close
17
- f = File.open(temp.path,'w')
18
- logger = if block_given?
19
- yield(f)
20
- else
21
- ParallelTests::RSpec::RuntimeLogger.new(f)
22
- end
23
-
24
- example = double(:file_path => "#{Dir.pwd}/spec/foo.rb")
25
- if ParallelTests::RSpec::RuntimeLogger::RSPEC_3
26
- example = double(:group => example)
27
- end
28
-
29
- logger.example_group_started example
30
- logger.example_group_finished example
31
-
32
- logger.start_dump
33
-
34
- #f.close
35
- return File.read(f.path)
36
- end
37
- end
38
-
39
- it "logs runtime with relative paths" do
40
- log_for_a_file.should =~ @clean_output
41
- end
42
-
43
- it "does not log if we do not run in parallel" do
44
- ENV.delete 'TEST_ENV_NUMBER'
45
- log_for_a_file.should == ""
46
- end
47
-
48
- it "appends to a given file" do
49
- result = log_for_a_file do |f|
50
- f.write 'FooBar'
51
- ParallelTests::RSpec::RuntimeLogger.new(f)
52
- end
53
- result.should include('FooBar')
54
- result.should include('foo.rb')
55
- end
56
-
57
- it "overwrites a given path" do
58
- result = log_for_a_file do |f|
59
- f.write 'FooBar'
60
- ParallelTests::RSpec::RuntimeLogger.new(f.path)
61
- end
62
- result.should_not include('FooBar')
63
- result.should include('foo.rb')
64
- end
65
-
66
- context "integration" do
67
- around do |example|
68
- Dir.mktmpdir do |dir|
69
- Dir.chdir(dir, &example)
70
- end
71
- end
72
-
73
- def write(file, content)
74
- FileUtils.mkdir_p(File.dirname(file))
75
- File.open(file, 'w') { |f| f.write content }
76
- end
77
-
78
- it "logs shared examples into the running files" do
79
- write "spec/spec_helper.rb", <<-RUBY
80
- shared_examples "foo" do
81
- it "is slow" do
82
- sleep 0.5
83
- end
84
- end
85
- RUBY
86
-
87
- ["a", "b"].each do |letter|
88
- write "spec/#{letter}_spec.rb", <<-RUBY
89
- require 'spec_helper'
90
- describe 'xxx' do
91
- it_behaves_like "foo"
92
- end
93
- RUBY
94
- end
95
-
96
- system("TEST_ENV_NUMBER=1 rspec spec -I #{Bundler.root.join("lib")} --format ParallelTests::RSpec::RuntimeLogger --out runtime.log 2>&1") || raise("nope")
97
-
98
- result = File.read("runtime.log")
99
- result.should include "a_spec.rb:0.5"
100
- result.should include "b_spec.rb:0.5"
101
- result.should_not include "spec_helper"
102
- end
103
-
104
- it "logs multiple describe blocks" do
105
- write "spec/a_spec.rb", <<-RUBY
106
- describe "xxx" do
107
- it "is slow" do
108
- sleep 0.5
109
- end
110
- end
111
-
112
- describe "yyy" do
113
- it "is slow" do
114
- sleep 0.5
115
- end
116
-
117
- describe "yep" do
118
- it "is slow" do
119
- sleep 0.5
120
- end
121
- end
122
- end
123
- RUBY
124
-
125
- system("TEST_ENV_NUMBER=1 rspec spec -I #{Bundler.root.join("lib")} --format ParallelTests::RSpec::RuntimeLogger --out runtime.log 2>&1") || raise("nope")
126
-
127
- result = File.read("runtime.log")
128
- result.should include "a_spec.rb:1.5"
129
- end
130
- end
131
- end