parallel_tests 0.6.20 → 0.7.0.alpha

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 (40) hide show
  1. data/.gitignore +1 -0
  2. data/Gemfile +2 -4
  3. data/Gemfile.lock +7 -7
  4. data/Rakefile +18 -16
  5. data/Readme.md +15 -12
  6. data/bin/parallel_test +2 -98
  7. data/lib/parallel_tests.rb +2 -125
  8. data/lib/parallel_tests/cli.rb +102 -0
  9. data/lib/parallel_tests/cucumber/runner.rb +40 -0
  10. data/lib/parallel_tests/cucumber/runtime_logger.rb +58 -0
  11. data/lib/parallel_tests/grouper.rb +2 -2
  12. data/lib/parallel_tests/railtie.rb +3 -3
  13. data/lib/{parallel_specs/spec_failures_logger.rb → parallel_tests/spec/failures_logger.rb} +4 -3
  14. data/lib/{parallel_specs/spec_logger_base.rb → parallel_tests/spec/logger_base.rb} +7 -3
  15. data/lib/parallel_tests/spec/runner.rb +56 -0
  16. data/lib/{parallel_specs/spec_runtime_logger.rb → parallel_tests/spec/runtime_logger.rb} +2 -2
  17. data/lib/{parallel_specs/spec_summary_logger.rb → parallel_tests/spec/summary_logger.rb} +2 -2
  18. data/lib/parallel_tests/tasks.rb +0 -25
  19. data/lib/parallel_tests/test/runner.rb +126 -0
  20. data/lib/parallel_tests/test/runtime_logger.rb +92 -0
  21. data/lib/parallel_tests/version.rb +3 -0
  22. data/parallel_tests.gemspec +10 -61
  23. data/spec/parallel_tests/cucumber/runner_spec.rb +76 -0
  24. data/spec/{parallel_specs/spec_failure_logger_spec.rb → parallel_tests/spec/failure_logger_spec.rb} +8 -8
  25. data/spec/parallel_tests/spec/runner_spec.rb +178 -0
  26. data/spec/{parallel_specs/spec_runtime_logger_spec.rb → parallel_tests/spec/runtime_logger_spec.rb} +4 -4
  27. data/spec/{parallel_specs/spec_summary_logger_spec.rb → parallel_tests/spec/summary_logger_spec.rb} +2 -2
  28. data/spec/parallel_tests/test/runner_spec.rb +179 -0
  29. data/spec/parallel_tests/{runtime_logger_spec.rb → test/runtime_logger_spec.rb} +19 -16
  30. data/spec/parallel_tests_spec.rb +2 -158
  31. data/spec/spec_helper.rb +9 -7
  32. metadata +30 -26
  33. data/VERSION +0 -1
  34. data/lib/parallel_cucumber.rb +0 -36
  35. data/lib/parallel_cucumber/runtime_logger.rb +0 -57
  36. data/lib/parallel_specs.rb +0 -52
  37. data/lib/parallel_tests/runtime_logger.rb +0 -78
  38. data/lib/tasks/parallel_tests.rake +0 -1
  39. data/spec/parallel_cucumber_spec.rb +0 -72
  40. data/spec/parallel_specs_spec.rb +0 -173
@@ -1,17 +1,18 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe ParallelTests::RuntimeLogger do
4
-
3
+ describe ParallelTests::Test::RuntimeLogger do
5
4
  describe :writing do
5
+ let(:log) { ParallelTests::Test::Runner.runtime_log }
6
+
6
7
  it "overwrites the runtime_log file on first log invocation" do
7
8
  class FakeTest
8
9
  end
9
10
  test = FakeTest.new
10
11
  time = Time.now
11
- File.open(ParallelTests.runtime_log, 'w'){ |f| f.puts("FooBar") }
12
- ParallelTests::RuntimeLogger.send(:class_variable_set,:@@has_started, false)
13
- ParallelTests::RuntimeLogger.log(test, time, Time.at(time.to_f+2.00))
14
- result = File.read(ParallelTests.runtime_log)
12
+ File.open(log, 'w'){ |f| f.puts("FooBar") }
13
+ ParallelTests::Test::RuntimeLogger.send(:class_variable_set,:@@has_started, false)
14
+ ParallelTests::Test::RuntimeLogger.log(test, time, Time.at(time.to_f+2.00))
15
+ result = File.read(log)
15
16
  result.should_not include('FooBar')
16
17
  result.should include('test/fake_test.rb:2.00')
17
18
  end
@@ -25,25 +26,28 @@ describe ParallelTests::RuntimeLogger do
25
26
  other_test = OtherFakeTest.new
26
27
 
27
28
  time = Time.now
28
- File.open(ParallelTests.runtime_log, 'w'){ |f| f.puts("FooBar") }
29
- ParallelTests::RuntimeLogger.send(:class_variable_set,:@@has_started, false)
30
- ParallelTests::RuntimeLogger.log(test, time, Time.at(time.to_f+2.00))
31
- ParallelTests::RuntimeLogger.log(other_test, time, Time.at(time.to_f+2.00))
32
- result = File.read(ParallelTests.runtime_log)
29
+ File.open(log, 'w'){ |f| f.puts("FooBar") }
30
+ ParallelTests::Test::RuntimeLogger.send(:class_variable_set,:@@has_started, false)
31
+ ParallelTests::Test::RuntimeLogger.log(test, time, Time.at(time.to_f+2.00))
32
+ ParallelTests::Test::RuntimeLogger.log(other_test, time, Time.at(time.to_f+2.00))
33
+ result = File.read(log)
33
34
  result.should_not include('FooBar')
34
35
  result.should include('test/fake_test.rb:2.00')
35
36
  result.should include('test/other_fake_test.rb:2.00')
36
37
  end
37
-
38
38
  end
39
39
 
40
40
  describe :formatting do
41
+ def call(*args)
42
+ ParallelTests::Test::RuntimeLogger.message(*args)
43
+ end
44
+
41
45
  it "formats results for simple test names" do
42
46
  class FakeTest
43
47
  end
44
48
  test = FakeTest.new
45
49
  time = Time.now
46
- ParallelTests::RuntimeLogger.message(test, time, Time.at(time.to_f+2.00)).should == 'test/fake_test.rb:2.00'
50
+ call(test, time, Time.at(time.to_f+2.00)).should == 'test/fake_test.rb:2.00'
47
51
  end
48
52
 
49
53
  it "formats results for complex test names" do
@@ -53,7 +57,7 @@ describe ParallelTests::RuntimeLogger do
53
57
  end
54
58
  test = AVeryComplex::FakeTest.new
55
59
  time = Time.now
56
- ParallelTests::RuntimeLogger.message(test, time, Time.at(time.to_f+2.00)).should == 'test/a_very_complex/fake_test.rb:2.00'
60
+ call(test, time, Time.at(time.to_f+2.00)).should == 'test/a_very_complex/fake_test.rb:2.00'
57
61
  end
58
62
 
59
63
  it "guesses subdirectory structure for rails test classes" do
@@ -67,8 +71,7 @@ describe ParallelTests::RuntimeLogger do
67
71
  end
68
72
  test = FakeControllerTest.new
69
73
  time = Time.now
70
- ParallelTests::RuntimeLogger.message(test, time, Time.at(time.to_f+2.00)).should == 'test/functional/fake_controller_test.rb:2.00'
74
+ call(test, time, Time.at(time.to_f+2.00)).should == 'test/functional/fake_controller_test.rb:2.00'
71
75
  end
72
76
  end
73
-
74
77
  end
@@ -1,8 +1,6 @@
1
- require 'spec_helper'
1
+ require "spec_helper"
2
2
 
3
3
  describe ParallelTests do
4
- test_tests_in_groups(ParallelTests, 'test', '_test.rb')
5
-
6
4
  describe :parse_rake_args do
7
5
  it "should return the count" do
8
6
  args = {:count => 2}
@@ -58,90 +56,6 @@ describe ParallelTests do
58
56
  end
59
57
  end
60
58
 
61
- describe :run_tests do
62
- it "uses TEST_ENV_NUMBER=blank when called for process 0" do
63
- ParallelTests.should_receive(:open).with{|x,y|x=~/TEST_ENV_NUMBER= /}.and_return mocked_process
64
- ParallelTests.run_tests(['xxx'],0,{})
65
- end
66
-
67
- it "uses TEST_ENV_NUMBER=2 when called for process 1" do
68
- ParallelTests.should_receive(:open).with{|x,y| x=~/TEST_ENV_NUMBER=2/}.and_return mocked_process
69
- ParallelTests.run_tests(['xxx'],1,{})
70
- end
71
-
72
- it "uses options" do
73
- ParallelTests.should_receive(:open).with{|x,y| x=~ %r{ruby -Itest .* -- -v}}.and_return mocked_process
74
- ParallelTests.run_tests(['xxx'],1,:test_options => '-v')
75
- end
76
-
77
- it "returns the output" do
78
- io = open('spec/spec_helper.rb')
79
- $stdout.stub!(:print)
80
- ParallelTests.should_receive(:open).and_return io
81
- ParallelTests.run_tests(['xxx'],1,{})[:stdout].should =~ /\$LOAD_PATH << File/
82
- end
83
- end
84
-
85
- describe :test_in_groups do
86
- it "does not sort when passed false do_sort option" do
87
- ParallelTests.should_not_receive(:smallest_first)
88
- ParallelTests.tests_in_groups [], 1, :no_sort => true
89
- end
90
-
91
- it "does sort when not passed do_sort option" do
92
- ParallelTests.stub!(:tests_with_runtime).and_return([])
93
- ParallelTests::Grouper.should_receive(:largest_first).and_return([])
94
- ParallelTests.tests_in_groups [], 1
95
- end
96
-
97
- it "groups by single_process pattern and then via size" do
98
- ParallelTests.should_receive(:with_runtime_info).and_return([['aaa',5],['aaa2',5],['bbb',2],['ccc',1],['ddd',1]])
99
- result = ParallelTests.tests_in_groups [], 3, :single_process => [/^a.a/]
100
- result.should == [["aaa", "aaa2"], ["bbb"], ["ccc", "ddd"]]
101
- end
102
- end
103
-
104
- describe :find_results do
105
- it "finds multiple results in test output" do
106
- output = <<EOF
107
- Loaded suite /opt/ruby-enterprise/lib/ruby/gems/1.8/gems/rake-0.8.4/lib/rake/rake_test_loader
108
- Started
109
- ..............
110
- Finished in 0.145069 seconds.
111
-
112
- 10 tests, 20 assertions, 0 failures, 0 errors
113
- Loaded suite /opt/ruby-enterprise/lib/ruby/gems/1.8/gems/rake-0.8.4/lib/rake/rake_test_loader
114
- Started
115
- ..............
116
- Finished in 0.145069 seconds.
117
-
118
- 14 tests, 20 assertions, 0 failures, 0 errors
119
-
120
- EOF
121
-
122
- ParallelTests.find_results(output).should == ['10 tests, 20 assertions, 0 failures, 0 errors','14 tests, 20 assertions, 0 failures, 0 errors']
123
- end
124
-
125
- it "is robust against scrambled output" do
126
- output = <<EOF
127
- Loaded suite /opt/ruby-enterprise/lib/ruby/gems/1.8/gems/rake-0.8.4/lib/rake/rake_test_loader
128
- Started
129
- ..............
130
- Finished in 0.145069 seconds.
131
-
132
- 10 tests, 20 assertions, 0 failures, 0 errors
133
- Loaded suite /opt/ruby-enterprise/lib/ruby/gems/1.8/gems/rake-0.8.4/lib/rake/rake_test_loader
134
- Started
135
- ..............
136
- Finished in 0.145069 seconds.
137
-
138
- 14 te.dsts, 20 assertions, 0 failures, 0 errors
139
- EOF
140
-
141
- ParallelTests.find_results(output).should == ['10 tests, 20 assertions, 0 failures, 0 errors','14 tedsts, 20 assertions, 0 failures, 0 errors']
142
- end
143
- end
144
-
145
59
  describe :bundler_enabled? do
146
60
  before do
147
61
  Object.stub!(:const_defined?).with(:Bundler).and_return false
@@ -175,77 +89,7 @@ EOF
175
89
  end
176
90
  end
177
91
 
178
- describe :find_tests do
179
- it "returns if root is an array" do
180
- ParallelTests.send(:find_tests, [1]).should == [1]
181
- end
182
-
183
- it "finds all test files" do
184
- begin
185
- root = "/tmp/test-find_tests-#{rand(999)}"
186
- `mkdir #{root}`
187
- `mkdir #{root}/a`
188
- `mkdir #{root}/b`
189
- `touch #{root}/x_test.rb`
190
- `touch #{root}/a/x_test.rb`
191
- `touch #{root}/a/test.rb`
192
- `touch #{root}/b/y_test.rb`
193
- `touch #{root}/b/test.rb`
194
- `ln -s #{root}/b #{root}/c`
195
- `ln -s #{root}/b #{root}/a/`
196
- ParallelTests.send(:find_tests, root).sort.should == [
197
- "#{root}/a/b/y_test.rb",
198
- "#{root}/a/x_test.rb",
199
- "#{root}/b/y_test.rb",
200
- "#{root}/c/y_test.rb",
201
- "#{root}/x_test.rb"
202
- ]
203
- ensure
204
- `rm -rf #{root}`
205
- end
206
- end
207
-
208
- it "finds files by pattern" do
209
- begin
210
- root = "/tmp/test-find_tests-#{rand(999)}"
211
- `mkdir #{root}`
212
- `mkdir #{root}/a`
213
- `touch #{root}/a/x_test.rb`
214
- `touch #{root}/a/y_test.rb`
215
- `touch #{root}/a/z_test.rb`
216
- ParallelTests.send(:find_tests, root, :pattern => '^a/(y|z)_test').sort.should == [
217
- "#{root}/a/y_test.rb",
218
- "#{root}/a/z_test.rb",
219
- ]
220
- ensure
221
- `rm -rf #{root}`
222
- end
223
- end
224
- end
225
-
226
- describe :summarize_results do
227
- it "adds results" do
228
- ParallelTests.summarize_results(['1 foo 3 bar','2 foo 5 bar']).should == '8 bars, 3 foos'
229
- end
230
-
231
- it "adds results with braces" do
232
- ParallelTests.summarize_results(['1 foo(s) 3 bar(s)','2 foo 5 bar']).should == '8 bars, 3 foos'
233
- end
234
-
235
- it "adds same results with plurals" do
236
- ParallelTests.summarize_results(['1 foo 3 bar','2 foos 5 bar']).should == '8 bars, 3 foos'
237
- end
238
-
239
- it "adds non-similar results" do
240
- ParallelTests.summarize_results(['1 xxx 2 yyy','1 xxx 2 zzz']).should == '2 xxxs, 2 yyys, 2 zzzs'
241
- end
242
-
243
- it "does not pluralize 1" do
244
- ParallelTests.summarize_results(['1 xxx 2 yyy']).should == '1 xxx, 2 yyys'
245
- end
246
- end
247
-
248
92
  it "has a version" do
249
- ParallelTests::VERSION.should =~ /^\d+\.\d+\.\d+$/
93
+ ParallelTests::VERSION.should =~ /^\d+\.\d+\.\d+/
250
94
  end
251
95
  end
@@ -1,15 +1,17 @@
1
- # ---- requirements
2
1
  $LOAD_PATH << File.expand_path("../lib", File.dirname(__FILE__))
3
- require 'rubygems'
4
2
 
5
3
  FAKE_RAILS_ROOT = '/tmp/pspecs/fixtures'
6
4
 
7
5
  require 'tempfile'
8
- require 'parallel_specs'
9
- require 'parallel_specs/spec_runtime_logger'
10
- require 'parallel_specs/spec_summary_logger'
11
- require 'parallel_cucumber'
12
- require 'parallel_tests/runtime_logger'
6
+ require 'parallel_tests'
7
+ require 'parallel_tests/test/runner'
8
+ require 'parallel_tests/test/runtime_logger'
9
+
10
+ require 'parallel_tests/spec/runner'
11
+ require 'parallel_tests/spec/runtime_logger'
12
+ require 'parallel_tests/spec/summary_logger'
13
+
14
+ require 'parallel_tests/cucumber/runner'
13
15
 
14
16
  OutputLogger = Struct.new(:output) do
15
17
  attr_reader :flock, :flush
metadata CHANGED
@@ -1,19 +1,19 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: parallel_tests
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.20
5
- prerelease:
4
+ version: 0.7.0.alpha
5
+ prerelease: 6
6
6
  platform: ruby
7
7
  authors:
8
8
  - Michael Grosser
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-02-24 00:00:00.000000000 Z
12
+ date: 2012-02-25 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: parallel
16
- requirement: &12086720 !ruby/object:Gem::Requirement
16
+ requirement: &16612760 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,9 +21,9 @@ dependencies:
21
21
  version: '0'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *12086720
24
+ version_requirements: *16612760
25
25
  description:
26
- email: grosser.michael@gmail.com
26
+ email: michael@grosser.it
27
27
  executables:
28
28
  - parallel_cucumber
29
29
  - parallel_spec
@@ -31,39 +31,43 @@ executables:
31
31
  extensions: []
32
32
  extra_rdoc_files: []
33
33
  files:
34
+ - .gitignore
34
35
  - Gemfile
35
36
  - Gemfile.lock
36
37
  - Rakefile
37
38
  - Readme.md
38
- - VERSION
39
39
  - bin/parallel_cucumber
40
40
  - bin/parallel_spec
41
41
  - bin/parallel_test
42
- - lib/parallel_cucumber.rb
43
- - lib/parallel_cucumber/runtime_logger.rb
44
- - lib/parallel_specs.rb
45
- - lib/parallel_specs/spec_failures_logger.rb
46
- - lib/parallel_specs/spec_logger_base.rb
47
- - lib/parallel_specs/spec_runtime_logger.rb
48
- - lib/parallel_specs/spec_summary_logger.rb
49
42
  - lib/parallel_tests.rb
43
+ - lib/parallel_tests/cli.rb
44
+ - lib/parallel_tests/cucumber/runner.rb
45
+ - lib/parallel_tests/cucumber/runtime_logger.rb
50
46
  - lib/parallel_tests/grouper.rb
51
47
  - lib/parallel_tests/railtie.rb
52
- - lib/parallel_tests/runtime_logger.rb
48
+ - lib/parallel_tests/spec/failures_logger.rb
49
+ - lib/parallel_tests/spec/logger_base.rb
50
+ - lib/parallel_tests/spec/runner.rb
51
+ - lib/parallel_tests/spec/runtime_logger.rb
52
+ - lib/parallel_tests/spec/summary_logger.rb
53
53
  - lib/parallel_tests/tasks.rb
54
- - lib/tasks/parallel_tests.rake
54
+ - lib/parallel_tests/test/runner.rb
55
+ - lib/parallel_tests/test/runtime_logger.rb
56
+ - lib/parallel_tests/version.rb
55
57
  - parallel_tests.gemspec
56
58
  - spec/integration_spec.rb
57
- - spec/parallel_cucumber_spec.rb
58
- - spec/parallel_specs/spec_failure_logger_spec.rb
59
- - spec/parallel_specs/spec_runtime_logger_spec.rb
60
- - spec/parallel_specs/spec_summary_logger_spec.rb
61
- - spec/parallel_specs_spec.rb
62
- - spec/parallel_tests/runtime_logger_spec.rb
59
+ - spec/parallel_tests/cucumber/runner_spec.rb
60
+ - spec/parallel_tests/spec/failure_logger_spec.rb
61
+ - spec/parallel_tests/spec/runner_spec.rb
62
+ - spec/parallel_tests/spec/runtime_logger_spec.rb
63
+ - spec/parallel_tests/spec/summary_logger_spec.rb
64
+ - spec/parallel_tests/test/runner_spec.rb
65
+ - spec/parallel_tests/test/runtime_logger_spec.rb
63
66
  - spec/parallel_tests_spec.rb
64
67
  - spec/spec_helper.rb
65
68
  homepage: http://github.com/grosser/parallel_tests
66
- licenses: []
69
+ licenses:
70
+ - MIT
67
71
  post_install_message:
68
72
  rdoc_options: []
69
73
  require_paths:
@@ -76,13 +80,13 @@ required_ruby_version: !ruby/object:Gem::Requirement
76
80
  version: '0'
77
81
  segments:
78
82
  - 0
79
- hash: -3131334744826676279
83
+ hash: -20791927037817869
80
84
  required_rubygems_version: !ruby/object:Gem::Requirement
81
85
  none: false
82
86
  requirements:
83
- - - ! '>='
87
+ - - ! '>'
84
88
  - !ruby/object:Gem::Version
85
- version: '0'
89
+ version: 1.3.1
86
90
  requirements: []
87
91
  rubyforge_project:
88
92
  rubygems_version: 1.8.15
data/VERSION DELETED
@@ -1 +0,0 @@
1
- 0.6.20
@@ -1,36 +0,0 @@
1
- require 'parallel_tests'
2
-
3
- class ParallelCucumber < ParallelTests
4
- def self.run_tests(test_files, process_number, options)
5
- color = ($stdout.tty? ? 'AUTOTEST=1 ; export AUTOTEST ;' : '')#display color when we are in a terminal
6
- runtime_logging = " --format ParallelCucumber::RuntimeLogger --out #{runtime_log}"
7
- cmd = "#{color} #{executable}"
8
- cmd << runtime_logging if File.directory?(File.dirname(runtime_log))
9
- cmd << " #{options[:test_options]} #{test_files*' '}"
10
- execute_command(cmd, process_number, options)
11
- end
12
-
13
- def self.executable
14
- if bundler_enabled?
15
- "bundle exec cucumber"
16
- elsif File.file?("script/cucumber")
17
- "script/cucumber"
18
- else
19
- "cucumber"
20
- end
21
- end
22
-
23
- def self.runtime_log
24
- 'tmp/parallel_runtime_cucumber.log'
25
- end
26
-
27
- protected
28
-
29
- def self.test_suffix
30
- ".feature"
31
- end
32
-
33
- def self.line_is_result?(line)
34
- line =~ /^\d+ (steps|scenarios)/
35
- end
36
- end
@@ -1,57 +0,0 @@
1
- class ParallelCucumber
2
- class RuntimeLogger
3
-
4
- def initialize(step_mother, path_or_io, options=nil)
5
- @io = prepare_io(path_or_io)
6
- @example_times = Hash.new(0)
7
- end
8
-
9
- def before_feature(_)
10
- @start_at = Time.now.to_f
11
- end
12
-
13
- def after_feature(feature)
14
- @example_times[feature.file] += Time.now.to_f - @start_at
15
- end
16
-
17
- def after_features(*args)
18
- lock_output do
19
- @io.puts @example_times.map { |file, time| "#{file}:#{time}" }
20
- end
21
- end
22
-
23
- private
24
-
25
- def prepare_io(path_or_io)
26
- if path_or_io.respond_to?(:write)
27
- path_or_io
28
- else # its a path
29
- File.open(path_or_io, 'w').close # clean out the file
30
- file = File.open(path_or_io, 'a')
31
-
32
- at_exit do
33
- unless file.closed?
34
- file.flush
35
- file.close
36
- end
37
- end
38
-
39
- file
40
- end
41
- end
42
-
43
- # do not let multiple processes get in each others way
44
- def lock_output
45
- if File === @io
46
- begin
47
- @io.flock File::LOCK_EX
48
- yield
49
- ensure
50
- @io.flock File::LOCK_UN
51
- end
52
- else
53
- yield
54
- end
55
- end
56
- end
57
- end