dchelimsky-rspec 1.1.11 → 1.1.11.1
Sign up to get free protection for your applications and to get access to all the features.
- data/.autotest +4 -0
- data/History.txt +19 -3
- data/Manifest.txt +6 -1
- data/examples/failing/README.txt +7 -0
- data/examples/failing/diffing_spec.rb +36 -0
- data/examples/failing/failing_autogenerated_docstrings_example.rb +19 -0
- data/examples/failing/failure_in_setup.rb +10 -0
- data/examples/failing/failure_in_teardown.rb +10 -0
- data/examples/failing/mocking_example.rb +40 -0
- data/examples/failing/mocking_with_flexmock.rb +26 -0
- data/examples/failing/mocking_with_mocha.rb +25 -0
- data/examples/failing/mocking_with_rr.rb +27 -0
- data/examples/failing/partial_mock_example.rb +20 -0
- data/examples/failing/predicate_example.rb +34 -0
- data/examples/failing/raising_example.rb +47 -0
- data/examples/failing/spec_helper.rb +3 -0
- data/examples/failing/syntax_error_example.rb +7 -0
- data/examples/failing/team_spec.rb +44 -0
- data/examples/failing/timeout_behaviour.rb +7 -0
- data/examples/passing/custom_formatter.rb +1 -1
- data/examples/passing/simple_matcher_example.rb +31 -0
- data/lib/autotest/rspec.rb +1 -1
- data/lib/spec/dsl/main.rb +82 -0
- data/lib/spec/dsl.rb +1 -0
- data/lib/spec/example/before_and_after_hooks.rb +2 -1
- data/lib/spec/example/configuration.rb +1 -1
- data/lib/spec/example/example_group.rb +1 -0
- data/lib/spec/example/example_group_factory.rb +2 -1
- data/lib/spec/example/example_group_methods.rb +40 -25
- data/lib/spec/example/example_methods.rb +19 -8
- data/lib/spec/example.rb +15 -17
- data/lib/spec/expectations/handler.rb +23 -28
- data/lib/spec/expectations/wrap_expectation.rb +56 -0
- data/lib/spec/expectations.rb +22 -18
- data/lib/spec/extensions.rb +0 -1
- data/lib/spec/interop/test/unit/testcase.rb +19 -17
- data/lib/spec/matchers/be_close.rb +6 -22
- data/lib/spec/matchers/eql.rb +7 -25
- data/lib/spec/matchers/equal.rb +6 -24
- data/lib/spec/matchers/errors.rb +5 -0
- data/lib/spec/matchers/exist.rb +8 -14
- data/lib/spec/matchers/generated_descriptions.rb +48 -0
- data/lib/spec/matchers/has.rb +12 -28
- data/lib/spec/matchers/include.rb +12 -9
- data/lib/spec/matchers/match.rb +8 -27
- data/lib/spec/matchers/method_missing.rb +9 -0
- data/lib/spec/matchers/operator_matcher.rb +23 -46
- data/lib/spec/matchers/raise_error.rb +4 -8
- data/lib/spec/matchers/respond_to.rb +2 -1
- data/lib/spec/matchers/throw_symbol.rb +9 -3
- data/lib/spec/mocks/message_expectation.rb +0 -5
- data/lib/spec/mocks/proxy.rb +12 -10
- data/lib/spec/rake/spectask.rb +4 -6
- data/lib/spec/runner/class_and_arguments_parser.rb +7 -9
- data/lib/spec/runner/command_line.rb +6 -8
- data/lib/spec/runner/formatter/base_text_formatter.rb +3 -2
- data/lib/spec/runner/option_parser.rb +4 -6
- data/lib/spec/runner/spec_parser.rb +5 -5
- data/lib/spec/runner.rb +37 -39
- data/lib/spec/story/runner/story_runner.rb +10 -6
- data/lib/spec/story/runner.rb +40 -42
- data/lib/spec/story/world.rb +66 -70
- data/lib/spec/version.rb +3 -1
- data/lib/spec.rb +21 -19
- data/rspec.gemspec +15 -6
- data/spec/autotest/autotest_helper.rb +2 -2
- data/spec/autotest/discover_spec.rb +4 -15
- data/spec/autotest/failed_results_re_spec.rb +24 -0
- data/spec/autotest/rspec_spec.rb +0 -37
- data/spec/spec/dsl/main_spec.rb +65 -0
- data/spec/spec/example/example_group_class_definition_spec.rb +6 -2
- data/spec/spec/example/example_group_factory_spec.rb +2 -1
- data/spec/spec/example/example_group_methods_spec.rb +138 -141
- data/spec/spec/example/example_group_spec.rb +3 -5
- data/spec/spec/example/example_methods_spec.rb +60 -23
- data/spec/spec/expectations/wrap_expectation_spec.rb +30 -0
- data/spec/spec/interop/test/unit/spec_spec.rb +1 -5
- data/spec/spec/interop/test/unit/test_unit_spec_helper.rb +4 -0
- data/spec/spec/matchers/be_close_spec.rb +12 -10
- data/spec/spec/matchers/description_generation_spec.rb +1 -1
- data/spec/spec/matchers/eql_spec.rb +7 -6
- data/spec/spec/matchers/equal_spec.rb +7 -6
- data/spec/spec/matchers/has_spec.rb +1 -1
- data/spec/spec/matchers/have_spec.rb +23 -18
- data/spec/spec/matchers/include_spec.rb +24 -0
- data/spec/spec/matchers/matcher_methods_spec.rb +1 -13
- data/spec/spec/matchers/throw_symbol_spec.rb +3 -3
- data/spec/spec/mocks/bug_report_11545_spec.rb +4 -5
- data/spec/spec/mocks/bug_report_496.rb +11 -9
- data/spec/spec/mocks/bug_report_600_spec.rb +22 -0
- data/spec/spec/runner/formatter/nested_text_formatter_spec.rb +1 -1
- data/spec/spec/runner/formatter/progress_bar_formatter_spec.rb +4 -14
- data/spec/spec/runner/formatter/specdoc_formatter_spec.rb +1 -1
- data/spec/spec/runner/options_spec.rb +1 -1
- data/spec/spec/runner/spec_parser_spec.rb +76 -80
- data/spec/spec_helper.rb +4 -0
- data/stories/example_groups/autogenerated_docstrings +4 -4
- data/stories/interop/test_but_not_test_unit +14 -0
- data/stories/resources/helpers/story_helper.rb +1 -1
- data/stories/resources/test/spec_including_test_but_not_unit.rb +11 -0
- data/story_server/prototype/javascripts/prototype.js +1 -1
- metadata +34 -53
- data/lib/spec/extensions/metaclass.rb +0 -7
data/.autotest
ADDED
data/History.txt
CHANGED
@@ -1,14 +1,30 @@
|
|
1
1
|
=== Maintenance
|
2
2
|
|
3
|
-
* 2
|
3
|
+
* 2 deprecations
|
4
|
+
|
5
|
+
* deprecated ExampleMethods#implementation_backtrace - use ExampleMethods#backtrace instead
|
6
|
+
* deprecated ExampleGroupMethods#example_group_backtrace - use ExampleGroupMethods#backtrace instead
|
4
7
|
|
5
|
-
|
8
|
+
* 3 major enhancements
|
9
|
+
|
10
|
+
* it { should matcher } - support for implicit receiver of #should (Joe Ferris of thoughtbot)
|
11
|
+
* subject { ... } - works in conjunction with implicit receiver of #should
|
6
12
|
* wrap_expectation (for wrapping multiple expectations and/or t/u assertions)
|
7
13
|
|
8
|
-
*
|
14
|
+
* 4 minor enhancements
|
9
15
|
|
10
16
|
* should throw_symbol accepts an optional argument: should throw_symbol(:sym, arg)
|
17
|
+
* fixed --line for jruby (Zach Moazeni)
|
18
|
+
* assorted small changes to support Ruby 1.9 (got a way to go)
|
19
|
+
* removed all instances of class << self - I do know who I am
|
20
|
+
|
21
|
+
* 4 bug fixes
|
11
22
|
|
23
|
+
* fixed bug where {:a => 1, :b => 2}.should include(:a, :b) failed (Yossef Mendelssohn)
|
24
|
+
* only try to load Test::Unit if Test::Unit is defined (not just Test)
|
25
|
+
* Allow stubs on parent and child classes simultaneously (Jim Lindley). Fixes #600.
|
26
|
+
* BaseTextFormatter will now create the directory in a WHERE string (Adam Anderson). Fixes #616.
|
27
|
+
|
12
28
|
=== Version 1.1.11 / 2008-10-24
|
13
29
|
|
14
30
|
* 1 major enhancement
|
data/Manifest.txt
CHANGED
@@ -45,6 +45,7 @@ examples/passing/predicate_example.rb
|
|
45
45
|
examples/passing/priority.txt
|
46
46
|
examples/passing/shared_example_group_example.rb
|
47
47
|
examples/passing/shared_stack_examples.rb
|
48
|
+
examples/passing/simple_matcher_example.rb
|
48
49
|
examples/passing/spec_helper.rb
|
49
50
|
examples/passing/stack.rb
|
50
51
|
examples/passing/stack_spec.rb
|
@@ -83,7 +84,6 @@ lib/spec/expectations/handler.rb
|
|
83
84
|
lib/spec/expectations/wrap_expectation.rb
|
84
85
|
lib/spec/extensions.rb
|
85
86
|
lib/spec/extensions/class.rb
|
86
|
-
lib/spec/extensions/metaclass.rb
|
87
87
|
lib/spec/interop/test.rb
|
88
88
|
lib/spec/interop/test/unit/autorunner.rb
|
89
89
|
lib/spec/interop/test/unit/testcase.rb
|
@@ -186,6 +186,7 @@ spec/README.jruby
|
|
186
186
|
spec/autotest/autotest_helper.rb
|
187
187
|
spec/autotest/autotest_matchers.rb
|
188
188
|
spec/autotest/discover_spec.rb
|
189
|
+
spec/autotest/failed_results_re_spec.rb
|
189
190
|
spec/autotest/rspec_spec.rb
|
190
191
|
spec/rspec_suite.rb
|
191
192
|
spec/ruby_forker.rb
|
@@ -250,6 +251,7 @@ spec/spec/mocks/bug_report_10263_spec.rb
|
|
250
251
|
spec/spec/mocks/bug_report_11545_spec.rb
|
251
252
|
spec/spec/mocks/bug_report_15719_spec.rb
|
252
253
|
spec/spec/mocks/bug_report_496.rb
|
254
|
+
spec/spec/mocks/bug_report_600_spec.rb
|
253
255
|
spec/spec/mocks/bug_report_7611_spec.rb
|
254
256
|
spec/spec/mocks/bug_report_7805_spec.rb
|
255
257
|
spec/spec/mocks/bug_report_8165_spec.rb
|
@@ -279,6 +281,7 @@ spec/spec/runner/empty_file.txt
|
|
279
281
|
spec/spec/runner/examples.txt
|
280
282
|
spec/spec/runner/failed.txt
|
281
283
|
spec/spec/runner/formatter/base_formatter_spec.rb
|
284
|
+
spec/spec/runner/formatter/base_text_formatter_spec.rb
|
282
285
|
spec/spec/runner/formatter/failing_example_groups_formatter_spec.rb
|
283
286
|
spec/spec/runner/formatter/failing_examples_formatter_spec.rb
|
284
287
|
spec/spec/runner/formatter/html_formatted-1.8.4.html
|
@@ -348,6 +351,7 @@ stories/example_groups/stories.rb
|
|
348
351
|
stories/helper.rb
|
349
352
|
stories/interop/examples_and_tests_together
|
350
353
|
stories/interop/stories.rb
|
354
|
+
stories/interop/test_but_not_test_unit
|
351
355
|
stories/interop/test_case_with_should_methods
|
352
356
|
stories/mock_framework_integration/stories.rb
|
353
357
|
stories/mock_framework_integration/use_flexmock.story
|
@@ -362,6 +366,7 @@ stories/resources/spec/spec_with_flexmock.rb
|
|
362
366
|
stories/resources/steps/running_rspec.rb
|
363
367
|
stories/resources/stories/failing_story.rb
|
364
368
|
stories/resources/test/spec_and_test_together.rb
|
369
|
+
stories/resources/test/spec_including_test_but_not_unit.rb
|
365
370
|
stories/resources/test/test_case_with_should_methods.rb
|
366
371
|
stories/stories/multiline_steps.story
|
367
372
|
stories/stories/steps/multiline_steps.rb
|
@@ -0,0 +1,7 @@
|
|
1
|
+
"Why have failing examples?", you might ask.
|
2
|
+
|
3
|
+
They allow us to see failure messages. RSpec wants to provide meaningful and helpful failure messages. The failures in this directory not only provide you a way of seeing the failure messages, but they provide RSpec's own specs a way of describing what they should look like and ensuring they stay correct.
|
4
|
+
|
5
|
+
To see the types of messages you can expect, stand in this directory and run:
|
6
|
+
|
7
|
+
../bin/spec ./*.rb
|
@@ -0,0 +1,36 @@
|
|
1
|
+
describe "Running specs with --diff" do
|
2
|
+
it "should print diff of different strings" do
|
3
|
+
uk = <<-EOF
|
4
|
+
RSpec is a
|
5
|
+
behaviour driven development
|
6
|
+
framework for Ruby
|
7
|
+
EOF
|
8
|
+
usa = <<-EOF
|
9
|
+
RSpec is a
|
10
|
+
behavior driven development
|
11
|
+
framework for Ruby
|
12
|
+
EOF
|
13
|
+
usa.should == uk
|
14
|
+
end
|
15
|
+
|
16
|
+
class Animal
|
17
|
+
def initialize(name,species)
|
18
|
+
@name,@species = name,species
|
19
|
+
end
|
20
|
+
|
21
|
+
def inspect
|
22
|
+
<<-EOA
|
23
|
+
<Animal
|
24
|
+
name=#{@name},
|
25
|
+
species=#{@species}
|
26
|
+
>
|
27
|
+
EOA
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
it "should print diff of different objects' pretty representation" do
|
32
|
+
expected = Animal.new "bob", "giraffe"
|
33
|
+
actual = Animal.new "bob", "tortoise"
|
34
|
+
expected.should eql(actual)
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/spec_helper'
|
2
|
+
|
3
|
+
# Run spec w/ -fs to see the output of this file
|
4
|
+
|
5
|
+
describe "Failing examples with no descriptions" do
|
6
|
+
|
7
|
+
# description is auto-generated as "should equal(5)" based on the last #should
|
8
|
+
it do
|
9
|
+
3.should equal(2)
|
10
|
+
5.should equal(5)
|
11
|
+
end
|
12
|
+
|
13
|
+
it { 3.should be > 5 }
|
14
|
+
|
15
|
+
it { ["a"].should include("b") }
|
16
|
+
|
17
|
+
it { [1,2,3].should_not respond_to(:size) }
|
18
|
+
|
19
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/spec_helper'
|
2
|
+
|
3
|
+
describe "Mocker" do
|
4
|
+
|
5
|
+
it "should be able to call mock()" do
|
6
|
+
mock = mock("poke me")
|
7
|
+
mock.should_receive(:poke)
|
8
|
+
mock.poke
|
9
|
+
end
|
10
|
+
|
11
|
+
it "should fail when expected message not received" do
|
12
|
+
mock = mock("poke me")
|
13
|
+
mock.should_receive(:poke)
|
14
|
+
end
|
15
|
+
|
16
|
+
it "should fail when messages are received out of order" do
|
17
|
+
mock = mock("one two three")
|
18
|
+
mock.should_receive(:one).ordered
|
19
|
+
mock.should_receive(:two).ordered
|
20
|
+
mock.should_receive(:three).ordered
|
21
|
+
mock.one
|
22
|
+
mock.three
|
23
|
+
mock.two
|
24
|
+
end
|
25
|
+
|
26
|
+
it "should get yelled at when sending unexpected messages" do
|
27
|
+
mock = mock("don't talk to me")
|
28
|
+
mock.should_not_receive(:any_message_at_all)
|
29
|
+
mock.any_message_at_all
|
30
|
+
end
|
31
|
+
|
32
|
+
it "has a bug we need to fix" do
|
33
|
+
pending "here is the bug" do
|
34
|
+
# Actually, no. It's fixed. This will fail because it passes :-)
|
35
|
+
mock = mock("Bug")
|
36
|
+
mock.should_receive(:hello)
|
37
|
+
mock.hello
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
# stub frameworks like to gum up Object, so this is deliberately
|
2
|
+
# set NOT to run so that you don't accidentally run it when you
|
3
|
+
# run this dir.
|
4
|
+
|
5
|
+
# To run it, stand in this directory and say:
|
6
|
+
#
|
7
|
+
# RUN_FLEXMOCK_EXAMPLE=true ruby ../bin/spec mocking_with_flexmock.rb
|
8
|
+
|
9
|
+
if ENV['RUN_FLEXMOCK_EXAMPLE']
|
10
|
+
Spec::Runner.configure do |config|
|
11
|
+
config.mock_with :flexmock
|
12
|
+
end
|
13
|
+
|
14
|
+
describe "Flexmocks" do
|
15
|
+
it "should fail when the expected message is received with wrong arguments" do
|
16
|
+
m = flexmock("now flex!")
|
17
|
+
m.should_receive(:msg).with("arg").once
|
18
|
+
m.msg("other arg")
|
19
|
+
end
|
20
|
+
|
21
|
+
it "should fail when the expected message is not received at all" do
|
22
|
+
m = flexmock("now flex!")
|
23
|
+
m.should_receive(:msg).with("arg").once
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
# stub frameworks like to gum up Object, so this is deliberately
|
2
|
+
# set NOT to run so that you don't accidentally run it when you
|
3
|
+
# run this dir.
|
4
|
+
|
5
|
+
# To run it, stand in this directory and say:
|
6
|
+
#
|
7
|
+
# RUN_MOCHA_EXAMPLE=true ruby ../bin/spec mocking_with_mocha.rb
|
8
|
+
|
9
|
+
if ENV['RUN_MOCHA_EXAMPLE']
|
10
|
+
Spec::Runner.configure do |config|
|
11
|
+
config.mock_with :mocha
|
12
|
+
end
|
13
|
+
describe "Mocha framework" do
|
14
|
+
it "should should be made available by saying config.mock_with :mocha" do
|
15
|
+
m = mock()
|
16
|
+
m.expects(:msg).with("arg")
|
17
|
+
m.msg
|
18
|
+
end
|
19
|
+
it "should should be made available by saying config.mock_with :mocha" do
|
20
|
+
o = Object.new
|
21
|
+
o.expects(:msg).with("arg")
|
22
|
+
o.msg
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
# stub frameworks like to gum up Object, so this is deliberately
|
2
|
+
# set NOT to run so that you don't accidentally run it when you
|
3
|
+
# run this dir.
|
4
|
+
|
5
|
+
# To run it, stand in this directory and say:
|
6
|
+
#
|
7
|
+
# RUN_RR_EXAMPLE=true ruby ../bin/spec mocking_with_rr.rb
|
8
|
+
|
9
|
+
if ENV['RUN_RR_EXAMPLE']
|
10
|
+
Spec::Runner.configure do |config|
|
11
|
+
config.mock_with :rr
|
12
|
+
end
|
13
|
+
describe "RR framework" do
|
14
|
+
it "should should be made available by saying config.mock_with :rr" do
|
15
|
+
o = Object.new
|
16
|
+
mock(o).msg("arg")
|
17
|
+
o.msg
|
18
|
+
end
|
19
|
+
it "should should be made available by saying config.mock_with :rr" do
|
20
|
+
o = Object.new
|
21
|
+
mock(o) do |m|
|
22
|
+
m.msg("arg")
|
23
|
+
end
|
24
|
+
o.msg
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/spec_helper'
|
2
|
+
|
3
|
+
class MockableClass
|
4
|
+
def self.find id
|
5
|
+
return :original_return
|
6
|
+
end
|
7
|
+
end
|
8
|
+
|
9
|
+
describe "A partial mock" do
|
10
|
+
|
11
|
+
it "should work at the class level (but fail here due to the type mismatch)" do
|
12
|
+
MockableClass.should_receive(:find).with(1).and_return {:stub_return}
|
13
|
+
MockableClass.find("1").should equal(:stub_return)
|
14
|
+
end
|
15
|
+
|
16
|
+
it "should revert to the original after each spec" do
|
17
|
+
MockableClass.find(1).should equal(:original_return)
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/spec_helper'
|
2
|
+
|
3
|
+
class BddFramework
|
4
|
+
def intuitive?
|
5
|
+
true
|
6
|
+
end
|
7
|
+
|
8
|
+
def adopted_quickly?
|
9
|
+
#this will cause failures because it reallly SHOULD be adopted quickly
|
10
|
+
false
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
describe "BDD framework" do
|
15
|
+
|
16
|
+
before(:each) do
|
17
|
+
@bdd_framework = BddFramework.new
|
18
|
+
end
|
19
|
+
|
20
|
+
it "should be adopted quickly" do
|
21
|
+
#this will fail because it reallly SHOULD be adopted quickly
|
22
|
+
@bdd_framework.should be_adopted_quickly
|
23
|
+
end
|
24
|
+
|
25
|
+
it "should be intuitive" do
|
26
|
+
@bdd_framework.should be_intuitive
|
27
|
+
end
|
28
|
+
|
29
|
+
it "should not respond to test" do
|
30
|
+
#this will fail
|
31
|
+
@bdd_framework.test
|
32
|
+
end
|
33
|
+
|
34
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
describe "This example" do
|
2
|
+
|
3
|
+
it "should show that a NoMethodError is raised but an Exception was expected" do
|
4
|
+
proc { ''.nonexistent_method }.should raise_error
|
5
|
+
end
|
6
|
+
|
7
|
+
it "should pass" do
|
8
|
+
proc { ''.nonexistent_method }.should raise_error(NoMethodError)
|
9
|
+
end
|
10
|
+
|
11
|
+
it "should show that a NoMethodError is raised but a SyntaxError was expected" do
|
12
|
+
proc { ''.nonexistent_method }.should raise_error(SyntaxError)
|
13
|
+
end
|
14
|
+
|
15
|
+
it "should show that nothing is raised when SyntaxError was expected" do
|
16
|
+
proc { }.should raise_error(SyntaxError)
|
17
|
+
end
|
18
|
+
|
19
|
+
it "should show that a NoMethodError is raised but a Exception was expected" do
|
20
|
+
proc { ''.nonexistent_method }.should_not raise_error
|
21
|
+
end
|
22
|
+
|
23
|
+
it "should show that a NoMethodError is raised" do
|
24
|
+
proc { ''.nonexistent_method }.should_not raise_error(NoMethodError)
|
25
|
+
end
|
26
|
+
|
27
|
+
it "should also pass" do
|
28
|
+
proc { ''.nonexistent_method }.should_not raise_error(SyntaxError)
|
29
|
+
end
|
30
|
+
|
31
|
+
it "should show that a NoMethodError is raised when nothing expected" do
|
32
|
+
proc { ''.nonexistent_method }.should_not raise_error(Exception)
|
33
|
+
end
|
34
|
+
|
35
|
+
it "should show that the wrong message was received" do
|
36
|
+
proc { raise StandardError.new("what is an enterprise?") }.should raise_error(StandardError, "not this")
|
37
|
+
end
|
38
|
+
|
39
|
+
it "should show that the unexpected error/message was thrown" do
|
40
|
+
proc { raise StandardError.new("abc") }.should_not raise_error(StandardError, "abc")
|
41
|
+
end
|
42
|
+
|
43
|
+
it "should pass too" do
|
44
|
+
proc { raise StandardError.new("abc") }.should_not raise_error(StandardError, "xyz")
|
45
|
+
end
|
46
|
+
|
47
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/spec_helper'
|
2
|
+
|
3
|
+
|
4
|
+
class Team
|
5
|
+
attr_reader :players
|
6
|
+
def initialize
|
7
|
+
@players = Players.new
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
class Players
|
12
|
+
def initialize
|
13
|
+
@players = []
|
14
|
+
end
|
15
|
+
def size
|
16
|
+
@players.size
|
17
|
+
end
|
18
|
+
def include? player
|
19
|
+
raise "player must be a string" unless player.is_a?(String)
|
20
|
+
@players.include? player
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
describe "A new team" do
|
25
|
+
|
26
|
+
before(:each) do
|
27
|
+
@team = Team.new
|
28
|
+
end
|
29
|
+
|
30
|
+
it "should have 3 players (failing example)" do
|
31
|
+
@team.should have(3).players
|
32
|
+
end
|
33
|
+
|
34
|
+
it "should include some player (failing example)" do
|
35
|
+
@team.players.should include("Some Player")
|
36
|
+
end
|
37
|
+
|
38
|
+
it "should include 5 (failing example)" do
|
39
|
+
@team.players.should include(5)
|
40
|
+
end
|
41
|
+
|
42
|
+
it "should have no players"
|
43
|
+
|
44
|
+
end
|
@@ -2,7 +2,7 @@ require File.dirname(__FILE__) + '/spec_helper'
|
|
2
2
|
require 'spec/runner/formatter/progress_bar_formatter'
|
3
3
|
|
4
4
|
# Example of a formatter with custom bactrace printing. Run me with:
|
5
|
-
# ruby bin/spec examples/failing -r examples/custom_formatter.rb -f CustomFormatter
|
5
|
+
# ruby bin/spec examples/failing -r examples/passing/custom_formatter.rb -f CustomFormatter
|
6
6
|
class CustomFormatter < Spec::Runner::Formatter::ProgressBarFormatter
|
7
7
|
def backtrace_line(line)
|
8
8
|
line.gsub(/([^:]*\.rb):(\d*)/) do
|
@@ -0,0 +1,31 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/spec_helper'
|
2
|
+
|
3
|
+
describe "arrays" do
|
4
|
+
def contain_same_elements_as(expected)
|
5
|
+
simple_matcher "array with same elements in any order as #{expected.inspect}" do |actual|
|
6
|
+
if actual.size == expected.size
|
7
|
+
a, e = actual.dup, expected.dup
|
8
|
+
until e.empty? do
|
9
|
+
if i = a.index(e.pop) then a.delete_at(i) end
|
10
|
+
end
|
11
|
+
a.empty?
|
12
|
+
else
|
13
|
+
false
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
describe "can be matched by their contents disregarding order" do
|
19
|
+
subject { [1,2,2,3] }
|
20
|
+
it { should contain_same_elements_as([1,2,2,3]) }
|
21
|
+
it { should contain_same_elements_as([2,3,2,1]) }
|
22
|
+
it { should_not contain_same_elements_as([3,3,2,1]) }
|
23
|
+
end
|
24
|
+
|
25
|
+
describe "fail the match with different contents" do
|
26
|
+
subject { [1,2,3] }
|
27
|
+
it { should_not contain_same_elements_as([2,3,4])}
|
28
|
+
it { should_not contain_same_elements_as([1,2,2,3])}
|
29
|
+
it { should_not contain_same_elements_as([1,2])}
|
30
|
+
end
|
31
|
+
end
|
data/lib/autotest/rspec.rb
CHANGED
@@ -21,7 +21,7 @@ class Autotest::Rspec < Autotest
|
|
21
21
|
|
22
22
|
def initialize
|
23
23
|
super
|
24
|
-
self.failed_results_re = /^\d+\)\n(?:\e\[\d*m)?(?:.*?
|
24
|
+
self.failed_results_re = /^\d+\)\n(?:\e\[\d*m)?(?:.*?in )?'([^\n]*)'(?: FAILED)?(?:\e\[\d*m)?\n(.*?)\n\n/m
|
25
25
|
self.completed_re = /\n(?:\e\[\d*m)?\d* examples?/m
|
26
26
|
end
|
27
27
|
|
@@ -0,0 +1,82 @@
|
|
1
|
+
module Spec
|
2
|
+
module DSL
|
3
|
+
module Main
|
4
|
+
# Creates and returns a class that includes the ExampleGroupMethods
|
5
|
+
# module. Which ExampleGroup type is created depends on the directory of the file
|
6
|
+
# calling this method. For example, Spec::Rails will use different
|
7
|
+
# classes for specs living in <tt>spec/models</tt>,
|
8
|
+
# <tt>spec/helpers</tt>, <tt>spec/views</tt> and
|
9
|
+
# <tt>spec/controllers</tt>.
|
10
|
+
#
|
11
|
+
# It is also possible to override autodiscovery of the example group
|
12
|
+
# type with an options Hash as the last argument:
|
13
|
+
#
|
14
|
+
# describe "name", :type => :something_special do ...
|
15
|
+
#
|
16
|
+
# The reason for using different behaviour classes is to have different
|
17
|
+
# matcher methods available from within the <tt>describe</tt> block.
|
18
|
+
#
|
19
|
+
# See Spec::Example::ExampleGroupFactory#register for details about how to
|
20
|
+
# register special implementations.
|
21
|
+
#
|
22
|
+
def describe(*args, &block)
|
23
|
+
Spec::Example::ExampleGroupFactory.create_example_group(*args, &block)
|
24
|
+
end
|
25
|
+
alias :context :describe
|
26
|
+
|
27
|
+
# Creates an example group that can be shared by other example groups
|
28
|
+
#
|
29
|
+
# == Examples
|
30
|
+
#
|
31
|
+
# share_examples_for "All Editions" do
|
32
|
+
# it "all editions behaviour" ...
|
33
|
+
# end
|
34
|
+
#
|
35
|
+
# describe SmallEdition do
|
36
|
+
# it_should_behave_like "All Editions"
|
37
|
+
#
|
38
|
+
# it "should do small edition stuff" do
|
39
|
+
# ...
|
40
|
+
# end
|
41
|
+
# end
|
42
|
+
def share_examples_for(name, &block)
|
43
|
+
Spec::Example::SharedExampleGroup.register(name, &block)
|
44
|
+
end
|
45
|
+
alias :shared_examples_for :share_examples_for
|
46
|
+
|
47
|
+
# Creates a Shared Example Group and assigns it to a constant
|
48
|
+
#
|
49
|
+
# share_as :AllEditions do
|
50
|
+
# it "should do all editions stuff" ...
|
51
|
+
# end
|
52
|
+
#
|
53
|
+
# describe SmallEdition do
|
54
|
+
# it_should_behave_like AllEditions
|
55
|
+
#
|
56
|
+
# it "should do small edition stuff" do
|
57
|
+
# ...
|
58
|
+
# end
|
59
|
+
# end
|
60
|
+
#
|
61
|
+
# And, for those of you who prefer to use something more like Ruby, you
|
62
|
+
# can just include the module directly
|
63
|
+
#
|
64
|
+
# describe SmallEdition do
|
65
|
+
# include AllEditions
|
66
|
+
#
|
67
|
+
# it "should do small edition stuff" do
|
68
|
+
# ...
|
69
|
+
# end
|
70
|
+
# end
|
71
|
+
def share_as(name, &block)
|
72
|
+
begin
|
73
|
+
Object.const_set(name, Spec::Example::SharedExampleGroup.register(name, &block))
|
74
|
+
rescue NameError => e
|
75
|
+
raise NameError.new(e.message + "\nThe first argument to share_as must be a legal name for a constant\n")
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
include Spec::DSL::Main
|
data/lib/spec/dsl.rb
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require 'spec/dsl/main'
|
@@ -145,7 +145,7 @@ module Spec
|
|
145
145
|
required_example_group = get_type_from_options(options)
|
146
146
|
required_example_group = required_example_group.to_sym if required_example_group
|
147
147
|
modules.each do |mod|
|
148
|
-
ExampleGroupFactory.get(required_example_group).
|
148
|
+
ExampleGroupFactory.get(required_example_group).__send__(action, mod)
|
149
149
|
end
|
150
150
|
end
|
151
151
|
|
@@ -1,7 +1,7 @@
|
|
1
1
|
module Spec
|
2
2
|
module Example
|
3
3
|
class ExampleGroupFactory
|
4
|
-
|
4
|
+
module ClassMethods
|
5
5
|
def reset
|
6
6
|
@example_group_types = nil
|
7
7
|
default(ExampleGroup)
|
@@ -76,6 +76,7 @@ module Spec
|
|
76
76
|
end
|
77
77
|
|
78
78
|
end
|
79
|
+
extend ClassMethods
|
79
80
|
self.reset
|
80
81
|
end
|
81
82
|
end
|