parallel_tests 0.8.4 → 0.8.5
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.
- data/Gemfile.lock +1 -1
- data/Readme.md +3 -0
- data/lib/parallel_tests/cucumber/runner.rb +21 -1
- data/lib/parallel_tests/test/runner.rb +8 -3
- data/lib/parallel_tests/version.rb +1 -1
- data/spec/parallel_tests/cucumber/runner_spec.rb +61 -1
- data/spec/parallel_tests/rspec/summary_logger_spec.rb +6 -2
- metadata +4 -4
data/Gemfile.lock
CHANGED
data/Readme.md
CHANGED
@@ -169,6 +169,7 @@ TIPS
|
|
169
169
|
- `export PARALLEL_TEST_PROCESSORS=X` in your environment and parallel_tests will use this number of processors by default
|
170
170
|
- [ZSH] use quotes to use rake arguments `rake "parallel:prepare[3]"`
|
171
171
|
- [email_spec and/or action_mailer_cache_delivery](https://github.com/grosser/parallel_tests/wiki)
|
172
|
+
- [Memcached] use different namespaces e.g. `config.cache_store = ..., :namespace => "test_#{ENV['TEST_ENV_NUMBER']}"`
|
172
173
|
|
173
174
|
TODO
|
174
175
|
====
|
@@ -213,6 +214,8 @@ inspired by [pivotal labs](http://pivotallabs.com/users/miked/blog/articles/849-
|
|
213
214
|
- [Pablo Manrubia Díez](https://github.com/pmanrubia)
|
214
215
|
- [Slawomir Smiechura](https://github.com/ssmiech)
|
215
216
|
- [Georg Friedrich](https://github.com/georg)
|
217
|
+
- [R. Tyler Croy](https://github.com/rtyler)
|
218
|
+
- [Ulrich Berkmüller](https://github.com/ulrich-berkmueller)
|
216
219
|
|
217
220
|
[Michael Grosser](http://grosser.it)<br/>
|
218
221
|
michael@grosser.it<br/>
|
@@ -39,7 +39,27 @@ module ParallelTests
|
|
39
39
|
end
|
40
40
|
|
41
41
|
def self.line_is_result?(line)
|
42
|
-
line =~ /^\d+ (steps
|
42
|
+
line =~ /^\d+ (steps?|scenarios?)/
|
43
|
+
end
|
44
|
+
|
45
|
+
# cucumber has 2 result lines per test run, that cannot be added
|
46
|
+
# 1 scenario (1 failed)
|
47
|
+
# 1 step (1 failed)
|
48
|
+
def self.summarize_results(results)
|
49
|
+
sort_order = %w[scenario step failed undefined skipped pending passed]
|
50
|
+
|
51
|
+
%w[scenario step].map do |group|
|
52
|
+
group_results = results.grep /^\d+ #{group}/
|
53
|
+
next if group_results.empty?
|
54
|
+
|
55
|
+
sums = sum_up_results(group_results)
|
56
|
+
sums = sums.sort_by { |word, _| sort_order.index(word) || 999 }
|
57
|
+
sums.map! do |word, number|
|
58
|
+
plural = "s" if word == group and number != 1
|
59
|
+
"#{number} #{word}#{plural}"
|
60
|
+
end
|
61
|
+
"#{sums[0]} (#{sums[1..-1].join(", ")})"
|
62
|
+
end.compact.join("\n")
|
43
63
|
end
|
44
64
|
|
45
65
|
def self.cucumber_opts(given)
|
@@ -60,17 +60,22 @@ module ParallelTests
|
|
60
60
|
end
|
61
61
|
|
62
62
|
def self.summarize_results(results)
|
63
|
+
sums = sum_up_results(results)
|
64
|
+
sums.sort.map{|word, number| "#{number} #{word}#{'s' if number != 1}" }.join(', ')
|
65
|
+
end
|
66
|
+
|
67
|
+
protected
|
68
|
+
|
69
|
+
def self.sum_up_results(results)
|
63
70
|
results = results.join(' ').gsub(/s\b/,'') # combine and singularize results
|
64
71
|
counts = results.scan(/(\d+) (\w+)/)
|
65
72
|
sums = counts.inject(Hash.new(0)) do |sum, (number, word)|
|
66
73
|
sum[word] += number.to_i
|
67
74
|
sum
|
68
75
|
end
|
69
|
-
sums
|
76
|
+
sums
|
70
77
|
end
|
71
78
|
|
72
|
-
protected
|
73
|
-
|
74
79
|
# read output of the process and print in in chucks
|
75
80
|
def self.fetch_output(process, options)
|
76
81
|
all = ''
|
@@ -91,6 +91,33 @@ describe ParallelTests::Cucumber do
|
|
91
91
|
end
|
92
92
|
end
|
93
93
|
|
94
|
+
describe :line_is_result? do
|
95
|
+
it "should match lines with only one scenario" do
|
96
|
+
line = "1 scenario (1 failed)"
|
97
|
+
ParallelTests::Cucumber::Runner.line_is_result?(line).should be_true
|
98
|
+
end
|
99
|
+
|
100
|
+
it "should match lines with multiple scenarios" do
|
101
|
+
line = "2 scenarios (1 failed, 1 passed)"
|
102
|
+
ParallelTests::Cucumber::Runner.line_is_result?(line).should be_true
|
103
|
+
end
|
104
|
+
|
105
|
+
it "should match lines with only one step" do
|
106
|
+
line = "1 step (1 failed)"
|
107
|
+
ParallelTests::Cucumber::Runner.line_is_result?(line).should be_true
|
108
|
+
end
|
109
|
+
|
110
|
+
it "should match lines with multiple steps" do
|
111
|
+
line = "5 steps (1 failed, 4 passed)"
|
112
|
+
ParallelTests::Cucumber::Runner.line_is_result?(line).should be_true
|
113
|
+
end
|
114
|
+
|
115
|
+
it "should not match other lines" do
|
116
|
+
line = ' And I should have "2" emails # features/step_definitions/user_steps.rb:25'
|
117
|
+
ParallelTests::Cucumber::Runner.line_is_result?(line).should be_false
|
118
|
+
end
|
119
|
+
end
|
120
|
+
|
94
121
|
describe :find_results do
|
95
122
|
it "finds multiple results in test output" do
|
96
123
|
output = <<EOF
|
@@ -106,8 +133,41 @@ And I should not see "/en/" # features/ste
|
|
106
133
|
4 scenarios (4 passed)
|
107
134
|
40 steps (40 passed)
|
108
135
|
|
136
|
+
And I should not see "foo" # features/step_definitions/webrat_steps.rb:87
|
137
|
+
|
138
|
+
1 scenario (1 passed)
|
139
|
+
1 step (1 passed)
|
140
|
+
|
109
141
|
EOF
|
110
|
-
ParallelTests::Cucumber::Runner.find_results(output).should == ["7 scenarios (3 failed, 4 passed)", "33 steps (3 failed, 2 skipped, 28 passed)", "4 scenarios (4 passed)", "40 steps (40 passed)"]
|
142
|
+
ParallelTests::Cucumber::Runner.find_results(output).should == ["7 scenarios (3 failed, 4 passed)", "33 steps (3 failed, 2 skipped, 28 passed)", "4 scenarios (4 passed)", "40 steps (40 passed)", "1 scenario (1 passed)", "1 step (1 passed)"]
|
143
|
+
end
|
144
|
+
end
|
145
|
+
|
146
|
+
describe :summarize_results do
|
147
|
+
def call(*args)
|
148
|
+
ParallelTests::Cucumber::Runner.summarize_results(*args)
|
149
|
+
end
|
150
|
+
|
151
|
+
it "sums up results for scenarios and steps separately from each other" do
|
152
|
+
results = ["7 scenarios (3 failed, 4 passed)", "33 steps (3 failed, 2 skipped, 28 passed)", "4 scenarios (4 passed)",
|
153
|
+
"40 steps (40 passed)", "1 scenario (1 passed)", "1 step (1 passed)"]
|
154
|
+
call(results).should == "12 scenarios (3 failed, 9 passed)\n74 steps (3 failed, 2 skipped, 69 passed)"
|
155
|
+
end
|
156
|
+
|
157
|
+
it "adds same results with plurals" do
|
158
|
+
results = ["1 scenario (1 passed)", "2 steps (2 passed)",
|
159
|
+
"2 scenarios (2 passed)", "7 steps (7 passed)"]
|
160
|
+
call(results).should == "3 scenarios (3 passed)\n9 steps (9 passed)"
|
161
|
+
end
|
162
|
+
|
163
|
+
it "adds non-similar results" do
|
164
|
+
results = ["1 scenario (1 passed)", "1 step (1 passed)",
|
165
|
+
"2 scenarios (1 failed, 1 pending)", "2 steps (1 failed, 1 pending)"]
|
166
|
+
call(results).should == "3 scenarios (1 failed, 1 pending, 1 passed)\n3 steps (1 failed, 1 pending, 1 passed)"
|
167
|
+
end
|
168
|
+
|
169
|
+
it "does not pluralize 1" do
|
170
|
+
call(["1 scenario (1 passed)", "1 step (1 passed)"]).should == "1 scenario (1 passed)\n1 step (1 passed)"
|
111
171
|
end
|
112
172
|
end
|
113
173
|
end
|
@@ -4,6 +4,10 @@ describe ParallelTests::RSpec::SummaryLogger do
|
|
4
4
|
let(:output){ OutputLogger.new([]) }
|
5
5
|
let(:logger){ ParallelTests::RSpec::SummaryLogger.new(output) }
|
6
6
|
|
7
|
+
def decolorize(string)
|
8
|
+
string.gsub(/\e\[\d+m/,'')
|
9
|
+
end
|
10
|
+
|
7
11
|
# TODO somehow generate a real example with an exception to test this
|
8
12
|
xit "prints failing examples" do
|
9
13
|
logger.example_failed XXX
|
@@ -20,7 +24,7 @@ describe ParallelTests::RSpec::SummaryLogger do
|
|
20
24
|
logger.dump_failures
|
21
25
|
output.output.should == []
|
22
26
|
logger.dump_summary(1,2,3,4)
|
23
|
-
output.output.should == ["\nFinished in 1 seconds\n", "
|
27
|
+
output.output.map{|o| decolorize(o) }.should == ["\nFinished in 1 seconds\n", "2 examples, 3 failures, 4 pending"]
|
24
28
|
end
|
25
29
|
|
26
30
|
it "does not print anything for pending examples" do
|
@@ -28,6 +32,6 @@ describe ParallelTests::RSpec::SummaryLogger do
|
|
28
32
|
logger.dump_failures
|
29
33
|
output.output.should == []
|
30
34
|
logger.dump_summary(1,2,3,4)
|
31
|
-
output.output.should == ["\nFinished in 1 seconds\n", "
|
35
|
+
output.output.map{|o| decolorize(o) }.should == ["\nFinished in 1 seconds\n", "2 examples, 3 failures, 4 pending"]
|
32
36
|
end
|
33
37
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: parallel_tests
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.8.
|
4
|
+
version: 0.8.5
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-07-
|
12
|
+
date: 2012-07-19 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: parallel
|
@@ -90,7 +90,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
90
90
|
version: '0'
|
91
91
|
segments:
|
92
92
|
- 0
|
93
|
-
hash: -
|
93
|
+
hash: -2098378474977036135
|
94
94
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
95
95
|
none: false
|
96
96
|
requirements:
|
@@ -99,7 +99,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
99
99
|
version: '0'
|
100
100
|
segments:
|
101
101
|
- 0
|
102
|
-
hash: -
|
102
|
+
hash: -2098378474977036135
|
103
103
|
requirements: []
|
104
104
|
rubyforge_project:
|
105
105
|
rubygems_version: 1.8.24
|