rspec 1.1.12 → 1.2.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.autotest +2 -1
- data/.document +7 -0
- data/History.txt +58 -0
- data/License.txt +1 -1
- data/Manifest.txt +45 -82
- data/README.txt +3 -6
- data/Rakefile +33 -13
- data/Ruby1.9.markdown +32 -0
- data/TODO.txt +10 -4
- data/Upgrade.markdown +63 -0
- data/bin/spec +1 -1
- data/cucumber.yml +3 -0
- data/examples/failing/{failing_autogenerated_docstrings_example.rb → failing_implicit_docstrings_example.rb} +0 -0
- data/examples/failing/pending_example.rb +9 -0
- data/examples/failing/spec_helper.rb +1 -1
- data/examples/passing/{custom_expectation_matchers.rb → custom_matchers.rb} +0 -0
- data/examples/passing/filtered_formatter.rb +18 -0
- data/examples/passing/filtered_formatter_example.rb +31 -0
- data/examples/passing/implicit_docstrings_example.rb +18 -0
- data/examples/passing/spec_helper.rb +1 -1
- data/examples/ruby1.9.compatibility/access_to_constants_spec.rb +17 -18
- data/features/before_and_after_blocks/before_and_after_blocks.feature +4 -4
- data/features/example_groups/example_group_with_should_methods.feature +1 -1
- data/features/example_groups/{autogenerated_docstrings.feature → implicit_docstrings.feature} +7 -9
- data/features/example_groups/nested_groups.feature +1 -1
- data/features/heckle/heckle.feature +56 -0
- data/features/interop/examples_and_tests_together.feature +1 -1
- data/features/interop/test_but_not_test_unit.feature +1 -1
- data/features/interop/test_case_with_should_methods.feature +1 -1
- data/features/matchers/create_matcher.feature +115 -0
- data/features/mock_framework_integration/use_flexmock.feature +22 -4
- data/features/mock_framework_integration/use_mocha.feature +27 -0
- data/features/mock_framework_integration/use_rr.feature +27 -0
- data/features/mocks/mix_stubs_and_mocks.feature +22 -0
- data/features/pending/pending_examples.feature +81 -0
- data/features/step_definitions/running_rspec.rb +5 -3
- data/features/support/env.rb +1 -1
- data/features/support/matchers/smart_match.rb +2 -2
- data/lib/autotest/rspec.rb +1 -1
- data/lib/spec.rb +1 -1
- data/lib/{adapters → spec/adapters}/mock_frameworks/flexmock.rb +0 -0
- data/lib/{adapters → spec/adapters}/mock_frameworks/mocha.rb +0 -0
- data/lib/{adapters → spec/adapters}/mock_frameworks/rr.rb +0 -0
- data/lib/{adapters → spec/adapters}/mock_frameworks/rspec.rb +0 -1
- data/lib/spec/autorun.rb +3 -0
- data/lib/spec/dsl.rb +3 -1
- data/lib/spec/dsl/matchers.rb +13 -0
- data/lib/spec/example.rb +4 -0
- data/lib/spec/example/before_and_after_hooks.rb +5 -20
- data/lib/spec/example/errors.rb +3 -3
- data/lib/spec/example/example_description.rb +15 -0
- data/lib/spec/example/example_group.rb +0 -15
- data/lib/spec/example/example_group_factory.rb +34 -46
- data/lib/spec/example/example_group_hierarchy.rb +53 -0
- data/lib/spec/example/example_group_methods.rb +101 -211
- data/lib/spec/example/example_methods.rb +61 -81
- data/lib/spec/example/module_reopening_fix.rb +23 -1
- data/lib/spec/example/pending.rb +3 -2
- data/lib/spec/example/predicate_matchers.rb +47 -0
- data/lib/spec/example/subject.rb +91 -0
- data/lib/spec/expectations.rb +1 -1
- data/lib/spec/expectations/differs/default.rb +0 -1
- data/lib/spec/expectations/extensions.rb +0 -1
- data/lib/spec/expectations/handler.rb +13 -6
- data/lib/spec/interop/test.rb +5 -0
- data/lib/spec/interop/test/unit/testcase.rb +5 -22
- data/lib/spec/matchers.rb +22 -8
- data/lib/spec/matchers/be.rb +4 -9
- data/lib/spec/matchers/be_close.rb +20 -5
- data/lib/spec/matchers/be_instance_of.rb +45 -0
- data/lib/spec/matchers/be_kind_of.rb +45 -0
- data/lib/spec/matchers/change.rb +8 -6
- data/lib/spec/matchers/compatibility.rb +14 -0
- data/lib/spec/matchers/eql.rb +24 -6
- data/lib/spec/matchers/equal.rb +24 -6
- data/lib/spec/matchers/exist.rb +21 -5
- data/lib/spec/matchers/extensions/instance_exec.rb +25 -0
- data/lib/spec/matchers/generated_descriptions.rb +2 -2
- data/lib/spec/matchers/has.rb +28 -11
- data/lib/spec/matchers/have.rb +2 -2
- data/lib/spec/matchers/include.rb +2 -2
- data/lib/spec/matchers/match.rb +25 -7
- data/lib/spec/matchers/match_array.rb +3 -3
- data/lib/spec/matchers/matcher.rb +51 -0
- data/lib/spec/matchers/method_missing.rb +2 -2
- data/lib/spec/matchers/operator_matcher.rb +12 -5
- data/lib/spec/matchers/raise_error.rb +3 -3
- data/lib/spec/matchers/respond_to.rb +3 -3
- data/lib/spec/matchers/satisfy.rb +7 -7
- data/lib/spec/matchers/throw_symbol.rb +3 -5
- data/lib/spec/mocks.rb +3 -3
- data/lib/spec/mocks/argument_expectation.rb +15 -15
- data/lib/spec/mocks/{argument_constraints.rb → argument_matchers.rb} +19 -23
- data/lib/spec/mocks/error_generator.rb +5 -8
- data/lib/spec/mocks/framework.rb +1 -1
- data/lib/spec/mocks/message_expectation.rb +5 -13
- data/lib/spec/mocks/mock.rb +4 -5
- data/lib/spec/mocks/proxy.rb +9 -5
- data/lib/spec/mocks/spec_methods.rb +10 -1
- data/lib/spec/rake/spectask.rb +0 -1
- data/lib/spec/runner.rb +6 -28
- data/lib/spec/runner/configuration.rb +3 -3
- data/lib/spec/runner/drb_command_line.rb +2 -1
- data/lib/spec/runner/example_group_runner.rb +3 -2
- data/lib/spec/runner/formatter/base_text_formatter.rb +34 -19
- data/lib/spec/runner/formatter/failing_example_groups_formatter.rb +3 -5
- data/lib/spec/runner/formatter/html_formatter.rb +2 -3
- data/lib/spec/runner/formatter/nested_text_formatter.rb +7 -25
- data/lib/spec/runner/formatter/progress_bar_formatter.rb +1 -1
- data/lib/spec/runner/formatter/snippet_extractor.rb +1 -1
- data/lib/spec/runner/formatter/specdoc_formatter.rb +1 -7
- data/lib/spec/runner/heckle_runner.rb +3 -6
- data/lib/spec/runner/heckle_runner_unsupported.rb +1 -1
- data/lib/spec/runner/option_parser.rb +19 -21
- data/lib/spec/runner/options.rb +32 -27
- data/lib/spec/runner/reporter.rb +8 -9
- data/lib/spec/test/unit.rb +10 -0
- data/lib/spec/version.rb +2 -2
- data/{features/support → resources}/helpers/cmdline.rb +2 -2
- data/resources/rake/verify_rcov.rake +1 -1
- data/resources/spec/example_group_with_should_methods.rb +1 -1
- data/resources/spec/simple_spec.rb +1 -1
- data/resources/test/spec_and_test_together.rb +2 -3
- data/resources/test/spec_including_test_but_not_unit.rb +1 -1
- data/resources/test/test_case_with_should_methods.rb +2 -3
- data/spec/autotest/autotest_helper.rb +0 -1
- data/spec/autotest/rspec_spec.rb +95 -98
- data/spec/spec/dsl/main_spec.rb +3 -3
- data/spec/spec/dsl/matchers_spec.rb +25 -0
- data/spec/spec/example/example_group_class_definition_spec.rb +14 -15
- data/spec/spec/example/example_group_factory_spec.rb +31 -44
- data/spec/spec/example/example_group_methods_spec.rb +86 -52
- data/spec/spec/example/example_group_spec.rb +32 -79
- data/spec/spec/example/example_matcher_spec.rb +10 -10
- data/spec/spec/example/example_methods_spec.rb +108 -242
- data/spec/spec/example/nested_example_group_spec.rb +2 -2
- data/spec/spec/example/pending_module_spec.rb +66 -41
- data/spec/spec/example/shared_example_group_spec.rb +4 -4
- data/spec/spec/{matchers → expectations}/handler_spec.rb +52 -4
- data/spec/spec/interop/test/unit/resources/spec_that_fails.rb +2 -2
- data/spec/spec/interop/test/unit/resources/spec_that_passes.rb +2 -2
- data/spec/spec/interop/test/unit/resources/spec_with_errors.rb +2 -2
- data/spec/spec/interop/test/unit/resources/spec_with_options_hash.rb +2 -2
- data/spec/spec/interop/test/unit/resources/test_case_that_fails.rb +2 -2
- data/spec/spec/interop/test/unit/resources/test_case_that_passes.rb +2 -2
- data/spec/spec/interop/test/unit/resources/test_case_with_errors.rb +2 -2
- data/spec/spec/interop/test/unit/resources/testsuite_adapter_spec_with_test_unit.rb +2 -2
- data/spec/spec/interop/test/unit/testcase_spec.rb +0 -4
- data/spec/spec/matchers/be_close_spec.rb +1 -1
- data/spec/spec/matchers/be_instance_of_spec.rb +29 -0
- data/spec/spec/matchers/be_kind_of_spec.rb +29 -0
- data/spec/spec/matchers/change_spec.rb +20 -0
- data/spec/spec/matchers/compatibility_spec.rb +34 -0
- data/spec/spec/matchers/description_generation_spec.rb +0 -12
- data/spec/spec/matchers/eql_spec.rb +2 -2
- data/spec/spec/matchers/equal_spec.rb +2 -2
- data/spec/spec/matchers/exist_spec.rb +8 -4
- data/spec/spec/matchers/have_spec.rb +4 -4
- data/spec/spec/matchers/match_spec.rb +2 -2
- data/spec/spec/matchers/matcher_methods_spec.rb +1 -1
- data/spec/spec/matchers/matcher_spec.rb +97 -0
- data/spec/spec/matchers/throw_symbol_spec.rb +8 -8
- data/spec/spec/mocks/{bug_report_496.rb → bug_report_496_spec.rb} +0 -0
- data/spec/spec/mocks/{failing_mock_argument_constraints_spec.rb → failing_argument_matchers_spec.rb} +2 -2
- data/spec/spec/mocks/hash_including_matcher_spec.rb +4 -4
- data/spec/spec/mocks/hash_not_including_matcher_spec.rb +3 -3
- data/spec/spec/mocks/mock_spec.rb +27 -2
- data/spec/spec/mocks/nil_expectation_warning_spec.rb +1 -1
- data/spec/spec/mocks/partial_mock_spec.rb +18 -3
- data/spec/spec/mocks/{passing_mock_argument_constraints_spec.rb → passing_argument_matchers_spec.rb} +6 -6
- data/spec/spec/mocks/stubbed_message_expectations_spec.rb +13 -1
- data/spec/spec/package/bin_spec_spec.rb +2 -2
- data/spec/spec/runner/configuration_spec.rb +12 -12
- data/spec/spec/runner/drb_command_line_spec.rb +71 -73
- data/spec/spec/runner/formatter/base_text_formatter_spec.rb +82 -1
- data/spec/spec/runner/formatter/failing_example_groups_formatter_spec.rb +8 -8
- data/spec/spec/runner/formatter/failing_examples_formatter_spec.rb +4 -4
- data/spec/spec/runner/formatter/html_formatted-1.8.6.html +8 -8
- data/spec/spec/runner/formatter/html_formatted-1.8.7.html +38 -26
- data/spec/spec/runner/formatter/html_formatted-1.9.1.html +61 -53
- data/spec/spec/runner/formatter/html_formatter_spec.rb +100 -48
- data/spec/spec/runner/formatter/nested_text_formatter_spec.rb +20 -34
- data/spec/spec/runner/formatter/profile_formatter_spec.rb +2 -1
- data/spec/spec/runner/formatter/progress_bar_formatter_spec.rb +9 -6
- data/spec/spec/runner/formatter/specdoc_formatter_spec.rb +6 -6
- data/spec/spec/runner/formatter/text_mate_formatted-1.8.6.html +20 -20
- data/spec/spec/runner/formatter/text_mate_formatted-1.8.7.html +38 -26
- data/spec/spec/runner/formatter/text_mate_formatted-1.9.1.html +55 -47
- data/spec/spec/runner/formatter/{spec_mate_formatter_spec.rb → text_mate_formatter_spec.rb} +11 -9
- data/spec/spec/runner/heckle_runner_spec.rb +1 -1
- data/spec/spec/runner/heckler_spec.rb +1 -1
- data/spec/spec/runner/option_parser_spec.rb +28 -11
- data/spec/spec/runner/options_spec.rb +34 -0
- data/spec/spec/runner/reporter_spec.rb +66 -62
- data/spec/spec/runner/resources/utf8_encoded.rb +1 -0
- data/spec/spec/runner/spec_drb.opts +1 -0
- data/spec/spec/runner_spec.rb +7 -5
- data/spec/spec_helper.rb +24 -2
- metadata +49 -90
- data/examples/passing/autogenerated_docstrings_example.rb +0 -25
- data/examples/passing/before_and_after_example.rb +0 -40
- data/examples/passing/behave_as_example.rb +0 -45
- data/examples/passing/legacy_spec.rb +0 -11
- data/examples/passing/priority.txt +0 -1
- data/features/support/helpers/story_helper.rb +0 -16
- data/lib/spec/expectations/extensions/string_and_symbol.rb +0 -17
- data/lib/spec/runner/formatter/story/html_formatter.rb +0 -174
- data/lib/spec/runner/formatter/story/plain_text_formatter.rb +0 -194
- data/lib/spec/runner/formatter/story/progress_bar_formatter.rb +0 -42
- data/lib/spec/story.rb +0 -10
- data/lib/spec/story/extensions.rb +0 -3
- data/lib/spec/story/extensions/main.rb +0 -86
- data/lib/spec/story/extensions/regexp.rb +0 -9
- data/lib/spec/story/extensions/string.rb +0 -9
- data/lib/spec/story/given_scenario.rb +0 -14
- data/lib/spec/story/runner.rb +0 -57
- data/lib/spec/story/runner/plain_text_story_runner.rb +0 -48
- data/lib/spec/story/runner/scenario_collector.rb +0 -18
- data/lib/spec/story/runner/scenario_runner.rb +0 -54
- data/lib/spec/story/runner/story_mediator.rb +0 -137
- data/lib/spec/story/runner/story_parser.rb +0 -247
- data/lib/spec/story/runner/story_runner.rb +0 -74
- data/lib/spec/story/scenario.rb +0 -14
- data/lib/spec/story/step.rb +0 -70
- data/lib/spec/story/step_group.rb +0 -89
- data/lib/spec/story/step_mother.rb +0 -38
- data/lib/spec/story/story.rb +0 -39
- data/lib/spec/story/world.rb +0 -124
- data/resources/spec/spec_with_flexmock.rb +0 -19
- data/rspec.gemspec +0 -32
- data/spec/spec/matchers/mock_constraint_matchers_spec.rb +0 -24
- data/spec/spec/runner/formatter/story/html_formatter_spec.rb +0 -135
- data/spec/spec/runner/formatter/story/plain_text_formatter_spec.rb +0 -600
- data/spec/spec/runner/formatter/story/progress_bar_formatter_spec.rb +0 -82
- data/spec/spec/spec_spec.rb +0 -21
- data/spec/spec/story/builders.rb +0 -46
- data/spec/spec/story/extensions/main_spec.rb +0 -161
- data/spec/spec/story/extensions_spec.rb +0 -14
- data/spec/spec/story/given_scenario_spec.rb +0 -27
- data/spec/spec/story/runner/plain_text_story_runner_spec.rb +0 -90
- data/spec/spec/story/runner/scenario_collector_spec.rb +0 -27
- data/spec/spec/story/runner/scenario_runner_spec.rb +0 -214
- data/spec/spec/story/runner/story_mediator_spec.rb +0 -143
- data/spec/spec/story/runner/story_parser_spec.rb +0 -401
- data/spec/spec/story/runner/story_runner_spec.rb +0 -294
- data/spec/spec/story/runner_spec.rb +0 -93
- data/spec/spec/story/scenario_spec.rb +0 -18
- data/spec/spec/story/step_group_spec.rb +0 -157
- data/spec/spec/story/step_mother_spec.rb +0 -84
- data/spec/spec/story/step_spec.rb +0 -272
- data/spec/spec/story/story_helper.rb +0 -2
- data/spec/spec/story/story_spec.rb +0 -84
- data/spec/spec/story/world_spec.rb +0 -423
- data/story_server/prototype/javascripts/builder.js +0 -136
- data/story_server/prototype/javascripts/controls.js +0 -972
- data/story_server/prototype/javascripts/dragdrop.js +0 -976
- data/story_server/prototype/javascripts/effects.js +0 -1117
- data/story_server/prototype/javascripts/prototype.js +0 -4140
- data/story_server/prototype/javascripts/rspec.js +0 -149
- data/story_server/prototype/javascripts/scriptaculous.js +0 -58
- data/story_server/prototype/javascripts/slider.js +0 -276
- data/story_server/prototype/javascripts/sound.js +0 -55
- data/story_server/prototype/javascripts/unittest.js +0 -568
- data/story_server/prototype/lib/server.rb +0 -24
- data/story_server/prototype/stories.html +0 -176
- data/story_server/prototype/stylesheets/rspec.css +0 -136
- data/story_server/prototype/stylesheets/test.css +0 -90
@@ -7,9 +7,7 @@ module Spec
|
|
7
7
|
|
8
8
|
module Foo
|
9
9
|
module Bar
|
10
|
-
def self.loaded
|
11
|
-
true
|
12
|
-
end
|
10
|
+
def self.loaded?; true; end
|
13
11
|
end
|
14
12
|
end
|
15
13
|
include Foo
|
@@ -18,11 +16,23 @@ module Spec
|
|
18
16
|
Bar.should be_loaded
|
19
17
|
end
|
20
18
|
|
21
|
-
@@
|
19
|
+
@@class_variable = "a class variable"
|
22
20
|
|
23
|
-
it "
|
24
|
-
|
21
|
+
it "can access class variables in examples in Ruby 1.8" do
|
22
|
+
with_ruby 1.8 do
|
23
|
+
@@class_variable.should == "a class variable"
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
it "can NOT access class variables in examples in Ruby 1.9" do
|
28
|
+
with_ruby 1.9 do
|
29
|
+
lambda do
|
30
|
+
@@class_variable.should == "a class variable"
|
31
|
+
end.should raise_error(NameError)
|
32
|
+
end
|
25
33
|
end
|
34
|
+
|
35
|
+
|
26
36
|
end
|
27
37
|
|
28
38
|
class ExampleClassVariablePollutionSpec < ExampleGroup
|
@@ -30,7 +40,7 @@ module Spec
|
|
30
40
|
|
31
41
|
it "should not retain class variables from other Example classes" do
|
32
42
|
proc do
|
33
|
-
@@
|
43
|
+
@@class_variable
|
34
44
|
end.should raise_error
|
35
45
|
end
|
36
46
|
end
|
@@ -74,7 +84,7 @@ module Spec
|
|
74
84
|
options.backtrace_tweaker = mock("backtrace_tweaker", :null_object => true)
|
75
85
|
@reporter = FakeReporter.new(options)
|
76
86
|
options.reporter = reporter
|
77
|
-
@example_group = Class.new(
|
87
|
+
@example_group = Class.new(ExampleGroupDouble) do
|
78
88
|
describe("example")
|
79
89
|
it "does nothing" do
|
80
90
|
end
|
@@ -89,7 +99,7 @@ module Spec
|
|
89
99
|
end
|
90
100
|
|
91
101
|
it "should not run when there are no examples" do
|
92
|
-
example_group = Class.new(
|
102
|
+
example_group = Class.new(ExampleGroupDouble) do
|
93
103
|
describe("Foobar")
|
94
104
|
end
|
95
105
|
example_group.examples.should be_empty
|
@@ -164,7 +174,7 @@ module Spec
|
|
164
174
|
describe "when specified_examples matches entire ExampleGroup" do
|
165
175
|
before do
|
166
176
|
examples_that_were_run = @examples_that_were_run
|
167
|
-
@example_group = Class.new(
|
177
|
+
@example_group = Class.new(ExampleGroupDouble) do
|
168
178
|
describe("the ExampleGroup")
|
169
179
|
it("should be run") do
|
170
180
|
examples_that_were_run << 'should be run'
|
@@ -186,7 +196,7 @@ module Spec
|
|
186
196
|
describe ExampleGroup, "#run when specified_examples matches only Example description" do
|
187
197
|
before do
|
188
198
|
examples_that_were_run = @examples_that_were_run
|
189
|
-
@example_group = Class.new(
|
199
|
+
@example_group = Class.new(ExampleGroupDouble) do
|
190
200
|
describe("example")
|
191
201
|
it("should be run") do
|
192
202
|
examples_that_were_run << 'should be run'
|
@@ -204,7 +214,7 @@ module Spec
|
|
204
214
|
describe ExampleGroup, "#run when specified_examples does not match an Example description" do
|
205
215
|
before do
|
206
216
|
examples_that_were_run = @examples_that_were_run
|
207
|
-
@example_group = Class.new(
|
217
|
+
@example_group = Class.new(ExampleGroupDouble) do
|
208
218
|
describe("example")
|
209
219
|
it("should be something else") do
|
210
220
|
examples_that_were_run << 'should be something else'
|
@@ -222,7 +232,7 @@ module Spec
|
|
222
232
|
describe ExampleGroup, "#run when specified_examples matches an Example description" do
|
223
233
|
before do
|
224
234
|
examples_that_were_run = @examples_that_were_run
|
225
|
-
@example_group = Class.new(
|
235
|
+
@example_group = Class.new(ExampleGroupDouble) do
|
226
236
|
describe("example")
|
227
237
|
it("should be run") do
|
228
238
|
examples_that_were_run << 'should be run'
|
@@ -234,22 +244,18 @@ module Spec
|
|
234
244
|
options.parse_example "should be run"
|
235
245
|
end
|
236
246
|
|
237
|
-
it "should run only the example
|
247
|
+
it "should run only the example" do
|
238
248
|
example_group.run(options)
|
239
249
|
examples_that_were_run.should == ["should be run"]
|
240
250
|
end
|
241
|
-
|
242
|
-
it "should run only the one example" do
|
243
|
-
example_group.run(options)
|
244
|
-
examples_that_were_run.should == ["should be run"] end
|
245
251
|
end
|
246
252
|
end
|
247
253
|
|
248
254
|
describe ExampleGroup, "#run with success" do
|
249
255
|
before do
|
250
|
-
@special_example_group = Class.new(
|
256
|
+
@special_example_group = Class.new(ExampleGroupDouble)
|
251
257
|
ExampleGroupFactory.register(:special, @special_example_group)
|
252
|
-
@not_special_example_group = Class.new(
|
258
|
+
@not_special_example_group = Class.new(ExampleGroupDouble)
|
253
259
|
ExampleGroupFactory.register(:not_special, @not_special_example_group)
|
254
260
|
end
|
255
261
|
|
@@ -317,7 +323,7 @@ module Spec
|
|
317
323
|
@special_example_group.before(:all) { fiddle << "Example.before(:all, :type => :special)" }
|
318
324
|
@special_example_group.prepend_before(:all) { fiddle << "Example.prepend_before(:all, :type => :special)" }
|
319
325
|
|
320
|
-
example_group = Class.new(
|
326
|
+
example_group = Class.new(ExampleGroupDouble) do
|
321
327
|
describe("I'm not special", :type => :not_special)
|
322
328
|
it "does nothing"
|
323
329
|
end
|
@@ -434,47 +440,6 @@ module Spec
|
|
434
440
|
example_group.included_modules.should_not include(mod3)
|
435
441
|
end
|
436
442
|
|
437
|
-
it "should include any predicate_matchers included using configuration" do
|
438
|
-
$included_predicate_matcher_found = false
|
439
|
-
Spec::Runner.configuration.predicate_matchers[:do_something] = :does_something?
|
440
|
-
example_group = Class.new(ExampleGroup) do
|
441
|
-
describe('example')
|
442
|
-
it "should respond to do_something" do
|
443
|
-
$included_predicate_matcher_found = respond_to?(:do_something)
|
444
|
-
end
|
445
|
-
end
|
446
|
-
example_group.run(options)
|
447
|
-
$included_predicate_matcher_found.should be(true)
|
448
|
-
end
|
449
|
-
|
450
|
-
it "should use a mock framework set up in config" do
|
451
|
-
mod = Module.new do
|
452
|
-
def self.included(mod)
|
453
|
-
$included_module = mod
|
454
|
-
end
|
455
|
-
|
456
|
-
def teardown_mocks_for_rspec
|
457
|
-
$torn_down = true
|
458
|
-
end
|
459
|
-
end
|
460
|
-
|
461
|
-
begin
|
462
|
-
$included_module = nil
|
463
|
-
$torn_down = true
|
464
|
-
Spec::Runner.configuration.mock_with mod
|
465
|
-
|
466
|
-
example_group = Class.new(ExampleGroup) do
|
467
|
-
describe('example')
|
468
|
-
it "does nothing"
|
469
|
-
end
|
470
|
-
example_group.run(options)
|
471
|
-
|
472
|
-
$included_module.should_not be_nil
|
473
|
-
$torn_down.should == true
|
474
|
-
ensure
|
475
|
-
Spec::Runner.configuration.mock_with :rspec
|
476
|
-
end
|
477
|
-
end
|
478
443
|
end
|
479
444
|
|
480
445
|
describe ExampleGroup, "#run with pending example that has a failing assertion" do
|
@@ -534,7 +499,7 @@ module Spec
|
|
534
499
|
end
|
535
500
|
|
536
501
|
it "should supply before(:all) as description" do
|
537
|
-
@reporter.should_receive(:
|
502
|
+
@reporter.should_receive(:example_failed) do |example, error|
|
538
503
|
example.description.should eql("before(:all)")
|
539
504
|
error.message.should eql("before(:all) failure")
|
540
505
|
end
|
@@ -647,28 +612,16 @@ module Spec
|
|
647
612
|
end
|
648
613
|
end
|
649
614
|
|
650
|
-
class ExampleSubclass < ExampleGroup
|
651
|
-
end
|
652
|
-
|
653
615
|
describe ExampleGroup, "subclasses" do
|
654
|
-
after do
|
655
|
-
ExampleGroupFactory.reset
|
656
|
-
end
|
657
|
-
|
658
616
|
it "should have access to the described_type" do
|
659
|
-
example_group = Class.new(
|
660
|
-
describe(Array)
|
661
|
-
end
|
617
|
+
example_group = Class.new(ExampleGroupDouble).describe(Array)
|
662
618
|
example_group.__send__(:described_type).should == Array
|
663
619
|
end
|
664
620
|
|
665
621
|
it "should concat descriptions when nested" do
|
666
|
-
example_group = Class.new(
|
667
|
-
|
668
|
-
|
669
|
-
end
|
670
|
-
end
|
671
|
-
$nested_group.description.to_s.should == "Array when empty"
|
622
|
+
example_group = Class.new(ExampleGroupDouble).describe(Array)
|
623
|
+
nested_group = example_group.describe("when empty") do; end
|
624
|
+
nested_group.description.to_s.should == "Array when empty"
|
672
625
|
end
|
673
626
|
end
|
674
627
|
end
|
@@ -3,52 +3,52 @@ require File.dirname(__FILE__) + '/../../spec_helper.rb'
|
|
3
3
|
module Spec
|
4
4
|
module Example
|
5
5
|
describe ExampleMatcher, "#matches?" do
|
6
|
-
def
|
6
|
+
def match_examples(examples)
|
7
7
|
simple_matcher do |actual, matcher|
|
8
8
|
matcher.failure_message = "expected matcher.matches?(#{description.inspect}) to return true, got false"
|
9
9
|
matcher.negative_failure_message = "expected matcher.matches?(#{description.inspect}) to return false, got true"
|
10
|
-
actual.matches?(
|
10
|
+
actual.matches?(examples)
|
11
11
|
end
|
12
12
|
end
|
13
13
|
|
14
14
|
it "should match correct example_group and example" do
|
15
15
|
matcher = ExampleMatcher.new("example_group", "example")
|
16
|
-
matcher.should
|
16
|
+
matcher.should match_examples(["example_group example"])
|
17
17
|
end
|
18
18
|
|
19
19
|
it "should not match wrong example" do
|
20
20
|
matcher = ExampleMatcher.new("example_group", "other example")
|
21
|
-
matcher.should_not
|
21
|
+
matcher.should_not match_examples(["example_group example"])
|
22
22
|
end
|
23
23
|
|
24
24
|
it "should not match wrong example_group" do
|
25
25
|
matcher = ExampleMatcher.new("other example_group", "example")
|
26
|
-
matcher.should_not
|
26
|
+
matcher.should_not match_examples(["example_group example"])
|
27
27
|
end
|
28
28
|
|
29
29
|
it "should match example only" do
|
30
30
|
matcher = ExampleMatcher.new("example_group", "example")
|
31
|
-
matcher.should
|
31
|
+
matcher.should match_examples(["example"])
|
32
32
|
end
|
33
33
|
|
34
34
|
it "should match example_group only" do
|
35
35
|
matcher = ExampleMatcher.new("example_group", "example")
|
36
|
-
matcher.should
|
36
|
+
matcher.should match_examples(["example_group"])
|
37
37
|
end
|
38
38
|
|
39
39
|
it "should match example_group ending with before(:all)" do
|
40
40
|
matcher = ExampleMatcher.new("example_group", "example")
|
41
|
-
matcher.should
|
41
|
+
matcher.should match_examples(["example_group before(:all)"])
|
42
42
|
end
|
43
43
|
|
44
44
|
it "should escape regexp chars" do
|
45
45
|
matcher = ExampleMatcher.new("(con|text)", "[example]")
|
46
|
-
matcher.should_not
|
46
|
+
matcher.should_not match_examples(["con p"])
|
47
47
|
end
|
48
48
|
|
49
49
|
it "should match when example_group is modularized" do
|
50
50
|
matcher = ExampleMatcher.new("MyModule::MyClass", "example")
|
51
|
-
matcher.should
|
51
|
+
matcher.should match_examples(["MyClass example"])
|
52
52
|
end
|
53
53
|
end
|
54
54
|
|
@@ -1,288 +1,154 @@
|
|
1
1
|
require File.dirname(__FILE__) + '/../../spec_helper'
|
2
2
|
|
3
|
+
class Thing
|
4
|
+
attr_reader :arg
|
5
|
+
def initialize(arg=nil)
|
6
|
+
@arg = arg || :default
|
7
|
+
end
|
8
|
+
def ==(other)
|
9
|
+
@arg == other.arg
|
10
|
+
end
|
11
|
+
def eql?(other)
|
12
|
+
@arg == other.arg
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
3
16
|
module Spec
|
4
17
|
module Example
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
module ExampleMethods
|
9
|
-
include ModuleThatIsReopened
|
10
|
-
end
|
18
|
+
describe ExampleMethods do
|
19
|
+
module ModuleThatIsReopened; end
|
11
20
|
|
12
|
-
|
13
|
-
|
21
|
+
module Spec::Example::ExampleMethods
|
22
|
+
include ModuleThatIsReopened
|
14
23
|
end
|
15
|
-
end
|
16
24
|
|
17
|
-
|
25
|
+
module ModuleThatIsReopened
|
26
|
+
def module_that_is_reopened_method; end
|
27
|
+
end
|
28
|
+
|
18
29
|
describe "with an included module that is reopened" do
|
19
30
|
it "should have repoened methods" do
|
20
31
|
method(:module_that_is_reopened_method).should_not be_nil
|
21
32
|
end
|
22
33
|
end
|
23
34
|
|
24
|
-
describe "lifecycle" do
|
25
|
-
with_sandboxed_options do
|
26
|
-
with_sandboxed_config do
|
27
|
-
before do
|
28
|
-
@options.formatters << mock("formatter", :null_object => true)
|
29
|
-
@options.backtrace_tweaker = mock("backtrace_tweaker", :null_object => true)
|
30
|
-
@reporter = FakeReporter.new(@options)
|
31
|
-
@options.reporter = @reporter
|
32
|
-
|
33
|
-
ExampleGroup.before_all_parts.should == []
|
34
|
-
ExampleGroup.before_each_parts.should == []
|
35
|
-
ExampleGroup.after_each_parts.should == []
|
36
|
-
ExampleGroup.after_all_parts.should == []
|
37
|
-
def ExampleGroup.count
|
38
|
-
@count ||= 0
|
39
|
-
@count = @count + 1
|
40
|
-
@count
|
41
|
-
end
|
42
|
-
end
|
43
|
-
end
|
44
|
-
|
45
|
-
after do
|
46
|
-
ExampleGroup.instance_variable_set("@before_all_parts", [])
|
47
|
-
ExampleGroup.instance_variable_set("@before_each_parts", [])
|
48
|
-
ExampleGroup.instance_variable_set("@after_each_parts", [])
|
49
|
-
ExampleGroup.instance_variable_set("@after_all_parts", [])
|
50
|
-
end
|
51
|
-
|
52
|
-
describe "eval_block" do
|
53
|
-
before(:each) do
|
54
|
-
@example_group = Class.new(ExampleGroup)
|
55
|
-
end
|
56
|
-
|
57
|
-
describe "with a given description" do
|
58
|
-
it "should provide the given description" do
|
59
|
-
@example = @example_group.it("given description") { 2.should == 2 }
|
60
|
-
@example.eval_block
|
61
|
-
@example.description.should == "given description"
|
62
|
-
end
|
63
|
-
end
|
64
|
-
|
65
|
-
describe "with no given description" do
|
66
|
-
it "should provide the generated description" do
|
67
|
-
@example = @example_group.it { 2.should == 2 }
|
68
|
-
@example.eval_block
|
69
|
-
@example.description.should == "should == 2"
|
70
|
-
end
|
71
|
-
end
|
72
|
-
|
73
|
-
describe "with no implementation" do
|
74
|
-
it "should raise an NotYetImplementedError" do
|
75
|
-
lambda {
|
76
|
-
@example = @example_group.it
|
77
|
-
@example.eval_block
|
78
|
-
}.should raise_error(Spec::Example::NotYetImplementedError, "Not Yet Implemented")
|
79
|
-
end
|
80
|
-
|
81
|
-
def extract_error(&blk)
|
82
|
-
begin
|
83
|
-
blk.call
|
84
|
-
rescue Exception => e
|
85
|
-
return e
|
86
|
-
end
|
87
|
-
|
88
|
-
nil
|
89
|
-
end
|
90
|
-
|
91
|
-
it "should use the proper file and line number for the NotYetImplementedError" do
|
92
|
-
file = __FILE__
|
93
|
-
line_number = __LINE__ + 3
|
94
|
-
|
95
|
-
error = extract_error do
|
96
|
-
@example = @example_group.it
|
97
|
-
@example.eval_block
|
98
|
-
end
|
99
|
-
|
100
|
-
error.pending_caller.should =~ /#{file}:#{line_number}/
|
101
|
-
end
|
102
|
-
end
|
103
|
-
end
|
104
|
-
end
|
105
|
-
end
|
106
|
-
|
107
35
|
describe "#backtrace" do
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
example "of something" do; end
|
112
|
-
end
|
113
|
-
|
114
|
-
example = example_group.examples.first
|
115
|
-
example.backtrace.join("\n").should include("#{__FILE__}:#{__LINE__-4}")
|
116
|
-
end
|
36
|
+
it "returns the backtrace from where the example was defined" do
|
37
|
+
example = ExampleGroup.dup.new "name"
|
38
|
+
example.backtrace.join("\n").should include("#{__FILE__}:#{__LINE__-1}")
|
117
39
|
end
|
118
40
|
end
|
119
41
|
|
120
42
|
describe "#implementation_backtrace (deprecated)" do
|
121
|
-
|
122
|
-
|
123
|
-
Kernel.stub!(:warn)
|
124
|
-
end
|
125
|
-
|
126
|
-
it "sends a deprecation warning" do
|
127
|
-
example_group = Class.new(ExampleGroup) {}
|
128
|
-
example = example_group.example("") {}
|
129
|
-
Kernel.should_receive(:warn).with(/#implementation_backtrace.*deprecated.*#backtrace instead/m)
|
130
|
-
example.implementation_backtrace
|
131
|
-
end
|
132
|
-
|
133
|
-
it "returns the backtrace from where the example was defined" do
|
134
|
-
example_group = Class.new(ExampleGroup) do
|
135
|
-
example "of something" do; end
|
136
|
-
end
|
137
|
-
|
138
|
-
example = example_group.examples.first
|
139
|
-
example.backtrace.join("\n").should include("#{__FILE__}:#{__LINE__-4}")
|
140
|
-
end
|
43
|
+
before(:each) do
|
44
|
+
Kernel.stub!(:warn)
|
141
45
|
end
|
142
|
-
end
|
143
46
|
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
end
|
149
|
-
end
|
150
|
-
example = example_group.examples.first
|
151
|
-
example.full_description.should == "An ExampleGroup should do something"
|
47
|
+
it "sends a deprecation warning" do
|
48
|
+
Kernel.should_receive(:warn).with(/#implementation_backtrace.*deprecated.*#backtrace instead/m)
|
49
|
+
example = ExampleGroup.dup.new "name"
|
50
|
+
example.implementation_backtrace
|
152
51
|
end
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
it "should return an instance variable named after the described type" do
|
158
|
-
example_group = Class.new(ExampleGroup).describe(Array) do
|
159
|
-
example {}
|
160
|
-
end
|
161
|
-
example = example_group.examples.first
|
162
|
-
example.subject.should == []
|
163
|
-
end
|
164
|
-
|
165
|
-
it "should not barf on a module (as opposed to a class)" do
|
166
|
-
example_group = Class.new(ExampleGroup).describe(ObjectSpace) do
|
167
|
-
example {}
|
168
|
-
end
|
169
|
-
example_group.examples.first.subject.should be_nil
|
170
|
-
end
|
171
|
-
|
172
|
-
it "should not barf on a string" do
|
173
|
-
example_group = Class.new(ExampleGroup).describe('foo') do
|
174
|
-
example {}
|
175
|
-
end
|
176
|
-
example_group.examples.first.subject.should be_nil
|
177
|
-
end
|
178
|
-
|
179
|
-
it "should interact with the same scope as the before block" do
|
180
|
-
example_group = Class.new(ExampleGroup) do
|
181
|
-
subject { @foo = 'foo'}
|
182
|
-
example { should == @foo}
|
183
|
-
it { should == 'foo'}
|
184
|
-
end
|
185
|
-
example_group.run(options).should be_true
|
186
|
-
end
|
52
|
+
|
53
|
+
it "returns the backtrace from where the example was defined" do
|
54
|
+
example = ExampleGroup.dup.new "name"
|
55
|
+
example.implementation_backtrace.join("\n").should include("#{__FILE__}:#{__LINE__-1}")
|
187
56
|
end
|
188
57
|
end
|
189
58
|
|
190
|
-
describe "#
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
true
|
195
|
-
end
|
196
|
-
end
|
197
|
-
|
198
|
-
describe "in an ExampleGroup with the ivar defined in before" do
|
199
|
-
attr_reader :example, :success
|
59
|
+
describe "#subject" do
|
60
|
+
before(:each) do
|
61
|
+
@example_group = ExampleGroupDouble
|
62
|
+
end
|
200
63
|
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
|
64
|
+
it "should return an instance of the described class" do
|
65
|
+
group = Class.new(ExampleGroupDouble).describe(Array)
|
66
|
+
example = group.new("")
|
67
|
+
example.subject.should == []
|
68
|
+
end
|
69
|
+
|
70
|
+
it "should return a Module" do
|
71
|
+
group = Class.new(ExampleGroupDouble).describe(Enumerable)
|
72
|
+
example = group.new("")
|
73
|
+
example.subject.should == Enumerable
|
74
|
+
end
|
209
75
|
|
210
|
-
|
211
|
-
|
212
|
-
|
76
|
+
it "should return a string" do
|
77
|
+
group = Class.new(ExampleGroupDouble).describe('foo')
|
78
|
+
example = group.new("")
|
79
|
+
example.subject.should == 'foo'
|
80
|
+
end
|
213
81
|
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
|
82
|
+
it "should return a number" do
|
83
|
+
group = Class.new(ExampleGroupDouble).describe(15)
|
84
|
+
example = group.new("")
|
85
|
+
example.subject.should == 15
|
86
|
+
end
|
87
|
+
end
|
218
88
|
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
|
224
|
-
|
225
|
-
|
226
|
-
|
227
|
-
|
228
|
-
|
229
|
-
|
230
|
-
|
231
|
-
describe "in an ExampleGroup using an implicit ivar" do
|
232
|
-
it "should create an example using the description from the matcher" do
|
233
|
-
example_group = describe(Thing, "3") do
|
234
|
-
it { should == Thing.new }
|
235
|
-
end
|
236
|
-
example = example_group.examples.first
|
237
|
-
success = example_group.run(options)
|
238
|
-
example.description.should =~ /should == #<Spec::Example::Thing/
|
239
|
-
success.should be_true
|
240
|
-
end
|
89
|
+
describe "#should" do
|
90
|
+
before(:each) do
|
91
|
+
@example_group = Class.new(ExampleGroupDouble)
|
92
|
+
@options = ::Spec::Runner::Options.new(StringIO.new, StringIO.new)
|
93
|
+
end
|
94
|
+
|
95
|
+
context "in an ExampleGroup with an implicit subject" do
|
96
|
+
it "delegates matcher to the implied subject" do
|
97
|
+
@example_group.describe(::Thing)
|
98
|
+
@example_group.example { should == ::Thing.new(:default) }
|
99
|
+
@example_group.example { should eql(::Thing.new(:default)) }
|
100
|
+
@example_group.run(@options).should be_true
|
241
101
|
end
|
242
|
-
|
243
|
-
|
244
|
-
|
102
|
+
end
|
103
|
+
|
104
|
+
context "in an ExampleGroup using an explicit subject" do
|
105
|
+
it "delegates matcher to the declared subject" do
|
106
|
+
@example_group.describe(::Thing)
|
107
|
+
@example_group.subject { ::Thing.new(:other) }
|
108
|
+
@example_group.example { should == ::Thing.new(:other) }
|
109
|
+
@example_group.example { should eql(::Thing.new(:other)) }
|
110
|
+
@example_group.run(@options).should be_true
|
245
111
|
end
|
246
|
-
|
247
112
|
end
|
248
113
|
end
|
249
114
|
|
250
115
|
describe "#should_not" do
|
251
|
-
|
252
|
-
|
253
|
-
|
254
|
-
|
255
|
-
before do
|
256
|
-
@example_group = Class.new(ExampleGroup) do
|
257
|
-
def subject; @actual; end
|
258
|
-
before(:each) { @actual = 'expected' }
|
259
|
-
it { should_not eql('unexpected') }
|
260
|
-
end
|
261
|
-
@example = @example_group.examples.first
|
262
|
-
|
263
|
-
@success = example_group.run(options)
|
264
|
-
end
|
265
|
-
|
266
|
-
it "should create an example using the description from the matcher" do
|
267
|
-
example.description.should == 'should not eql "unexpected"'
|
268
|
-
end
|
116
|
+
before(:each) do
|
117
|
+
@example_group = Class.new(ExampleGroupDouble)
|
118
|
+
end
|
269
119
|
|
270
|
-
|
271
|
-
|
120
|
+
context "in an ExampleGroup with an implicit subject" do
|
121
|
+
it "delegates matcher to the implied subject" do
|
122
|
+
@example_group.describe(::Thing)
|
123
|
+
@example_group.example { should_not == ::Thing.new(:other) }
|
124
|
+
@example_group.example { should_not eql(::Thing.new(:other)) }
|
125
|
+
@example_group.run(::Spec::Runner::Options.new(StringIO.new, StringIO.new)).should be_true
|
272
126
|
end
|
273
|
-
|
274
|
-
|
275
|
-
|
127
|
+
end
|
128
|
+
|
129
|
+
context "in an ExampleGroup using an explicit subject" do
|
130
|
+
it "delegates matcher to the declared subject" do
|
131
|
+
@example_group.describe(::Thing)
|
132
|
+
@example_group.subject { ::Thing.new(:other) }
|
133
|
+
@example_group.example { should_not == ::Thing.new(:default) }
|
134
|
+
@example_group.example { should_not eql(::Thing.new(:default)) }
|
135
|
+
@example_group.run(::Spec::Runner::Options.new(StringIO.new, StringIO.new)).should be_true
|
276
136
|
end
|
277
|
-
|
278
137
|
end
|
279
138
|
end
|
280
139
|
end
|
281
140
|
|
282
141
|
describe "#options" do
|
283
142
|
it "should expose the options hash" do
|
284
|
-
|
285
|
-
example
|
143
|
+
example = ExampleGroupDouble.new "name", :this => 'that' do; end
|
144
|
+
example.options[:this].should == 'that'
|
145
|
+
end
|
146
|
+
end
|
147
|
+
|
148
|
+
describe "#set_instance_variables_from_hash" do
|
149
|
+
it "preserves the options" do
|
150
|
+
example = ExampleGroupDouble.new "name", :this => 'that' do; end
|
151
|
+
example.set_instance_variables_from_hash({:@_options => {}})
|
286
152
|
example.options[:this].should == 'that'
|
287
153
|
end
|
288
154
|
end
|