Skip to content

Commit f23f5b6

Browse files
committed
Merge #140 'Summary report able to say if total result is ok'
Also update History.md.
2 parents 7215e71 + 022e8dd commit f23f5b6

File tree

5 files changed

+115
-16
lines changed

5 files changed

+115
-16
lines changed

HISTORY.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
### New Features
44

5+
* Make the Summary report able to say if the total result is ok ([#140](https://github.com/cucumber/cucumber-ruby-core/pull/140) @brasmusson)
56
* Replay previous events to new subscribers ([#136](https://github.com/cucumber/cucumber-ruby-core/pull/136) @mattwynne)
67
* Ruby 2.4.0 compatability ([#120](https://github.com/cucumber/cucumber-ruby-core/pull/120) @junaruga)
78
* Implement equality for test cases ([#111](https://github.com/cucumber/cucumber-ruby-core/pull/111) @mattwynne)

lib/cucumber/core/report/summary.rb

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,10 @@ def initialize(event_bus)
1111
subscribe_to(event_bus)
1212
end
1313

14+
def ok?(be_strict = false)
15+
test_cases.ok?(be_strict)
16+
end
17+
1418
private
1519

1620
def subscribe_to(event_bus)

lib/cucumber/core/test/result.rb

Lines changed: 44 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,17 @@
1-
# encoding: UTF-8
1+
# encoding: utf-8
22
# frozen_string_literal: true
33

44
module Cucumber
55
module Core
66
module Test
77
module Result
8+
TYPES = [:failed, :skipped, :undefined, :pending, :passed, :unknown].freeze
9+
10+
def self.ok?(type, be_strict = false)
11+
private
12+
class_name = type.to_s.slice(0, 1).capitalize + type.to_s.slice(1..-1)
13+
const_get(class_name).ok?(be_strict)
14+
end
815

916
# Defines to_sym on a result class for the given result type
1017
#
@@ -16,7 +23,7 @@ def self.query_methods(result_type)
1623
result_type
1724
end
1825

19-
[:passed, :failed, :undefined, :unknown, :skipped, :pending].each do |possible_result_type|
26+
TYPES.each do |possible_result_type|
2027
define_method("#{possible_result_type}?") do
2128
possible_result_type == to_sym
2229
end
@@ -41,6 +48,10 @@ class Passed
4148
include Result.query_methods :passed
4249
attr_accessor :duration
4350

51+
def self.ok?(be_strict = false)
52+
true
53+
end
54+
4455
def initialize(duration)
4556
raise ArgumentError unless duration
4657
@duration = duration
@@ -57,7 +68,7 @@ def to_s
5768
end
5869

5970
def ok?(be_strict = false)
60-
true
71+
self.class.ok?(be_strict)
6172
end
6273

6374
def with_appended_backtrace(step)
@@ -73,6 +84,10 @@ class Failed
7384
include Result.query_methods :failed
7485
attr_reader :duration, :exception
7586

87+
def self.ok?(be_strict = false)
88+
false
89+
end
90+
7691
def initialize(duration, exception)
7792
raise ArgumentError unless duration
7893
raise ArgumentError unless exception
@@ -92,7 +107,7 @@ def to_s
92107
end
93108

94109
def ok?(be_strict = false)
95-
false
110+
self.class.ok?(be_strict)
96111
end
97112

98113
def with_duration(new_duration)
@@ -139,11 +154,19 @@ def with_filtered_backtrace(filter)
139154
return self unless backtrace
140155
filter.new(dup).exception
141156
end
157+
158+
def ok?(be_strict = false)
159+
self.class.ok?(be_strict)
160+
end
142161
end
143162

144163
class Undefined < Raisable
145164
include Result.query_methods :undefined
146165

166+
def self.ok?(be_strict = false)
167+
!be_strict
168+
end
169+
147170
def describe_to(visitor, *args)
148171
visitor.undefined(*args)
149172
visitor.duration(duration, *args)
@@ -153,15 +176,15 @@ def describe_to(visitor, *args)
153176
def to_s
154177
"?"
155178
end
156-
157-
def ok?(be_strict = false)
158-
!be_strict
159-
end
160179
end
161180

162181
class Skipped < Raisable
163182
include Result.query_methods :skipped
164183

184+
def self.ok?(be_strict = false)
185+
true
186+
end
187+
165188
def describe_to(visitor, *args)
166189
visitor.skipped(*args)
167190
visitor.duration(duration, *args)
@@ -171,15 +194,15 @@ def describe_to(visitor, *args)
171194
def to_s
172195
"-"
173196
end
174-
175-
def ok?(be_strict = false)
176-
true
177-
end
178197
end
179198

180199
class Pending < Raisable
181200
include Result.query_methods :pending
182201

202+
def self.ok?(be_strict = false)
203+
!be_strict
204+
end
205+
183206
def describe_to(visitor, *args)
184207
visitor.pending(self, *args)
185208
visitor.duration(duration, *args)
@@ -189,10 +212,6 @@ def describe_to(visitor, *args)
189212
def to_s
190213
"P"
191214
end
192-
193-
def ok?(be_strict = false)
194-
!be_strict
195-
end
196215
end
197216

198217
#
@@ -222,6 +241,15 @@ def method_missing(name, *args)
222241
end
223242
end
224243

244+
def ok?(be_strict = false)
245+
TYPES.each do |type|
246+
if get_total(type) > 0
247+
return false unless Result.ok?(type, be_strict)
248+
end
249+
end
250+
true
251+
end
252+
225253
def exception(exception)
226254
@exceptions << exception
227255
self

spec/cucumber/core/report/summary_spec.rb

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -123,5 +123,41 @@ module Cucumber::Core::Report
123123
end
124124
end
125125
end
126+
127+
context "ok? result" do
128+
let(:test_case) { double }
129+
130+
it "passed test case is ok" do
131+
event_bus.send(:test_case_finished, test_case, passed_result)
132+
133+
expect( @summary.ok? ).to eq true
134+
end
135+
136+
it "skipped test case is ok" do
137+
event_bus.send(:test_case_finished, test_case, skipped_result)
138+
139+
expect( @summary.ok? ).to eq true
140+
end
141+
142+
it "failed test case is not ok" do
143+
event_bus.send(:test_case_finished, test_case, failed_result)
144+
145+
expect( @summary.ok? ).to eq false
146+
end
147+
148+
it "pending test case is ok if not strict" do
149+
event_bus.send(:test_case_finished, test_case, pending_result)
150+
151+
expect( @summary.ok? ).to eq true
152+
expect( @summary.ok?(true) ).to eq false
153+
end
154+
155+
it "undefined test case is ok if not strict" do
156+
event_bus.send(:test_case_finished, test_case, undefined_result)
157+
158+
expect( @summary.ok? ).to eq true
159+
expect( @summary.ok?(true) ).to eq false
160+
end
161+
end
126162
end
127163
end

spec/cucumber/core/test/result_spec.rb

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -253,6 +253,7 @@ module Cucumber::Core::Test
253253
let(:passed) { Result::Passed.new(Result::Duration.new(11)) }
254254
let(:skipped) { Result::Skipped.new }
255255
let(:unknown) { Result::Unknown.new }
256+
let(:pending) { Result::Pending.new }
256257
let(:undefined) { Result::Undefined.new }
257258
let(:exception) { StandardError.new }
258259

@@ -328,6 +329,35 @@ def describe_to(visitor, *args)
328329
[passed, failed].each { |r| r.describe_to summary }
329330
expect( summary.exceptions ).to eq [exception]
330331
end
332+
333+
context "ok? result" do
334+
it "passed result is ok" do
335+
passed.describe_to summary
336+
expect( summary.ok? ).to be true
337+
end
338+
339+
it "skipped result is ok" do
340+
skipped.describe_to summary
341+
expect( summary.ok? ).to be true
342+
end
343+
344+
it "failed result is not ok" do
345+
failed.describe_to summary
346+
expect( summary.ok? ).to be false
347+
end
348+
349+
it "pending result is ok if not strict" do
350+
pending.describe_to summary
351+
expect( summary.ok? ).to be true
352+
expect( summary.ok?(true) ).to be false
353+
end
354+
355+
it "undefined result is ok if not strict" do
356+
undefined.describe_to summary
357+
expect( summary.ok? ).to be true
358+
expect( summary.ok?(true) ).to be false
359+
end
360+
end
331361
end
332362

333363
describe Result::Duration do

0 commit comments

Comments
 (0)