cucumber 2.1.0 → 2.2.0

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 (82) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +10 -0
  3. data/Gemfile +3 -1
  4. data/History.md +18 -2
  5. data/README.md +5 -1
  6. data/cucumber.gemspec +3 -4
  7. data/cucumber.yml +2 -2
  8. data/features/docs/api/run_cli_main_with_existing_runtime.feature +4 -7
  9. data/features/docs/defining_steps/skip_scenario.feature +6 -2
  10. data/features/docs/formatters/api_methods.feature +36 -0
  11. data/features/docs/profiles.feature +2 -2
  12. data/features/lib/step_definitions/profile_steps.rb +1 -1
  13. data/lib/cucumber.rb +11 -4
  14. data/lib/cucumber/cli/configuration.rb +2 -2
  15. data/lib/cucumber/cli/options.rb +2 -2
  16. data/lib/cucumber/configuration.rb +25 -3
  17. data/lib/cucumber/deprecate.rb +29 -0
  18. data/lib/cucumber/filters/activate_steps.rb +39 -5
  19. data/lib/cucumber/formatter/console.rb +4 -4
  20. data/lib/cucumber/formatter/io.rb +1 -1
  21. data/lib/cucumber/formatter/legacy_api/adapter.rb +30 -30
  22. data/lib/cucumber/formatter/legacy_api/runtime_facade.rb +4 -9
  23. data/lib/cucumber/platform.rb +2 -7
  24. data/lib/cucumber/rb_support/rb_language.rb +72 -26
  25. data/lib/cucumber/rb_support/rb_step_definition.rb +2 -2
  26. data/lib/cucumber/rb_support/rb_world.rb +6 -1
  27. data/lib/cucumber/rb_support/snippet.rb +21 -0
  28. data/lib/cucumber/running_test_case.rb +5 -1
  29. data/lib/cucumber/runtime.rb +11 -15
  30. data/lib/cucumber/runtime/support_code.rb +20 -128
  31. data/lib/cucumber/step_argument.rb +25 -0
  32. data/lib/cucumber/step_match.rb +6 -12
  33. data/lib/cucumber/step_match_search.rb +67 -0
  34. data/lib/cucumber/version +1 -0
  35. data/spec/cucumber/configuration_spec.rb +3 -2
  36. data/spec/cucumber/filters/activate_steps_spec.rb +95 -3
  37. data/spec/cucumber/formatter/html_spec.rb +1 -1
  38. data/spec/cucumber/formatter/legacy_api/adapter_spec.rb +55 -28
  39. data/spec/cucumber/formatter/pretty_spec.rb +2 -2
  40. data/spec/cucumber/formatter/spec_helper.rb +22 -12
  41. data/spec/cucumber/rb_support/rb_language_spec.rb +9 -45
  42. data/spec/cucumber/rb_support/rb_step_definition_spec.rb +2 -2
  43. data/spec/cucumber/rb_support/rb_world_spec.rb +47 -0
  44. data/spec/cucumber/runtime/for_programming_languages_spec.rb +1 -1
  45. data/spec/cucumber/runtime/support_code_spec.rb +4 -111
  46. data/spec/cucumber/step_argument_spec.rb +18 -0
  47. data/spec/cucumber/step_match_search_spec.rb +122 -0
  48. data/spec/cucumber/step_match_spec.rb +8 -2
  49. data/spec/cucumber/world/pending_spec.rb +2 -1
  50. data/spec/cucumber_spec.rb +39 -0
  51. metadata +45 -50
  52. data/features/docs/wire_protocol/erb_configuration.feature +0 -56
  53. data/features/docs/wire_protocol/handle_unexpected_response.feature +0 -30
  54. data/features/docs/wire_protocol/invoke_message.feature +0 -216
  55. data/features/docs/wire_protocol/readme.md +0 -26
  56. data/features/docs/wire_protocol/snippets_message.feature +0 -51
  57. data/features/docs/wire_protocol/step_matches_message.feature +0 -81
  58. data/features/docs/wire_protocol/table_diffing.feature +0 -126
  59. data/features/docs/wire_protocol/tags.feature +0 -87
  60. data/features/docs/wire_protocol/timeouts.feature +0 -64
  61. data/lib/cucumber/events/bus.rb +0 -86
  62. data/lib/cucumber/gherkin/formatter/argument.rb +0 -17
  63. data/lib/cucumber/gherkin/formatter/hashable.rb +0 -27
  64. data/lib/cucumber/language_support.rb +0 -30
  65. data/lib/cucumber/language_support/language_methods.rb +0 -72
  66. data/lib/cucumber/rb_support/regexp_argument_matcher.rb +0 -21
  67. data/lib/cucumber/wire_support/configuration.rb +0 -38
  68. data/lib/cucumber/wire_support/connection.rb +0 -61
  69. data/lib/cucumber/wire_support/request_handler.rb +0 -32
  70. data/lib/cucumber/wire_support/wire_exception.rb +0 -32
  71. data/lib/cucumber/wire_support/wire_language.rb +0 -68
  72. data/lib/cucumber/wire_support/wire_packet.rb +0 -34
  73. data/lib/cucumber/wire_support/wire_protocol.rb +0 -43
  74. data/lib/cucumber/wire_support/wire_protocol/requests.rb +0 -133
  75. data/lib/cucumber/wire_support/wire_step_definition.rb +0 -21
  76. data/spec/cucumber/events/bus_spec.rb +0 -94
  77. data/spec/cucumber/rb_support/regexp_argument_matcher_spec.rb +0 -22
  78. data/spec/cucumber/wire_support/configuration_spec.rb +0 -64
  79. data/spec/cucumber/wire_support/connection_spec.rb +0 -64
  80. data/spec/cucumber/wire_support/wire_exception_spec.rb +0 -50
  81. data/spec/cucumber/wire_support/wire_language_spec.rb +0 -46
  82. data/spec/cucumber/wire_support/wire_packet_spec.rb +0 -44
@@ -0,0 +1 @@
1
+ 2.2.0
@@ -136,8 +136,9 @@ module Cucumber
136
136
 
137
137
  describe "#with_options" do
138
138
  it "returns a copy of the configuration with new options" do
139
- new_out_stream = double
140
- config = Configuration.new.with_options(out_stream: new_out_stream)
139
+ old_out_stream = double('Old out_stream')
140
+ new_out_stream = double('New out_stream')
141
+ config = Configuration.new(out_stream: old_out_stream).with_options(out_stream: new_out_stream)
141
142
  expect(config.out_stream).to eq new_out_stream
142
143
  end
143
144
  end
@@ -6,10 +6,12 @@ describe Cucumber::Filters::ActivateSteps do
6
6
  include Cucumber::Core::Gherkin::Writer
7
7
  include Cucumber::Core
8
8
 
9
- let(:step_definitions) { double(find_match: step_match) }
10
9
  let(:step_match) { double(activate: activated_test_step) }
11
10
  let(:activated_test_step) { double }
12
11
  let(:receiver) { double.as_null_object }
12
+ let(:filter) { Cucumber::Filters::ActivateSteps.new(step_match_search, configuration) }
13
+ let(:step_match_search) { Proc.new { [step_match] } }
14
+ let(:configuration) { double(dry_run?: false, notify: nil) }
13
15
 
14
16
  context "a scenario with a single step" do
15
17
  let(:doc) do
@@ -26,7 +28,15 @@ describe Cucumber::Filters::ActivateSteps do
26
28
  expect(step_match).to receive(:activate) do |test_step|
27
29
  expect(test_step.name).to eq 'a passing step'
28
30
  end
29
- compile [doc], receiver, [Cucumber::Filters::ActivateSteps.new(step_definitions)]
31
+ compile [doc], receiver, [filter]
32
+ end
33
+
34
+ it "notifies with a StepMatch event" do
35
+ expect(configuration).to receive(:notify) do |event|
36
+ expect(event.test_step.name).to eq 'a passing step'
37
+ expect(event.step_match).to eq step_match
38
+ end
39
+ compile [doc], receiver, [filter]
30
40
  end
31
41
  end
32
42
 
@@ -50,7 +60,89 @@ describe Cucumber::Filters::ActivateSteps do
50
60
  expect(step_match).to receive(:activate) do |test_step|
51
61
  expect(test_step.name).to eq 'a passing step'
52
62
  end
53
- compile [doc], receiver, [Cucumber::Filters::ActivateSteps.new(step_definitions)]
63
+ compile [doc], receiver, [filter]
64
+ end
65
+ end
66
+
67
+ context "undefined step" do
68
+ let(:step_match_search) { Proc.new { [] } }
69
+
70
+ let(:doc) do
71
+ gherkin do
72
+ feature do
73
+ scenario do
74
+ step 'an undefined step'
75
+ end
76
+ end
77
+ end
78
+ end
79
+
80
+ it "does not activate the step" do
81
+ expect(receiver).to receive(:test_case) do |test_case|
82
+ expect(test_case.test_steps[0].execute).to be_undefined
83
+ end
84
+ compile [doc], receiver, [filter]
85
+ end
86
+
87
+ it "does not notify" do
88
+ expect(configuration).not_to receive(:notify)
89
+ compile [doc], receiver, [filter]
90
+ end
91
+ end
92
+
93
+ context "dry run" do
94
+ let(:configuration) { double(dry_run?: true, notify: nil) }
95
+
96
+ let(:doc) do
97
+ gherkin do
98
+ feature do
99
+ scenario do
100
+ step 'a passing step'
101
+ end
102
+ end
103
+ end
104
+ end
105
+
106
+ it "activates each step with a skipping action" do
107
+ expect(receiver).to receive(:test_case) do |test_case|
108
+ expect(test_case.test_steps[0].execute).to be_skipped
109
+ end
110
+ compile [doc], receiver, [filter]
111
+ end
112
+
113
+ it "notifies with a StepMatch event" do
114
+ expect(configuration).to receive(:notify) do |event|
115
+ expect(event.test_step.name).to eq 'a passing step'
116
+ expect(event.step_match).to eq step_match
117
+ end
118
+ compile [doc], receiver, [filter]
119
+ end
120
+ end
121
+
122
+ context "undefined step in a dry run" do
123
+ let(:step_match_search) { Proc.new { [] } }
124
+ let(:configuration) { double(dry_run?: true, notify: nil) }
125
+
126
+ let(:doc) do
127
+ gherkin do
128
+ feature do
129
+ scenario do
130
+ step 'an undefined step'
131
+ end
132
+ end
133
+ end
134
+ end
135
+
136
+ it "does not activate the step" do
137
+ expect(receiver).to receive(:test_case) do |test_case|
138
+ expect(test_case.test_steps[0].execute).to be_undefined
139
+ end
140
+ compile [doc], receiver, [filter]
141
+ end
142
+
143
+ it "does not notify" do
144
+ expect(configuration).not_to receive(:notify)
145
+ compile [doc], receiver, [filter]
54
146
  end
55
147
  end
56
148
 
@@ -486,7 +486,7 @@ module Cucumber
486
486
  end
487
487
  end
488
488
  context "in --expand mode" do
489
- let(:runtime) { Runtime.new({:expand => true})}
489
+ let(:options) { { expand: true } }
490
490
  before(:each) do
491
491
  @out = StringIO.new
492
492
  @formatter = Html.new(runtime, @out, {:expand => true})
@@ -5,6 +5,7 @@ require 'cucumber/runtime/step_hooks'
5
5
  require 'cucumber/runtime/before_hooks'
6
6
  require 'cucumber/runtime/after_hooks'
7
7
  require 'cucumber/filters'
8
+ require 'spec_helper'
8
9
 
9
10
  module Cucumber
10
11
  module Formatter::LegacyApi
@@ -12,9 +13,10 @@ module Cucumber
12
13
  include Core::Gherkin::Writer
13
14
  include Core
14
15
 
15
- let(:report) { Adapter.new(formatter, runtime.results, runtime.support_code, runtime.configuration) }
16
+ let(:report) { Adapter.new(formatter, runtime.results, runtime.configuration) }
16
17
  let(:formatter) { double('formatter').as_null_object }
17
18
  let(:runtime) { Runtime.new }
19
+ let(:step_match_search) { SimpleStepDefinitionSearch.new }
18
20
 
19
21
  Failure = Class.new(StandardError)
20
22
 
@@ -28,17 +30,17 @@ module Cucumber
28
30
  end
29
31
  end
30
32
 
31
- class SimpleStepDefinitions
32
- def find_match(test_step)
33
- if test_step.name =~ /pass/
34
- return SimpleStepMatch.new {}
33
+ class SimpleStepDefinitionSearch
34
+ def call(name)
35
+ if name =~ /pass/
36
+ return [SimpleStepMatch.new {}]
35
37
  end
36
38
 
37
- if test_step.name =~ /fail/
38
- return SimpleStepMatch.new { raise Failure }
39
+ if name =~ /fail/
40
+ return [SimpleStepMatch.new { raise Failure }]
39
41
  end
40
42
 
41
- NoStepMatch.new test_step.source.last, test_step.name
43
+ []
42
44
  end
43
45
  end
44
46
 
@@ -1545,7 +1547,7 @@ module Cucumber
1545
1547
 
1546
1548
  it 'prints the exception within the step' do
1547
1549
  filters = [
1548
- Filters::ActivateSteps.new(SimpleStepDefinitions.new),
1550
+ Filters::ActivateSteps.new(step_match_search, runtime.configuration),
1549
1551
  Filters::ApplyAfterStepHooks.new(FailingAfterStepHook.new),
1550
1552
  AddBeforeAndAfterHooks.new
1551
1553
  ]
@@ -1591,7 +1593,7 @@ module Cucumber
1591
1593
 
1592
1594
  it 'prints the exception after the scenario name' do
1593
1595
  filters = [
1594
- Filters::ActivateSteps.new(SimpleStepDefinitions.new),
1596
+ Filters::ActivateSteps.new(step_match_search, runtime.configuration),
1595
1597
  Filters::ApplyBeforeHooks.new(FailingBeforeHook.new),
1596
1598
  AddBeforeAndAfterHooks.new
1597
1599
  ]
@@ -1629,7 +1631,7 @@ module Cucumber
1629
1631
 
1630
1632
  it 'prints the exception after the background name' do
1631
1633
  filters = [
1632
- Filters::ActivateSteps.new(SimpleStepDefinitions.new),
1634
+ Filters::ActivateSteps.new(step_match_search, runtime.configuration),
1633
1635
  Filters::ApplyBeforeHooks.new(FailingBeforeHook.new),
1634
1636
  AddBeforeAndAfterHooks.new
1635
1637
  ]
@@ -1681,7 +1683,7 @@ module Cucumber
1681
1683
 
1682
1684
  it 'prints the exception before the examples table row' do
1683
1685
  filters = [
1684
- Filters::ActivateSteps.new(SimpleStepDefinitions.new),
1686
+ Filters::ActivateSteps.new(step_match_search, runtime.configuration),
1685
1687
  Filters::ApplyBeforeHooks.new(FailingBeforeHook.new),
1686
1688
  AddBeforeAndAfterHooks.new
1687
1689
  ]
@@ -1754,7 +1756,7 @@ module Cucumber
1754
1756
 
1755
1757
  it 'prints the exception after the scenario name' do
1756
1758
  filters = [
1757
- Filters::ActivateSteps.new(SimpleStepDefinitions.new),
1759
+ Filters::ActivateSteps.new(step_match_search, runtime.configuration),
1758
1760
  Filters::ApplyBeforeHooks.new(FailingAndPassingBeforeHooks.new),
1759
1761
  AddBeforeAndAfterHooks.new
1760
1762
  ]
@@ -1802,7 +1804,7 @@ module Cucumber
1802
1804
 
1803
1805
  it 'prints the exception after the steps' do
1804
1806
  filters = [
1805
- Filters::ActivateSteps.new(SimpleStepDefinitions.new),
1807
+ Filters::ActivateSteps.new(step_match_search, runtime.configuration),
1806
1808
  Filters::ApplyAfterHooks.new(FailingAfterHook.new),
1807
1809
  AddBeforeAndAfterHooks.new
1808
1810
  ]
@@ -1840,7 +1842,7 @@ module Cucumber
1840
1842
 
1841
1843
  it 'prints the exception after the examples table row' do
1842
1844
  filters = [
1843
- Filters::ActivateSteps.new(SimpleStepDefinitions.new),
1845
+ Filters::ActivateSteps.new(step_match_search, runtime.configuration),
1844
1846
  Filters::ApplyAfterHooks.new(FailingAfterHook.new),
1845
1847
  AddBeforeAndAfterHooks.new
1846
1848
  ]
@@ -1911,7 +1913,7 @@ module Cucumber
1911
1913
 
1912
1914
  it 'prints the exception after the steps' do
1913
1915
  filters = [
1914
- Filters::ActivateSteps.new(SimpleStepDefinitions.new),
1916
+ Filters::ActivateSteps.new(step_match_search, runtime.configuration),
1915
1917
  Filters::ApplyAfterHooks.new(FailingThenPassingAfterHooks.new),
1916
1918
  AddBeforeAndAfterHooks.new
1917
1919
  ]
@@ -1951,7 +1953,7 @@ module Cucumber
1951
1953
  context 'with an exception in an after hook but no steps' do
1952
1954
  it 'prints the exception after the scenario name' do
1953
1955
  filters = [
1954
- Filters::ActivateSteps.new(SimpleStepDefinitions.new),
1956
+ Filters::ActivateSteps.new(step_match_search, runtime.configuration),
1955
1957
  Filters::ApplyAfterHooks.new(FailingAfterHook.new),
1956
1958
  AddBeforeAndAfterHooks.new
1957
1959
  ]
@@ -1991,7 +1993,7 @@ module Cucumber
1991
1993
 
1992
1994
  it 'prints the exception after the scenario name' do
1993
1995
  filters = [
1994
- Filters::ActivateSteps.new(SimpleStepDefinitions.new),
1996
+ Filters::ActivateSteps.new(step_match_search, runtime.configuration),
1995
1997
  Filters::ApplyAroundHooks.new(FailingAroundHookBeforeRunningTestCase.new),
1996
1998
  AddBeforeAndAfterHooks.new
1997
1999
  ]
@@ -2031,7 +2033,7 @@ module Cucumber
2031
2033
 
2032
2034
  it 'prints the exception after the scenario name' do
2033
2035
  filters = [
2034
- Filters::ActivateSteps.new(SimpleStepDefinitions.new),
2036
+ Filters::ActivateSteps.new(step_match_search, runtime.configuration),
2035
2037
  Filters::ApplyAroundHooks.new(FailingAroundHookAfterRunningTestCase.new),
2036
2038
  AddBeforeAndAfterHooks.new
2037
2039
  ]
@@ -2069,6 +2071,28 @@ module Cucumber
2069
2071
  end
2070
2072
  end
2071
2073
 
2074
+ describe 'before_step_result message' do
2075
+ context 'when the step matches' do
2076
+ it "sends the step match to the formatter" do
2077
+ expect(formatter).to receive(:before_step_result) do |_, step_match, *|
2078
+ expect(step_match).to be_a SimpleStepMatch
2079
+ end
2080
+ execute_gherkin do
2081
+ feature do
2082
+ scenario do
2083
+ step 'passing'
2084
+ end
2085
+ end
2086
+ end
2087
+ end
2088
+ end
2089
+
2090
+ context "when the step doesn't match" do
2091
+ it "sends a null object to the formatter" do
2092
+ end
2093
+ end
2094
+ end
2095
+
2072
2096
  it 'passes nil as the multiline arg when there is none' do
2073
2097
  expect(formatter).to receive(:after_step_result) do |keyword, step_match, multiline_arg, status, exception, source_indent, background, file_colon_line|
2074
2098
  expect(multiline_arg).to be_nil
@@ -2082,14 +2106,17 @@ module Cucumber
2082
2106
  end
2083
2107
  end
2084
2108
 
2085
- it 'passes an object responding to failed? with the after_feature_element message' do
2086
- expect( formatter ).to receive(:after_feature_element) do |scenario|
2087
- expect( scenario ).to be_failed
2088
- end
2089
- execute_gherkin do
2090
- feature do
2091
- scenario do
2092
- step 'failing'
2109
+ context "after_feature_element callback" do
2110
+ it 'passes an object reflecting the status of the scenario' do
2111
+ expect( formatter ).to receive(:after_feature_element).once do |scenario|
2112
+ expect( scenario ).to be_failed
2113
+ end
2114
+ execute_gherkin do
2115
+ feature do
2116
+ scenario do
2117
+ step 'failing'
2118
+ step 'this will be skipped'
2119
+ end
2093
2120
  end
2094
2121
  end
2095
2122
  end
@@ -2145,7 +2172,7 @@ module Cucumber
2145
2172
 
2146
2173
  def default_filters
2147
2174
  [
2148
- Filters::ActivateSteps.new(SimpleStepDefinitions.new),
2175
+ Filters::ActivateSteps.new(step_match_search, runtime.configuration),
2149
2176
  AddBeforeAndAfterHooks.new
2150
2177
  ]
2151
2178
  end
@@ -642,7 +642,7 @@ OUTPUT
642
642
  end
643
643
 
644
644
  context "In --expand mode" do
645
- let(:runtime) { Runtime.new({:expand => true})}
645
+ let(:options) { { expand: true } }
646
646
  before(:each) do
647
647
  Cucumber::Term::ANSIColor.coloring = false
648
648
  @out = StringIO.new
@@ -731,7 +731,7 @@ OUTPUT
731
731
  end
732
732
 
733
733
  context "In --expand mode with --source as an option" do
734
- let(:runtime) { Runtime.new({:expand => true})}
734
+ let(:options) { { expand: true } }
735
735
  before(:each) do
736
736
  Cucumber::Term::ANSIColor.coloring = false
737
737
  @out = StringIO.new
@@ -19,16 +19,19 @@ module Cucumber
19
19
 
20
20
  def run_defined_feature
21
21
  define_steps
22
- runtime.visitor = report
22
+ actual_runtime.visitor = report
23
23
 
24
24
  receiver = Test::Runner.new(report)
25
25
  filters = [
26
- Filters::ActivateSteps.new(runtime.support_code),
27
- Filters::ApplyAfterStepHooks.new(runtime.support_code),
28
- Filters::ApplyBeforeHooks.new(runtime.support_code),
29
- Filters::ApplyAfterHooks.new(runtime.support_code),
30
- Filters::ApplyAroundHooks.new(runtime.support_code),
31
- Filters::PrepareWorld.new(runtime)
26
+ Filters::ActivateSteps.new(
27
+ StepMatchSearch.new(actual_runtime.support_code.ruby.method(:step_matches), actual_runtime.configuration),
28
+ actual_runtime.configuration
29
+ ),
30
+ Filters::ApplyAfterStepHooks.new(actual_runtime.support_code),
31
+ Filters::ApplyBeforeHooks.new(actual_runtime.support_code),
32
+ Filters::ApplyAfterHooks.new(actual_runtime.support_code),
33
+ Filters::ApplyAroundHooks.new(actual_runtime.support_code),
34
+ Filters::PrepareWorld.new(actual_runtime)
32
35
  ]
33
36
  compile [gherkin_doc], receiver, filters
34
37
  end
@@ -37,9 +40,8 @@ module Cucumber
37
40
  def report
38
41
  @report ||= LegacyApi::Adapter.new(
39
42
  Fanout.new([@formatter]),
40
- runtime.results,
41
- runtime.support_code,
42
- runtime.configuration)
43
+ actual_runtime.results,
44
+ actual_runtime.configuration)
43
45
  end
44
46
 
45
47
  require 'cucumber/core/gherkin/document'
@@ -52,16 +54,24 @@ module Cucumber
52
54
  end
53
55
 
54
56
  def runtime
55
- @runtime ||= Runtime.new
57
+ @runtime_facade ||= LegacyApi::RuntimeFacade.new(actual_runtime.results, actual_runtime.support_code, actual_runtime.configuration)
58
+ end
59
+
60
+ def actual_runtime
61
+ @runtime ||= Runtime.new(options)
56
62
  end
57
63
 
58
64
  def define_steps
59
65
  return unless step_defs = self.class.step_defs
60
- rb = runtime.load_programming_language('rb')
66
+ rb = runtime.support_code.ruby
61
67
  dsl = Object.new
62
68
  dsl.extend RbSupport::RbDsl
63
69
  dsl.instance_exec &step_defs
64
70
  end
71
+
72
+ def options
73
+ {}
74
+ end
65
75
  end
66
76
  end
67
77
  end
@@ -5,58 +5,15 @@ module Cucumber
5
5
  module RbSupport
6
6
  describe RbStepDefinition do
7
7
  let(:user_interface) { double('user interface') }
8
- let(:rb) { support_code.load_programming_language('rb')}
8
+ let(:rb) { support_code.ruby }
9
9
  let(:support_code) do
10
- Cucumber::Runtime::SupportCode.new(user_interface, {})
10
+ Cucumber::Runtime::SupportCode.new(user_interface)
11
11
  end
12
12
  let(:dsl) do
13
13
  rb
14
14
  Object.new.extend(RbSupport::RbDsl)
15
15
  end
16
16
 
17
- describe "snippets" do
18
- let(:snippet) { double.as_null_object }
19
-
20
- it "creates a regexp Snippet class by default" do
21
- expect(Snippet::Regexp).to receive(:new) { snippet }
22
-
23
- rb.snippet_text('Given', 'A "string" with 4 spaces', nil)
24
- end
25
-
26
- it "creates a regexp Snippet class explicitly" do
27
- expect(Snippet::Regexp).to receive(:new) { snippet }
28
-
29
- rb.snippet_text('Given', 'A "string" with 4 spaces', nil, :regexp)
30
- end
31
-
32
- it "creates a classic Snippet class" do
33
- expect(Snippet::Classic).to receive(:new) { snippet }
34
-
35
- rb.snippet_text('Given', 'A "string" with 4 spaces', nil, :classic)
36
- end
37
-
38
- it "creates a percent Snippet class" do
39
- expect(Snippet::Percent).to receive(:new) { snippet }
40
-
41
- rb.snippet_text('Given', 'A "string" with 4 spaces', nil, :percent)
42
- end
43
-
44
- it "passes all parameters to Snippet contructor" do
45
- code_keyword, pattern, multiline_argument_class = double, double, double
46
-
47
- expect(Snippet::Regexp).to receive(:new).with(code_keyword, pattern, multiline_argument_class)
48
-
49
- rb.snippet_text(code_keyword, pattern, multiline_argument_class)
50
- end
51
-
52
- it "renders the snippet" do
53
- allow(Snippet::Regexp).to receive(:new) { snippet }
54
- expect(snippet).to receive(:to_s)
55
-
56
- rb.snippet_text('Given', 'A "string" with 4 spaces', nil)
57
- end
58
- end
59
-
60
17
  describe "#load_code_file" do
61
18
  after do
62
19
  FileUtils.rm_rf('tmp.rb')
@@ -84,6 +41,13 @@ module Cucumber
84
41
 
85
42
  expect($foo).to eq 2
86
43
  end
44
+
45
+ it "only loads ruby files" do
46
+ a_file_called("readme.md") do
47
+ "yo"
48
+ end
49
+ rb.load_code_file('readme.md')
50
+ end
87
51
  end
88
52
 
89
53
  describe "Handling the World" do