cucumber 2.0.0.beta.3 → 2.0.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 (147) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +3 -3
  3. data/History.md +131 -32
  4. data/Rakefile +0 -2
  5. data/cucumber.gemspec +4 -3
  6. data/examples/i18n/ht/Rakefile +6 -0
  7. data/examples/i18n/ht/features/adisyon.feature +17 -0
  8. data/examples/i18n/ht/features/divizyon.feature +10 -0
  9. data/examples/i18n/ht/features/step_definitions/kalkilatris_steps.rb +25 -0
  10. data/examples/i18n/ht/lib/kalkilatris.rb +14 -0
  11. data/examples/tcl/features/step_definitions/fib_steps.rb +1 -1
  12. data/features/docs/cli/dry_run.feature +48 -0
  13. data/features/docs/cli/exclude_files.feature +1 -2
  14. data/features/docs/cli/run_specific_scenarios.feature +28 -66
  15. data/features/docs/cli/strict_mode.feature +24 -1
  16. data/features/docs/defining_steps/nested_steps.feature +49 -0
  17. data/features/docs/defining_steps/skip_scenario.feature +31 -2
  18. data/features/docs/defining_steps/snippets.feature +15 -0
  19. data/features/docs/exception_in_after_step_hook.feature +1 -1
  20. data/features/docs/exception_in_around_hook.feature +80 -0
  21. data/features/docs/extending_cucumber/custom_filter.feature +29 -0
  22. data/features/docs/extending_cucumber/custom_formatter.feature +65 -7
  23. data/features/docs/formatters/debug_formatter.feature +24 -17
  24. data/features/docs/formatters/json_formatter.feature +65 -1
  25. data/features/docs/formatters/junit_formatter.feature +40 -0
  26. data/features/docs/formatters/pretty_formatter.feature +42 -0
  27. data/features/docs/formatters/rerun_formatter.feature +3 -2
  28. data/features/docs/getting_started.feature +1 -1
  29. data/features/docs/{wire_protocol_erb.feature → wire_protocol/erb_configuration.feature} +2 -2
  30. data/features/docs/wire_protocol/handle_unexpected_response.feature +30 -0
  31. data/features/docs/wire_protocol/invoke_message.feature +216 -0
  32. data/features/docs/wire_protocol/readme.md +26 -0
  33. data/features/docs/wire_protocol/snippets_message.feature +51 -0
  34. data/features/docs/wire_protocol/step_matches_message.feature +81 -0
  35. data/features/docs/{wire_protocol_table_diffing.feature → wire_protocol/table_diffing.feature} +1 -0
  36. data/features/docs/{wire_protocol_tags.feature → wire_protocol/tags.feature} +1 -0
  37. data/features/docs/{wire_protocol_timeouts.feature → wire_protocol/timeouts.feature} +1 -0
  38. data/features/docs/work_in_progress.feature +1 -1
  39. data/features/docs/writing_support_code/after_hooks.feature +24 -0
  40. data/features/docs/writing_support_code/around_hooks.feature +31 -0
  41. data/features/docs/writing_support_code/before_hook.feature +7 -3
  42. data/features/docs/writing_support_code/tagged_hooks.feature +44 -6
  43. data/features/lib/step_definitions/wire_steps.rb +18 -1
  44. data/features/lib/support/fake_wire_server.rb +10 -7
  45. data/lib/cucumber/cli/configuration.rb +6 -11
  46. data/lib/cucumber/cli/main.rb +2 -2
  47. data/lib/cucumber/cli/options.rb +8 -1
  48. data/lib/cucumber/cli/profile_loader.rb +1 -1
  49. data/lib/cucumber/core_ext/instance_exec.rb +1 -1
  50. data/lib/cucumber/encoding.rb +5 -0
  51. data/lib/cucumber/errors.rb +8 -0
  52. data/lib/cucumber/file_specs.rb +3 -1
  53. data/lib/cucumber/filters/activate_steps.rb +33 -0
  54. data/lib/cucumber/filters/apply_after_hooks.rb +9 -0
  55. data/lib/cucumber/filters/apply_after_step_hooks.rb +12 -0
  56. data/lib/cucumber/filters/apply_around_hooks.rb +12 -0
  57. data/lib/cucumber/filters/apply_before_hooks.rb +9 -0
  58. data/lib/cucumber/{runtime → filters}/gated_receiver.rb +5 -1
  59. data/lib/cucumber/filters/prepare_world.rb +45 -0
  60. data/lib/cucumber/filters/quit.rb +28 -0
  61. data/lib/cucumber/filters/randomizer.rb +40 -0
  62. data/lib/cucumber/{runtime → filters}/tag_limits/test_case_index.rb +4 -2
  63. data/lib/cucumber/{runtime → filters}/tag_limits/verifier.rb +4 -2
  64. data/lib/cucumber/filters/tag_limits.rb +45 -0
  65. data/lib/cucumber/filters.rb +9 -0
  66. data/lib/cucumber/formatter/ansicolor.rb +0 -8
  67. data/lib/cucumber/formatter/console.rb +37 -20
  68. data/lib/cucumber/formatter/debug.rb +1 -8
  69. data/lib/cucumber/formatter/fanout.rb +27 -0
  70. data/lib/cucumber/formatter/gherkin_formatter_adapter.rb +10 -9
  71. data/lib/cucumber/formatter/html.rb +31 -6
  72. data/lib/cucumber/formatter/ignore_missing_messages.rb +20 -0
  73. data/lib/cucumber/formatter/junit.rb +97 -2
  74. data/lib/cucumber/formatter/legacy_api/adapter.rb +1060 -0
  75. data/lib/cucumber/formatter/legacy_api/ast.rb +376 -0
  76. data/lib/cucumber/formatter/legacy_api/results.rb +51 -0
  77. data/lib/cucumber/formatter/legacy_api/runtime_facade.rb +30 -0
  78. data/lib/cucumber/formatter/pretty.rb +14 -0
  79. data/lib/cucumber/formatter/progress.rb +10 -0
  80. data/lib/cucumber/formatter/rerun.rb +14 -88
  81. data/lib/cucumber/hooks.rb +97 -0
  82. data/lib/cucumber/language_support/language_methods.rb +0 -54
  83. data/lib/cucumber/multiline_argument/data_table.rb +41 -29
  84. data/lib/cucumber/platform.rb +3 -3
  85. data/lib/cucumber/project_initializer.rb +43 -0
  86. data/lib/cucumber/rb_support/rb_hook.rb +2 -2
  87. data/lib/cucumber/rb_support/rb_step_definition.rb +11 -2
  88. data/lib/cucumber/rb_support/rb_transform.rb +3 -1
  89. data/lib/cucumber/rb_support/rb_world.rb +2 -2
  90. data/lib/cucumber/rb_support/snippet.rb +1 -1
  91. data/lib/cucumber/rspec/doubles.rb +1 -1
  92. data/lib/cucumber/running_test_case.rb +115 -0
  93. data/lib/cucumber/runtime/after_hooks.rb +24 -0
  94. data/lib/cucumber/runtime/before_hooks.rb +23 -0
  95. data/lib/cucumber/runtime/for_programming_languages.rb +4 -8
  96. data/lib/cucumber/runtime/step_hooks.rb +22 -0
  97. data/lib/cucumber/runtime/support_code.rb +70 -5
  98. data/lib/cucumber/runtime.rb +56 -112
  99. data/lib/cucumber/step_match.rb +26 -2
  100. data/lib/cucumber.rb +7 -3
  101. data/spec/cucumber/cli/configuration_spec.rb +16 -1
  102. data/spec/cucumber/cli/profile_loader_spec.rb +10 -0
  103. data/spec/cucumber/core_ext/instance_exec_spec.rb +4 -0
  104. data/spec/cucumber/file_specs_spec.rb +21 -2
  105. data/spec/cucumber/filters/activate_steps_spec.rb +57 -0
  106. data/spec/cucumber/{runtime → filters}/gated_receiver_spec.rb +3 -3
  107. data/spec/cucumber/{runtime → filters}/tag_limits/test_case_index_spec.rb +3 -3
  108. data/spec/cucumber/{runtime → filters}/tag_limits/verifier_spec.rb +4 -4
  109. data/spec/cucumber/{runtime/tag_limits/filter_spec.rb → filters/tag_limits_spec.rb} +6 -6
  110. data/spec/cucumber/formatter/debug_spec.rb +25 -530
  111. data/spec/cucumber/formatter/html_spec.rb +140 -0
  112. data/spec/cucumber/formatter/junit_spec.rb +212 -156
  113. data/spec/cucumber/formatter/legacy_api/adapter_spec.rb +2090 -0
  114. data/spec/cucumber/formatter/pretty_spec.rb +248 -2
  115. data/spec/cucumber/formatter/rerun_spec.rb +107 -0
  116. data/spec/cucumber/formatter/spec_helper.rb +17 -8
  117. data/spec/cucumber/hooks_spec.rb +30 -0
  118. data/spec/cucumber/multiline_argument/data_table_spec.rb +53 -47
  119. data/spec/cucumber/project_initializer_spec.rb +87 -0
  120. data/spec/cucumber/rb_support/rb_language_spec.rb +2 -2
  121. data/spec/cucumber/rb_support/rb_step_definition_spec.rb +32 -7
  122. data/spec/cucumber/rb_support/rb_transform_spec.rb +20 -0
  123. data/spec/cucumber/rb_support/snippet_spec.rb +6 -6
  124. data/spec/cucumber/running_test_case_spec.rb +83 -0
  125. data/spec/cucumber/runtime_spec.rb +1 -5
  126. data/spec/spec_helper.rb +3 -4
  127. metadata +149 -107
  128. data/bin/cuke +0 -60
  129. data/features/docs/extending_cucumber/formatter_callbacks.feature +0 -370
  130. data/features/docs/output_from_hooks.feature +0 -128
  131. data/features/docs/report_called_undefined_steps.feature +0 -57
  132. data/features/docs/wire_protocol.feature +0 -337
  133. data/gem_tasks/yard/default/layout/html/bubble_32x32.png +0 -0
  134. data/gem_tasks/yard/default/layout/html/footer.erb +0 -5
  135. data/gem_tasks/yard/default/layout/html/index.erb +0 -1
  136. data/gem_tasks/yard/default/layout/html/layout.erb +0 -25
  137. data/gem_tasks/yard/default/layout/html/logo.erb +0 -1
  138. data/gem_tasks/yard/default/layout/html/setup.rb +0 -4
  139. data/gem_tasks/yard.rake +0 -43
  140. data/lib/cucumber/mappings.rb +0 -238
  141. data/lib/cucumber/reports/legacy_formatter.rb +0 -1349
  142. data/lib/cucumber/runtime/results.rb +0 -64
  143. data/lib/cucumber/runtime/tag_limits/filter.rb +0 -31
  144. data/lib/cucumber/runtime/tag_limits.rb +0 -15
  145. data/spec/cucumber/mappings_spec.rb +0 -180
  146. data/spec/cucumber/reports/legacy_formatter_spec.rb +0 -1860
  147. data/spec/cucumber/runtime/results_spec.rb +0 -88
@@ -4,192 +4,248 @@ require 'cucumber/formatter/spec_helper'
4
4
  require 'cucumber/formatter/junit'
5
5
  require 'nokogiri'
6
6
 
7
- module Cucumber::Formatter
8
- describe Junit do
9
- extend SpecHelperDsl
10
- include SpecHelper
11
-
12
- class TestDoubleJunitFormatter < Junit
13
- attr_reader :written_files
14
-
15
- def write_file(feature_filename, data)
16
- @written_files ||= {}
17
- @written_files[feature_filename] = data
7
+ module Cucumber
8
+ module Formatter
9
+ describe Junit do
10
+ extend SpecHelperDsl
11
+ include SpecHelper
12
+
13
+ class TestDoubleJunitFormatter < Junit
14
+ attr_reader :written_files
15
+
16
+ def write_file(feature_filename, data)
17
+ @written_files ||= {}
18
+ @written_files[feature_filename] = data
19
+ end
18
20
  end
19
- end
20
21
 
21
- before(:each) do
22
- allow(File).to receive(:directory?) { true }
23
- @formatter = TestDoubleJunitFormatter.new(runtime, '', {})
24
- end
22
+ context "With no options" do
23
+ before(:each) do
24
+ allow(File).to receive(:directory?) { true }
25
+ @formatter = TestDoubleJunitFormatter.new(runtime, '', {})
26
+ end
25
27
 
26
- after(:each) do
27
- $stdout = STDOUT
28
- end
28
+ after(:each) do
29
+ $stdout = STDOUT
30
+ end
29
31
 
30
- describe "is able to strip control chars from cdata" do
31
- before(:each) do
32
- run_defined_feature
33
- @doc = Nokogiri.XML(@formatter.written_files.values.first)
34
- end
35
- define_feature "
36
- Feature: One passing scenario, one failing scenario
37
-
38
- Scenario: Passing
39
- Given a passing ctrl scenario
40
- "
41
- class Junit
42
- def before_step(step)
43
- if step.name.match("a passing ctrl scenario")
44
- Interceptor::Pipe.unwrap! :stdout
45
- @fake_io = $stdout = StringIO.new
46
- $stdout.sync = true
47
- @interceptedout = Interceptor::Pipe.wrap(:stdout)
32
+ describe "is able to strip control chars from cdata" do
33
+ before(:each) do
34
+ run_defined_feature
35
+ @doc = Nokogiri.XML(@formatter.written_files.values.first)
36
+ end
37
+ define_feature "
38
+ Feature: One passing scenario, one failing scenario
39
+
40
+ Scenario: Passing
41
+ Given a passing ctrl scenario
42
+ "
43
+ class Junit
44
+ def before_step(step)
45
+ if step.name.match("a passing ctrl scenario")
46
+ Interceptor::Pipe.unwrap! :stdout
47
+ @fake_io = $stdout = StringIO.new
48
+ $stdout.sync = true
49
+ @interceptedout = Interceptor::Pipe.wrap(:stdout)
50
+ end
51
+ end
52
+
53
+ def after_step(step)
54
+ if step.name.match("a passing ctrl scenario")
55
+ @interceptedout.write("boo\b\cx\e\a\f boo ")
56
+ $stdout = STDOUT
57
+ @fake_io.close
58
+ end
59
+ end
48
60
  end
61
+
62
+ it { expect(@doc.xpath('//testsuite/system-out').first.content).to match(/\s+boo boo\s+/) }
49
63
  end
50
64
 
51
- def after_step(step)
52
- if step.name.match("a passing ctrl scenario")
53
- @interceptedout.write("boo\b\cx\e\a\f boo ")
54
- $stdout = STDOUT
55
- @fake_io.close
65
+ describe "a feature with no name" do
66
+ define_feature <<-FEATURE
67
+ Feature:
68
+ Scenario: Passing
69
+ Given a passing scenario
70
+ FEATURE
71
+
72
+ it "raises an exception" do
73
+ expect(-> {
74
+ run_defined_feature
75
+ }).to raise_error(Junit::UnNamedFeatureError)
56
76
  end
57
77
  end
58
- end
59
78
 
60
- it { expect(@doc.xpath('//testsuite/system-out').first.content).to match(/\s+boo boo\s+/) }
61
- end
62
-
63
- describe "a feature with no name" do
64
- define_feature <<-FEATURE
65
- Feature:
66
- Scenario: Passing
67
- Given a passing scenario
68
- FEATURE
69
-
70
- it "raises an exception" do
71
- expect(-> {
72
- run_defined_feature
73
- }).to raise_error(Junit::UnNamedFeatureError)
74
- end
75
- end
76
-
77
- describe "given a single feature" do
78
- before(:each) do
79
- run_defined_feature
80
- @doc = Nokogiri.XML(@formatter.written_files.values.first)
81
- end
79
+ describe "given a single feature" do
80
+ before(:each) do
81
+ run_defined_feature
82
+ @doc = Nokogiri.XML(@formatter.written_files.values.first)
83
+ end
82
84
 
83
- describe "with a single scenario" do
84
- define_feature <<-FEATURE
85
- Feature: One passing scenario, one failing scenario
85
+ describe "with a single scenario" do
86
+ define_feature <<-FEATURE
87
+ Feature: One passing scenario, one failing scenario
86
88
 
87
- Scenario: Passing
88
- Given a passing scenario
89
- FEATURE
89
+ Scenario: Passing
90
+ Given a passing scenario
91
+ FEATURE
90
92
 
91
- it { expect(@doc.to_s).to match /One passing scenario, one failing scenario/ }
93
+ it { expect(@doc.to_s).to match /One passing scenario, one failing scenario/ }
92
94
 
93
- it 'has a root system-out node' do
94
- expect(@doc.xpath('//testsuite/system-out').size).to eq 1
95
- end
95
+ it 'has a root system-out node' do
96
+ expect(@doc.xpath('//testsuite/system-out').size).to eq 1
97
+ end
96
98
 
97
- it 'has a root system-err node' do
98
- expect(@doc.xpath('//testsuite/system-err').size).to eq 1
99
- end
99
+ it 'has a root system-err node' do
100
+ expect(@doc.xpath('//testsuite/system-err').size).to eq 1
101
+ end
100
102
 
101
- it 'has a system-out node under <testcase/>' do
102
- expect(@doc.xpath('//testcase/system-out').size).to eq 1
103
- end
103
+ it 'has a system-out node under <testcase/>' do
104
+ expect(@doc.xpath('//testcase/system-out').size).to eq 1
105
+ end
104
106
 
105
- it 'has a system-err node under <testcase/>' do
106
- expect(@doc.xpath('//testcase/system-err').size).to eq 1
107
- end
108
- end
107
+ it 'has a system-err node under <testcase/>' do
108
+ expect(@doc.xpath('//testcase/system-err').size).to eq 1
109
+ end
110
+ end
109
111
 
110
- describe "with a scenario in a subdirectory" do
111
- define_feature %{
112
- Feature: One passing scenario, one failing scenario
112
+ describe "with a scenario in a subdirectory" do
113
+ define_feature %{
114
+ Feature: One passing scenario, one failing scenario
113
115
 
114
- Scenario: Passing
115
- Given a passing scenario
116
- }, File.join('features', 'some', 'path', 'spec.feature')
116
+ Scenario: Passing
117
+ Given a passing scenario
118
+ }, File.join('features', 'some', 'path', 'spec.feature')
117
119
 
118
- it 'writes the filename including the subdirectory' do
119
- expect(@formatter.written_files.keys.first).to eq File.join('', 'TEST-features-some-path-spec.xml')
120
- end
121
- end
120
+ it 'writes the filename including the subdirectory' do
121
+ expect(@formatter.written_files.keys.first).to eq File.join('', 'TEST-features-some-path-spec.xml')
122
+ end
123
+ end
122
124
 
123
- describe "with a scenario outline table" do
124
- define_steps do
125
- Given(/.*/) { }
126
- end
125
+ describe "with a scenario outline table" do
126
+ define_steps do
127
+ Given(/.*/) { }
128
+ end
129
+
130
+ define_feature <<-FEATURE
131
+ Feature: Eat things when hungry
132
+
133
+ Scenario Outline: Eat things
134
+ Given <Things>
135
+ And stuff:
136
+ | foo |
137
+ | bar |
138
+
139
+ Examples: Good
140
+ | Things |
141
+ | Cucumber |
142
+ | Whisky |
143
+ Examples: Evil
144
+ | Things |
145
+ | Big Mac |
146
+ FEATURE
147
+
148
+ it { expect(@doc.to_s).to match /Eat things when hungry/ }
149
+ it { expect(@doc.to_s).to match /Cucumber/ }
150
+ it { expect(@doc.to_s).to match /Whisky/ }
151
+ it { expect(@doc.to_s).to match /Big Mac/ }
152
+ it { expect(@doc.to_s).not_to match /Things/ }
153
+ it { expect(@doc.to_s).not_to match /Good|Evil/ }
154
+ it { expect(@doc.to_s).not_to match /type="skipped"/}
155
+ end
127
156
 
128
- define_feature <<-FEATURE
129
- Feature: Eat things when hungry
130
-
131
- Scenario Outline: Eat things
132
- Given <Things>
133
- And stuff:
134
- | foo |
135
- | bar |
136
-
137
- Examples: Good
138
- | Things |
139
- | Cucumber |
140
- | Whisky |
141
- Examples: Evil
142
- | Things |
143
- | Big Mac |
144
- FEATURE
145
-
146
- it { expect(@doc.to_s).to match /Eat things when hungry/ }
147
- it { expect(@doc.to_s).to match /Cucumber/ }
148
- it { expect(@doc.to_s).to match /Whisky/ }
149
- it { expect(@doc.to_s).to match /Big Mac/ }
150
- it { expect(@doc.to_s).not_to match /Things/ }
151
- it { expect(@doc.to_s).not_to match /Good|Evil/ }
152
- it { expect(@doc.to_s).not_to match /type="skipped"/}
153
- end
157
+ describe "scenario with skipped test in junit report" do
158
+ define_feature <<-FEATURE
159
+ Feature: junit report with skipped test
154
160
 
155
- describe "scenario with skipped test in junit report" do
156
- define_feature <<-FEATURE
157
- Feature: junit report with skipped test
161
+ Scenario Outline: skip a test and junit report of the same
162
+ Given a <skip> scenario
158
163
 
159
- Scenario Outline: skip a test and junit report of the same
160
- Given a <skip> scenario
164
+ Examples:
165
+ | skip |
166
+ | undefined |
167
+ | still undefined |
168
+ FEATURE
161
169
 
162
- Examples:
163
- | skip |
164
- | undefined |
165
- | still undefined |
166
- FEATURE
170
+ it { expect(@doc.to_s).to match /skipped="2"/}
171
+ end
167
172
 
168
- it { expect(@doc.to_s).to match /skipped="2"/}
173
+ describe "with a regular data table scenario" do
174
+ define_steps do
175
+ Given(/the following items on a shortlist/) { |table| }
176
+ When(/I go.*/) { }
177
+ Then(/I should have visited at least/) { |table| }
178
+ end
179
+
180
+ define_feature <<-FEATURE
181
+ Feature: Shortlist
182
+
183
+ Scenario: Procure items
184
+ Given the following items on a shortlist:
185
+ | item |
186
+ | milk |
187
+ | cookies |
188
+ When I get some..
189
+ Then I'll eat 'em
190
+
191
+ FEATURE
192
+ # these type of tables shouldn't crash (or generate test cases)
193
+ it { expect(@doc.to_s).not_to match /milk/ }
194
+ it { expect(@doc.to_s).not_to match /cookies/ }
195
+ end
196
+ end
169
197
  end
198
+
199
+ context "In --expand mode" do
200
+ let(:runtime) { Runtime.new({:expand => true}) }
201
+ before(:each) do
202
+ allow(File).to receive(:directory?) { true }
203
+ @formatter = TestDoubleJunitFormatter.new(runtime, '', {:expand => true})
204
+ end
170
205
 
171
- describe "with a regular data table scenario" do
172
- define_steps do
173
- Given(/the following items on a shortlist/) { |table| }
174
- When(/I go.*/) { }
175
- Then(/I should have visited at least/) { |table| }
206
+ after(:each) do
207
+ $stdout = STDOUT
176
208
  end
177
209
 
178
- define_feature <<-FEATURE
179
- Feature: Shortlist
180
-
181
- Scenario: Procure items
182
- Given the following items on a shortlist:
183
- | item |
184
- | milk |
185
- | cookies |
186
- When I get some..
187
- Then I'll eat 'em
188
-
189
- FEATURE
190
- # these type of tables shouldn't crash (or generate test cases)
191
- it { expect(@doc.to_s).not_to match /milk/ }
192
- it { expect(@doc.to_s).not_to match /cookies/ }
210
+ describe "given a single feature" do
211
+ before(:each) do
212
+ run_defined_feature
213
+ @doc = Nokogiri.XML(@formatter.written_files.values.first)
214
+ end
215
+
216
+ describe "with a scenario outline table" do
217
+ define_steps do
218
+ Given(/.*/) { }
219
+ end
220
+
221
+ define_feature <<-FEATURE
222
+ Feature: Eat things when hungry
223
+
224
+ Scenario Outline: Eat things
225
+ Given <Things>
226
+ And stuff:
227
+ | foo |
228
+ | bar |
229
+
230
+ Examples: Good
231
+ | Things |
232
+ | Cucumber |
233
+ | Whisky |
234
+ Examples: Evil
235
+ | Things |
236
+ | Big Mac |
237
+ FEATURE
238
+
239
+ it { expect(@doc.to_s).to match /Eat things when hungry/ }
240
+ it { expect(@doc.to_s).to match /Cucumber/ }
241
+ it { expect(@doc.to_s).to match /Whisky/ }
242
+ it { expect(@doc.to_s).to match /Big Mac/ }
243
+ it { expect(@doc.to_s).not_to match /Things/ }
244
+ it { expect(@doc.to_s).not_to match /Good|Evil/ }
245
+ it { expect(@doc.to_s).not_to match /type="skipped"/}
246
+ end
247
+ end
248
+
193
249
  end
194
250
  end
195
251
  end