cucumber-core 1.0.0.beta.2 → 1.0.0.beta.3

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.
@@ -1,58 +1,66 @@
1
- require 'cucumber/core/test/mapping'
1
+ require 'cucumber/core/test/action'
2
2
 
3
3
  module Cucumber
4
4
  module Core
5
5
  module Test
6
6
 
7
- describe Mapping do
7
+ describe Action do
8
+ let(:last_result) { double('last_result') }
8
9
 
9
10
  context "constructed without a block" do
10
11
  it "raises an error" do
11
- expect { Mapping.new }.to raise_error(ArgumentError)
12
+ expect { Action.new }.to raise_error(ArgumentError)
12
13
  end
13
14
  end
14
15
 
15
16
  context "executing" do
16
17
  it "executes the block passed to the constructor" do
17
18
  executed = false
18
- mapping = Mapping.new { executed = true }
19
- mapping.execute
19
+ mapping = Action.new { executed = true }
20
+ mapping.execute(last_result)
20
21
  expect( executed ).to be_truthy
21
22
  end
22
23
 
23
24
  it "returns a passed result if the block doesn't fail" do
24
- mapping = Mapping.new {}
25
- expect( mapping.execute ).to be_passed
25
+ mapping = Action.new {}
26
+ expect( mapping.execute(last_result) ).to be_passed
26
27
  end
27
28
 
28
29
  it "returns a failed result when the block raises an error" do
29
30
  exception = StandardError.new
30
- mapping = Mapping.new { raise exception }
31
- result = mapping.execute
31
+ mapping = Action.new { raise exception }
32
+ result = mapping.execute(last_result)
32
33
  expect( result ).to be_failed
33
34
  expect( result.exception ).to eq exception
34
35
  end
35
36
 
37
+ it "yields the last_result to the block" do
38
+ last_result_spy = nil
39
+ mapping = Action.new { |last_result| last_result_spy = last_result }
40
+ mapping.execute(last_result)
41
+ expect(last_result_spy).to eq last_result
42
+ end
43
+
36
44
  it "returns a pending result if a Result::Pending error is raised" do
37
45
  exception = Result::Pending.new("TODO")
38
- mapping = Mapping.new { raise exception }
39
- result = mapping.execute
46
+ mapping = Action.new { raise exception }
47
+ result = mapping.execute(last_result)
40
48
  expect( result ).to be_pending
41
49
  expect( result.message ).to eq "TODO"
42
50
  end
43
51
 
44
52
  it "returns a skipped result if a Result::Skipped error is raised" do
45
53
  exception = Result::Skipped.new("Not working right now")
46
- mapping = Mapping.new { raise exception }
47
- result = mapping.execute
54
+ mapping = Action.new { raise exception }
55
+ result = mapping.execute(last_result)
48
56
  expect( result ).to be_skipped
49
57
  expect( result.message ).to eq "Not working right now"
50
58
  end
51
59
 
52
60
  it "returns an undefined result if a Result::Undefined error is raised" do
53
61
  exception = Result::Undefined.new("new step")
54
- mapping = Mapping.new { raise exception }
55
- result = mapping.execute
62
+ mapping = Action.new { raise exception }
63
+ result = mapping.execute(last_result)
56
64
  expect( result ).to be_undefined
57
65
  expect( result.message ).to eq "new step"
58
66
  end
@@ -66,14 +74,14 @@ module Cucumber
66
74
  end
67
75
 
68
76
  it "records the nanoseconds duration of the execution on the result" do
69
- mapping = Mapping.new { }
70
- duration = mapping.execute.duration
77
+ mapping = Action.new { }
78
+ duration = mapping.execute(last_result).duration
71
79
  expect( duration ).to eq 1
72
80
  end
73
81
 
74
82
  it "records the duration of a failed execution" do
75
- mapping = Mapping.new { raise StandardError }
76
- duration = mapping.execute.duration
83
+ mapping = Action.new { raise StandardError }
84
+ duration = mapping.execute(last_result).duration
77
85
  expect( duration ).to eq 1
78
86
  end
79
87
  end
@@ -83,31 +91,32 @@ module Cucumber
83
91
  context "skipping" do
84
92
  it "does not execute the block" do
85
93
  executed = false
86
- mapping = Mapping.new { executed = true }
87
- mapping.skip
94
+ mapping = Action.new { executed = true }
95
+ mapping.skip(last_result)
88
96
  expect( executed ).to be_falsey
89
97
  end
90
98
 
91
99
  it "returns a skipped result" do
92
- mapping = Mapping.new {}
93
- expect( mapping.skip ).to be_skipped
100
+ mapping = Action.new {}
101
+ expect( mapping.skip(last_result) ).to be_skipped
94
102
  end
95
103
  end
96
104
  end
97
105
 
98
- describe UndefinedMapping do
99
- let(:mapping) { UndefinedMapping.new }
106
+ describe UndefinedAction do
107
+ let(:mapping) { UndefinedAction.new }
100
108
  let(:test_step) { double }
109
+ let(:last_result) { double('last_result') }
101
110
 
102
111
  context "executing" do
103
112
  it "returns an undefined result" do
104
- expect( mapping.execute ).to be_undefined
113
+ expect( mapping.execute(last_result) ).to be_undefined
105
114
  end
106
115
  end
107
116
 
108
117
  context "skipping" do
109
118
  it "returns an undefined result" do
110
- expect( mapping.skip ).to be_undefined
119
+ expect( mapping.skip(last_result) ).to be_undefined
111
120
  end
112
121
  end
113
122
 
@@ -17,11 +17,12 @@ module Cucumber
17
17
  end
18
18
  end
19
19
 
20
- let(:mapper) { Mapper.new(mappings, receiver) }
21
- let(:receiver) { double('receiver') }
22
- before { allow(receiver).to receive(:test_case).and_yield(receiver) }
23
- let(:mappings) { ExampleMappings.new(app) }
24
- let(:app) { double('app') }
20
+ let(:mapper) { Mapper.new(mappings, receiver) }
21
+ let(:receiver) { double('receiver') }
22
+ before { allow(receiver).to receive(:test_case).and_yield(receiver) }
23
+ let(:mappings) { ExampleMappings.new(app) }
24
+ let(:app) { double('app') }
25
+ let(:last_result) { double('last_result') }
25
26
 
26
27
  context "an unmapped step" do
27
28
  let(:test_step) { Test::Step.new([double(name: 'unmapped')]) }
@@ -30,7 +31,7 @@ module Cucumber
30
31
  it "maps to a step that executes to an undefined result" do
31
32
  expect( receiver ).to receive(:test_step) do |test_step|
32
33
  expect( test_step.name ).to eq 'unmapped'
33
- expect( test_step.execute ).to be_undefined
34
+ expect( test_step.execute(last_result) ).to be_undefined
34
35
  end.once.ordered
35
36
  test_case.describe_to mapper
36
37
  end
@@ -44,7 +45,7 @@ module Cucumber
44
45
  expect( receiver ).to receive(:test_step) do |test_step|
45
46
  expect( test_step.name ).to eq 'mapped'
46
47
  expect( app ).to receive(:do_something)
47
- test_step.execute
48
+ test_step.execute(last_result)
48
49
  end.once.ordered
49
50
  test_case.describe_to mapper
50
51
  end
@@ -68,7 +69,7 @@ module Cucumber
68
69
 
69
70
  context "mapping hooks" do
70
71
  let(:test_case) { Case.new([test_step], source) }
71
- let(:test_step) { Step.new([Ast::Step.new(:language, :location, :keyword, :name, :multiline_arg)]) }
72
+ let(:test_step) { Step.new([Ast::Step.new(:node, :language, :location, :keyword, :name, :multiline_arg)]) }
72
73
  let(:source) { [feature, scenario] }
73
74
  let(:feature) { double('feature') }
74
75
  let(:scenario) { double('scenario', location: 'test') }
@@ -108,7 +109,7 @@ module Cucumber
108
109
 
109
110
  allow(receiver).to receive(:test_case).and_yield(receiver)
110
111
  allow(receiver).to receive(:test_step) do |test_step|
111
- test_step.execute
112
+ test_step.execute(last_result)
112
113
  end
113
114
 
114
115
  test_case.describe_to mapper
@@ -127,7 +128,7 @@ module Cucumber
127
128
  expect( scenario ).to receive(:describe_to)
128
129
  expect( visitor ).to receive(:before_hook) do |hook, hook_args|
129
130
  expect( args ).to eq(hook_args)
130
- expect( hook.location.to_s ).to eq("#{__FILE__}:120")
131
+ expect( hook.location.to_s ).to eq("#{__FILE__}:121")
131
132
  end
132
133
  test_step.describe_source_to(visitor, args)
133
134
  end
@@ -147,7 +148,7 @@ module Cucumber
147
148
  expect( scenario ).to receive(:describe_to)
148
149
  expect( visitor ).to receive(:after_hook) do |hook, hook_args|
149
150
  expect( args ).to eq(hook_args)
150
- expect( hook.location.to_s ).to eq("#{__FILE__}:140")
151
+ expect( hook.location.to_s ).to eq("#{__FILE__}:141")
151
152
  end
152
153
  test_step.describe_source_to(visitor, args)
153
154
  end
@@ -167,7 +168,7 @@ module Cucumber
167
168
  expect( visitor ).to receive(:step).ordered
168
169
  expect( visitor ).to receive(:after_step_hook) do |hook, hook_args|
169
170
  expect( args ).to eq(hook_args)
170
- expect( hook.location.to_s ).to eq("#{__FILE__}:159")
171
+ expect( hook.location.to_s ).to eq("#{__FILE__}:160")
171
172
  end.once.ordered
172
173
  expect( visitor ).to receive(:step).ordered
173
174
  test_case.describe_to mapper
@@ -195,5 +195,19 @@ module Cucumber::Core::Test
195
195
  end
196
196
  end
197
197
 
198
+ context "passing latest result to a mapping" do
199
+ it "passes a Failed result when the scenario is failing" do
200
+ result_spy = nil
201
+ hook_mapping = UnskippableAction.new do |last_result|
202
+ result_spy = last_result
203
+ end
204
+ after_hook = Step.new([double], hook_mapping)
205
+ failing_step = Step.new([double]).with_mapping { fail }
206
+ test_case = Case.new([failing_step, after_hook], source)
207
+ test_case.describe_to runner
208
+ expect(result_spy).to be_failed
209
+ end
210
+ end
211
+
198
212
  end
199
213
  end
@@ -2,6 +2,7 @@ require 'cucumber/core/test/step'
2
2
 
3
3
  module Cucumber::Core::Test
4
4
  describe Step do
5
+ let(:last_result) { double('last_result') }
5
6
 
6
7
  describe "describing itself" do
7
8
  it "describes itself to a visitor" do
@@ -30,7 +31,7 @@ module Cucumber::Core::Test
30
31
  context "when a passing mapping exists" do
31
32
  it "returns a passing result" do
32
33
  test_step = Step.new([ast_step]).with_mapping {}
33
- expect( test_step.execute ).to be_passed
34
+ expect( test_step.execute(last_result) ).to be_passed
34
35
  end
35
36
  end
36
37
 
@@ -39,7 +40,7 @@ module Cucumber::Core::Test
39
40
 
40
41
  it "returns a failing result" do
41
42
  test_step = Step.new([ast_step]).with_mapping { raise exception }
42
- result = test_step.execute
43
+ result = test_step.execute(last_result)
43
44
  expect( result ).to be_failed
44
45
  expect( result.exception ).to eq exception
45
46
  end
@@ -48,7 +49,7 @@ module Cucumber::Core::Test
48
49
  context "with no mapping" do
49
50
  it "returns an Undefined result" do
50
51
  test_step = Step.new([ast_step])
51
- result = test_step.execute
52
+ result = test_step.execute(last_result)
52
53
  expect( result ).to be_undefined
53
54
  end
54
55
  end
@@ -297,17 +297,17 @@ module Cucumber
297
297
 
298
298
  def test_case(test_case, mapper)
299
299
  mapper.before { @logger << ['--'] }
300
- failing_before = -> do
300
+ failing_before = proc do
301
301
  @logger << [:failing_before, test_case.name]
302
302
  raise Failure
303
303
  end
304
- passing_after = -> do
304
+ passing_after = proc do
305
305
  @logger << [:passing_after, test_case.name]
306
306
  end
307
- passing_before = -> do
307
+ passing_before = proc do
308
308
  @logger << [:passing_before, test_case.name]
309
309
  end
310
- failing_after = -> do
310
+ failing_after = proc do
311
311
  @logger << [:failing_after, test_case.name]
312
312
  raise Failure
313
313
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cucumber-core
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0.beta.2
4
+ version: 1.0.0.beta.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Aslak Hellesøy
@@ -12,7 +12,7 @@ authors:
12
12
  autorequire:
13
13
  bindir: bin
14
14
  cert_chain: []
15
- date: 2014-08-29 00:00:00.000000000 Z
15
+ date: 2014-09-14 00:00:00.000000000 Z
16
16
  dependencies:
17
17
  - !ruby/object:Gem::Dependency
18
18
  name: gherkin
@@ -125,7 +125,6 @@ files:
125
125
  - lib/cucumber/core/ast/examples_table.rb
126
126
  - lib/cucumber/core/ast/feature.rb
127
127
  - lib/cucumber/core/ast/location.rb
128
- - lib/cucumber/core/ast/multiline_argument.rb
129
128
  - lib/cucumber/core/ast/names.rb
130
129
  - lib/cucumber/core/ast/outline_step.rb
131
130
  - lib/cucumber/core/ast/scenario.rb
@@ -139,13 +138,12 @@ files:
139
138
  - lib/cucumber/core/gherkin/writer.rb
140
139
  - lib/cucumber/core/gherkin/writer/helpers.rb
141
140
  - lib/cucumber/core/platform.rb
141
+ - lib/cucumber/core/test/action.rb
142
142
  - lib/cucumber/core/test/case.rb
143
143
  - lib/cucumber/core/test/filters.rb
144
- - lib/cucumber/core/test/filters/debug_filter.rb
145
144
  - lib/cucumber/core/test/filters/tag_filter.rb
146
145
  - lib/cucumber/core/test/hooks.rb
147
146
  - lib/cucumber/core/test/mapper.rb
148
- - lib/cucumber/core/test/mapping.rb
149
147
  - lib/cucumber/core/test/result.rb
150
148
  - lib/cucumber/core/test/runner.rb
151
149
  - lib/cucumber/core/test/step.rb
@@ -163,10 +161,10 @@ files:
163
161
  - spec/cucumber/core/compiler_spec.rb
164
162
  - spec/cucumber/core/gherkin/parser_spec.rb
165
163
  - spec/cucumber/core/gherkin/writer_spec.rb
164
+ - spec/cucumber/core/test/action_spec.rb
166
165
  - spec/cucumber/core/test/case_spec.rb
167
166
  - spec/cucumber/core/test/hooks_spec.rb
168
167
  - spec/cucumber/core/test/mapper_spec.rb
169
- - spec/cucumber/core/test/mapping_spec.rb
170
168
  - spec/cucumber/core/test/result_spec.rb
171
169
  - spec/cucumber/core/test/runner_spec.rb
172
170
  - spec/cucumber/core/test/step_spec.rb
@@ -198,7 +196,7 @@ rubyforge_project:
198
196
  rubygems_version: 2.0.14
199
197
  signing_key:
200
198
  specification_version: 4
201
- summary: cucumber-core-1.0.0.beta.2
199
+ summary: cucumber-core-1.0.0.beta.3
202
200
  test_files:
203
201
  - spec/capture_warnings.rb
204
202
  - spec/coverage.rb
@@ -211,10 +209,10 @@ test_files:
211
209
  - spec/cucumber/core/compiler_spec.rb
212
210
  - spec/cucumber/core/gherkin/parser_spec.rb
213
211
  - spec/cucumber/core/gherkin/writer_spec.rb
212
+ - spec/cucumber/core/test/action_spec.rb
214
213
  - spec/cucumber/core/test/case_spec.rb
215
214
  - spec/cucumber/core/test/hooks_spec.rb
216
215
  - spec/cucumber/core/test/mapper_spec.rb
217
- - spec/cucumber/core/test/mapping_spec.rb
218
216
  - spec/cucumber/core/test/result_spec.rb
219
217
  - spec/cucumber/core/test/runner_spec.rb
220
218
  - spec/cucumber/core/test/step_spec.rb
@@ -1,34 +0,0 @@
1
- require 'gherkin/rubify'
2
-
3
- module Cucumber
4
- module Core
5
- module Ast
6
- module MultilineArgument
7
-
8
- class << self
9
- include Gherkin::Rubify
10
-
11
- # TODO: move this up to the front-end
12
- def from(argument, parent_location)
13
- return EmptyMultilineArgument.new unless argument
14
- return argument if argument.respond_to?(:to_step_definition_arg)
15
-
16
- argument = rubify(argument)
17
- case argument
18
- when String
19
- Ast::DocString.new(argument, 'text/plain', parent_location)
20
- when ::Gherkin::Formatter::Model::DocString
21
- Ast::DocString.new(argument.value, argument.content_type, parent_location.on_line(argument.line_range))
22
- when Array
23
- location = parent_location.on_line(argument.first.line..argument.last.line)
24
- Ast::DataTable.new(argument.map{|row| row.cells}, location)
25
- else
26
- raise ArgumentError, "Don't know how to convert #{argument.inspect} into a MultilineArgument"
27
- end
28
- end
29
-
30
- end
31
- end
32
- end
33
- end
34
- end
@@ -1,28 +0,0 @@
1
- module Cucumber
2
- module Core
3
- module Test
4
- class DebugFilter
5
- def initialize(receiver)
6
- @receiver = receiver
7
- end
8
-
9
- def test_case(test_case, &descend)
10
- p [:test_case, test_case.source.last.class, test_case.location.to_s]
11
- descend.call(self)
12
- test_case.describe_to @receiver
13
- self
14
- end
15
-
16
- def test_step(test_step)
17
- p [:test_step, test_step.source.last.class, test_step.location.to_s]
18
- self
19
- end
20
-
21
- def done
22
- @receiver.done
23
- end
24
- end
25
- end
26
- end
27
- end
28
-