parallel_split_test 0.1.5 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- parallel_split_test (0.1.5)
4
+ parallel_split_test (0.2.0)
5
5
  parallel (>= 0.5.13)
6
6
  rspec (>= 2)
7
7
 
data/Readme.md CHANGED
@@ -38,7 +38,9 @@ To use 1 database per test-process, add this to your `config/database.yml`<br/>
38
38
  Output
39
39
  ======
40
40
 
41
- time ./bin/parallel_split_test spec/xx_spec.rb
41
+ parallel_split_test spec/xx_spec.rb
42
+
43
+ Running examples in 2 processes
42
44
  .
43
45
 
44
46
  Finished in 5 seconds
@@ -48,9 +50,10 @@ Output
48
50
  Finished in 1 seconds
49
51
  2 examples, 0 failures
50
52
 
51
- real 0m11.015s
52
- user 0m0.908s
53
- sys 0m0.080s
53
+ Summary:
54
+ 1 example, 0 failures
55
+ 2 examples, 0 failures
56
+ Took 10.06 seconds with 2 processes
54
57
 
55
58
 
56
59
  TIPS
@@ -59,7 +62,6 @@ TIPS
59
62
 
60
63
  TODO
61
64
  ====
62
- - re-print summary of all test results
63
65
  - Cucumber support
64
66
  - Test::Unit support
65
67
 
@@ -23,4 +23,4 @@ if ARGV.empty?
23
23
  end
24
24
 
25
25
  require 'parallel_split_test/runner'
26
- exit ParallelSplitTest::Runner.run(ARGV).max
26
+ exit ParallelSplitTest::Runner.run(ARGV)
@@ -1,4 +1,5 @@
1
1
  require 'parallel_split_test'
2
+ require 'parallel_split_test/output_recorder'
2
3
  require 'parallel'
3
4
  require 'rspec'
4
5
  require 'parallel_split_test/core_ext/rspec_example'
@@ -6,21 +7,29 @@ require 'parallel_split_test/core_ext/rspec_example'
6
7
  module ParallelSplitTest
7
8
  class CommandLine < RSpec::Core::CommandLine
8
9
  def run(err, out)
9
- ParallelSplitTest.choose_number_of_processes
10
-
11
- Parallel.in_processes(ParallelSplitTest.processes) do |process_number|
10
+ results = Parallel.in_processes(ParallelSplitTest.processes) do |process_number|
12
11
  ENV['TEST_ENV_NUMBER'] = (process_number == 0 ? '' : (process_number + 1).to_s)
12
+ out = OutputRecorder.new(out)
13
13
  setup_copied_from_rspec(err, out)
14
14
 
15
15
  ParallelSplitTest.example_counter = 0
16
16
  ParallelSplitTest.process_number = process_number
17
17
 
18
- run_group_of_tests
18
+ [run_group_of_tests, out.recorded]
19
19
  end
20
+
21
+ reprint_result_lines(out, results.map(&:last))
22
+ results.map(&:first).max # combine exit status
20
23
  end
21
24
 
22
25
  private
23
26
 
27
+ def reprint_result_lines(out, printed_outputs)
28
+ out.puts
29
+ out.puts "Summary:"
30
+ out.puts printed_outputs.map{|o| o[/.*\d+ failure.*/] }.join("\n")
31
+ end
32
+
24
33
  def run_group_of_tests
25
34
  example_count = @world.example_count / ParallelSplitTest.processes
26
35
 
@@ -0,0 +1,24 @@
1
+ require 'stringio'
2
+
3
+ module ParallelSplitTest
4
+ class OutputRecorder
5
+ def initialize(out)
6
+ @recorded = StringIO.new
7
+ @out = out
8
+ end
9
+
10
+ %w[puts write print putc].each do |method|
11
+ class_eval <<-RUBY, __FILE__, __LINE__
12
+ def #{method}(*args)
13
+ @recorded.puts(*args)
14
+ @out.puts(*args)
15
+ end
16
+ RUBY
17
+ end
18
+
19
+ def recorded
20
+ @recorded.rewind
21
+ @recorded.read
22
+ end
23
+ end
24
+ end
@@ -7,9 +7,23 @@ module ParallelSplitTest
7
7
  trap_interrupt
8
8
  options = RSpec::Core::ConfigurationOptions.new(args)
9
9
  options.parse_options
10
- ParallelSplitTest::CommandLine.new(options).run(err, out)
10
+
11
+ ParallelSplitTest.choose_number_of_processes
12
+ out.puts "Running examples in #{ParallelSplitTest.processes} processes"
13
+
14
+ report_execution_time(out) do
15
+ ParallelSplitTest::CommandLine.new(options).run(err, out)
16
+ end
11
17
  ensure
12
18
  RSpec.reset
13
19
  end
20
+
21
+ def self.report_execution_time(out)
22
+ start = Time.now.to_f
23
+ result = yield
24
+ runtime = Time.now.to_f - start
25
+ out.puts "Took %.2f seconds with #{ParallelSplitTest.processes} processes" % runtime
26
+ result
27
+ end
14
28
  end
15
29
  end
@@ -1,3 +1,3 @@
1
1
  module ParallelSplitTest
2
- VERSION = '0.1.5'
2
+ VERSION = '0.2.0'
3
3
  end
@@ -0,0 +1,26 @@
1
+ require "spec_helper"
2
+
3
+ describe ParallelSplitTest::OutputRecorder do
4
+ ['write', 'puts', 'print'].each do |method|
5
+ it "records #{method}" do
6
+ out = StringIO.new("")
7
+ recorder = ParallelSplitTest::OutputRecorder.new(out)
8
+ recorder.send(method, "XXX")
9
+
10
+ # output got recorded
11
+ recorder.recorded.strip.should == "XXX"
12
+ out.read.should == ""
13
+
14
+ # output was written to original
15
+ out.rewind
16
+ out.read.strip.should == "XXX"
17
+ end
18
+ end
19
+
20
+ it "can puts without arguments" do
21
+ out = StringIO.new("")
22
+ recorder = ParallelSplitTest::OutputRecorder.new(out)
23
+ recorder.puts
24
+ recorder.recorded.should == "\n"
25
+ end
26
+ end
@@ -104,7 +104,7 @@ describe ParallelSplitTest do
104
104
  end
105
105
  RUBY
106
106
  result = parallel_split_test "xxx_spec.rb"
107
- result.scan('1 example, 0 failures').size.should == 2
107
+ result.scan('1 example, 0 failures').size.should == 4
108
108
  result.scan(/it-ran-.-in-.?-/).sort.should == ["it-ran-a-in--", "it-ran-b-in-2-"]
109
109
  end
110
110
 
@@ -134,7 +134,7 @@ describe ParallelSplitTest do
134
134
 
135
135
  result = nil
136
136
  time{ result = parallel_split_test "xxx_spec.rb" }.should < 2
137
- result.scan('1 example, 0 failures').size.should == 2
137
+ result.scan('1 example, 0 failures').size.should == 4
138
138
  end
139
139
 
140
140
  it "sets up TEST_ENV_NUMBER before loading the test files, so db connections are set up correctly" do
@@ -167,7 +167,7 @@ describe ParallelSplitTest do
167
167
 
168
168
  # test works because if :fail => true does not fail it raises
169
169
  result = parallel_split_test "xxx_spec.rb", :fail => true
170
- result.scan('1 example, 1 failure').size.should == 2
170
+ result.scan('1 example, 1 failure').size.should == 4
171
171
  end
172
172
 
173
173
  it "passes when no tests where run" do
@@ -178,6 +178,35 @@ describe ParallelSplitTest do
178
178
  result = parallel_split_test "xxx_spec.rb"
179
179
  result.should include('No examples found')
180
180
  end
181
+
182
+ it "prints a summary before running" do
183
+ write "xxx_spec.rb", <<-RUBY
184
+ describe "X" do
185
+ end
186
+ RUBY
187
+ result = parallel_split_test "xxx_spec.rb"
188
+ result.should include('Running examples in 2 processes')
189
+ end
190
+
191
+ it "prints a runtime summary at the end" do
192
+ write "xxx_spec.rb", <<-RUBY
193
+ describe "X" do
194
+ end
195
+ RUBY
196
+ result = parallel_split_test "xxx_spec.rb"
197
+ result.should =~ /Took [\d\.]+ seconds with 2 processes/
198
+ end
199
+
200
+ it "reprints all summary lines at the end" do
201
+ write "xxx_spec.rb", <<-RUBY
202
+ describe "X" do
203
+ it { }
204
+ it { sleep 0.1 }
205
+ end
206
+ RUBY
207
+ result = parallel_split_test "xxx_spec.rb"
208
+ result.should include("1 example, 0 failures\n1 example, 0 failures")
209
+ end
181
210
  end
182
211
  end
183
212
  end
@@ -1,3 +1,4 @@
1
1
  $LOAD_PATH.unshift 'lib'
2
2
  require 'parallel_split_test'
3
- require 'parallel_split_test/version'
3
+ require 'parallel_split_test/version'
4
+ require 'parallel_split_test/output_recorder'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: parallel_split_test
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.5
4
+ version: 0.2.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-02-03 00:00:00.000000000 Z
12
+ date: 2012-02-04 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rspec
16
- requirement: &85485570 !ruby/object:Gem::Requirement
16
+ requirement: &81205430 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '2'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *85485570
24
+ version_requirements: *81205430
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: parallel
27
- requirement: &85485320 !ruby/object:Gem::Requirement
27
+ requirement: &81205180 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,7 +32,7 @@ dependencies:
32
32
  version: 0.5.13
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *85485320
35
+ version_requirements: *81205180
36
36
  description:
37
37
  email: michael@grosser.it
38
38
  executables:
@@ -49,9 +49,11 @@ files:
49
49
  - lib/parallel_split_test.rb
50
50
  - lib/parallel_split_test/command_line.rb
51
51
  - lib/parallel_split_test/core_ext/rspec_example.rb
52
+ - lib/parallel_split_test/output_recorder.rb
52
53
  - lib/parallel_split_test/runner.rb
53
54
  - lib/parallel_split_test/version.rb
54
55
  - parallel_split_test.gemspec
56
+ - spec/parallel_split_test/output_recorder_spec.rb
55
57
  - spec/parallel_split_test_spec.rb
56
58
  - spec/spec_helper.rb
57
59
  homepage: http://github.com/grosser/parallel_split_test
@@ -69,7 +71,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
69
71
  version: '0'
70
72
  segments:
71
73
  - 0
72
- hash: -731152051
74
+ hash: 131892335
73
75
  required_rubygems_version: !ruby/object:Gem::Requirement
74
76
  none: false
75
77
  requirements:
@@ -78,7 +80,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
78
80
  version: '0'
79
81
  segments:
80
82
  - 0
81
- hash: -731152051
83
+ hash: 131892335
82
84
  requirements: []
83
85
  rubyforge_project:
84
86
  rubygems_version: 1.8.10