MacSpec 0.3.1
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.
- data/.document +5 -0
- data/.gitignore +21 -0
- data/LICENSE +20 -0
- data/README.rdoc +20 -0
- data/Rakefile +53 -0
- data/lib/mac_spec.rb +59 -0
- data/lib/mac_spec/matcher_system.rb +19 -0
- data/lib/mac_spec/matcher_system/built_in/change_expectations.rb +36 -0
- data/lib/mac_spec/matcher_system/built_in/enumerable_expectations.rb +43 -0
- data/lib/mac_spec/matcher_system/built_in/error_expectations.rb +68 -0
- data/lib/mac_spec/matcher_system/built_in/operator_expectations.rb +45 -0
- data/lib/mac_spec/matcher_system/built_in/truth_expectations.rb +148 -0
- data/lib/mac_spec/matcher_system/core/def_matcher.rb +14 -0
- data/lib/mac_spec/matcher_system/core/exceptions.rb +7 -0
- data/lib/mac_spec/matcher_system/core/expectation_builder.rb +11 -0
- data/lib/mac_spec/matcher_system/core/matcher_builder.rb +53 -0
- data/lib/mac_spec/matcher_system/core/modals.rb +36 -0
- data/lib/mac_spec/mocking_framework.rb +13 -0
- data/lib/mac_spec/mocking_framework/extensions/kernel_extension.rb +14 -0
- data/lib/mac_spec/mocking_framework/extensions/object_extension.rb +74 -0
- data/lib/mac_spec/mocking_framework/message_expectation.rb +127 -0
- data/lib/mac_spec/mocking_framework/mock.rb +20 -0
- data/lib/mac_spec/testing_framework.rb +13 -0
- data/lib/mac_spec/testing_framework/core/functions.rb +26 -0
- data/lib/mac_spec/testing_framework/core/kernel_extension.rb +27 -0
- data/lib/mac_spec/testing_framework/core/test_case_class_methods.rb +90 -0
- data/lib/mac_spec/version.rb +3 -0
- data/test/all.rb +6 -0
- data/test/mac_spec/matcher_system/built_in/change_expectations_test.rb +68 -0
- data/test/mac_spec/matcher_system/built_in/enumerable_expectations_test.rb +91 -0
- data/test/mac_spec/matcher_system/built_in/error_expectations_test.rb +144 -0
- data/test/mac_spec/matcher_system/built_in/operator_expectations_test.rb +136 -0
- data/test/mac_spec/matcher_system/built_in/truth_expectations_test.rb +373 -0
- data/test/mac_spec/matcher_system/core/def_matcher_test.rb +100 -0
- data/test/mac_spec/matcher_system/core/expectation_builder_test.rb +34 -0
- data/test/mac_spec/matcher_system/core/matcher_builder_test.rb +72 -0
- data/test/mac_spec/matcher_system/core/modals_test.rb +39 -0
- data/test/mac_spec/matcher_system/script.rb +29 -0
- data/test/mac_spec/matcher_system/test_helper.rb +2 -0
- data/test/mac_spec/mocking_framework/extensions/kernel_extension_test.rb +37 -0
- data/test/mac_spec/mocking_framework/extensions/object_extension_test.rb +9 -0
- data/test/mac_spec/mocking_framework/message_expectation_test.rb +9 -0
- data/test/mac_spec/mocking_framework/mock_test.rb +9 -0
- data/test/mac_spec/mocking_framework/regression/mocking_class_methods_test.rb +96 -0
- data/test/mac_spec/mocking_framework/regression/negative_expectation_test.rb +33 -0
- data/test/mac_spec/mocking_framework/regression/stub_test.rb +19 -0
- data/test/mac_spec/mocking_framework/test_helper.rb +1 -0
- data/test/mac_spec/test_helper.rb +1 -0
- data/test/mac_spec/testing_framework/performance/x_test_performance.rb +125 -0
- data/test/mac_spec/testing_framework/regression/before_test.rb +32 -0
- data/test/mac_spec/testing_framework/regression/deep_nested_example_groups_test.rb +20 -0
- data/test/mac_spec/testing_framework/regression/description_string_test.rb +13 -0
- data/test/mac_spec/testing_framework/regression/example_name_test.rb +11 -0
- data/test/mac_spec/testing_framework/regression/inherit_not_double_test.rb +39 -0
- data/test/mac_spec/testing_framework/regression/surrounding_module_scope_test.rb +31 -0
- data/test/mac_spec/testing_framework/regression/testing_functions_test.rb +66 -0
- data/test/mac_spec/testing_framework/test_helper.rb +1 -0
- data/test/test_helper.rb +1 -0
- metadata +150 -0
@@ -0,0 +1,34 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../test_helper.rb'
|
2
|
+
|
3
|
+
module MacSpec
|
4
|
+
module MatcherSystem
|
5
|
+
module ExpectationBuilder
|
6
|
+
describe "build_expectation" do
|
7
|
+
|
8
|
+
before do
|
9
|
+
@obj = Object.new
|
10
|
+
end
|
11
|
+
|
12
|
+
it "should" do
|
13
|
+
exp = MacSpec::MatcherSystem::ExpectationBuilder.build_expectation(true, nil, @obj)
|
14
|
+
exp.send(:==, @obj)
|
15
|
+
end
|
16
|
+
|
17
|
+
it "should fails" do
|
18
|
+
expect_1 = MacSpec::MatcherSystem::ExpectationBuilder.build_expectation(true, nil, 1)
|
19
|
+
lambda {expect_1.send(:==, 2)}.should raise_error
|
20
|
+
end
|
21
|
+
|
22
|
+
it "should not" do
|
23
|
+
exp = MacSpec::MatcherSystem::ExpectationBuilder.build_expectation(false, nil, @obj)
|
24
|
+
exp.send(:==, 1)
|
25
|
+
end
|
26
|
+
|
27
|
+
it "should not fails" do
|
28
|
+
expect_not_1 = MacSpec::MatcherSystem::ExpectationBuilder.build_expectation(false, nil, 1)
|
29
|
+
lambda {expect_not_1.send(:==, 1)}.should raise_error
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,72 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../test_helper.rb'
|
2
|
+
|
3
|
+
describe MacSpec::MatcherSystem::MatcherBuilder do
|
4
|
+
include MacSpec::MatcherSystem::MatcherBuilder
|
5
|
+
|
6
|
+
before do
|
7
|
+
@obj = Object.new
|
8
|
+
end
|
9
|
+
|
10
|
+
it "matcher responds to matches" do
|
11
|
+
block = lambda {|given, matcher, args| true}
|
12
|
+
build_matcher(:m, &block).should respond_to(:matches?)
|
13
|
+
end
|
14
|
+
|
15
|
+
it "fail positive" do
|
16
|
+
block = lambda {|given, matcher, args| false}
|
17
|
+
lambda {@obj.should build_matcher(:m, &block)}.should raise_error
|
18
|
+
end
|
19
|
+
|
20
|
+
it "pass positive" do
|
21
|
+
block = lambda {|given, matcher, args| true}
|
22
|
+
@obj.should build_matcher(:m, &block)
|
23
|
+
end
|
24
|
+
|
25
|
+
it "fail negative" do
|
26
|
+
block = lambda {|given, matcher, args| true}
|
27
|
+
lambda {@obj.should_not build_matcher(:m, &block)}.should raise_error
|
28
|
+
end
|
29
|
+
|
30
|
+
it "pass negative" do
|
31
|
+
block = lambda {|given, matcher, args| false}
|
32
|
+
@obj.should_not build_matcher(:m, &block)
|
33
|
+
end
|
34
|
+
|
35
|
+
it "takes arguments" do
|
36
|
+
block = lambda {|given, matcher, args| $args = args; true}
|
37
|
+
@obj.should build_matcher(:m,[1,2,3], &block)
|
38
|
+
$args.should eql([1,2,3])
|
39
|
+
end
|
40
|
+
|
41
|
+
it "received method" do
|
42
|
+
block = lambda {|given, matcher, args| $msgs = matcher.msgs; true}
|
43
|
+
@obj.should build_matcher(:m, &block).method1
|
44
|
+
$msgs[0].name.should eql(:method1)
|
45
|
+
end
|
46
|
+
|
47
|
+
it "received method takes args" do
|
48
|
+
block = lambda {|given, matcher, args| $msgs = matcher.msgs; true}
|
49
|
+
@obj.should build_matcher(:m, &block).method1(1,2,3)
|
50
|
+
$msgs[0].args.should eql([1,2,3])
|
51
|
+
end
|
52
|
+
|
53
|
+
it "received method takes block" do
|
54
|
+
block = lambda {|given, matcher, args| $msgs = matcher.msgs; true}
|
55
|
+
@obj.should build_matcher(:m, &block).method1 { "Hello, World!"}
|
56
|
+
$msgs[0].block.call.should eql("Hello, World!")
|
57
|
+
end
|
58
|
+
|
59
|
+
it "received method chained" do
|
60
|
+
block = lambda {|given, matcher, args| $msgs = matcher.msgs; true}
|
61
|
+
@obj.should build_matcher(:m, &block).method1(1,2,3) { "Hello, World!"}.
|
62
|
+
method2(4,5,6) { "Hello chained messages" }
|
63
|
+
|
64
|
+
$msgs[0].name.should eql(:method1)
|
65
|
+
$msgs[1].name.should eql(:method2)
|
66
|
+
$msgs[0].args.should eql([1,2,3])
|
67
|
+
$msgs[1].args.should eql([4,5,6])
|
68
|
+
$msgs[0].block.call.should eql("Hello, World!")
|
69
|
+
$msgs[1].block.call.should eql("Hello chained messages")
|
70
|
+
end
|
71
|
+
|
72
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../test_helper.rb'
|
2
|
+
|
3
|
+
describe MacSpec::MatcherSystem::Modals do
|
4
|
+
before do
|
5
|
+
@expectation = build_matcher() {|r,m,a| true}
|
6
|
+
@bad_expectation = build_matcher() {|r,m,a| false}
|
7
|
+
end
|
8
|
+
|
9
|
+
it "should" do
|
10
|
+
3.should(@expectation)
|
11
|
+
end
|
12
|
+
|
13
|
+
it "will" do
|
14
|
+
3.will(@expectation)
|
15
|
+
end
|
16
|
+
|
17
|
+
it "should not" do
|
18
|
+
3.should_not(@bad_expectation)
|
19
|
+
end
|
20
|
+
|
21
|
+
it "will not" do
|
22
|
+
3.will_not(@bad_expectation)
|
23
|
+
end
|
24
|
+
|
25
|
+
it "wont" do
|
26
|
+
3.wont(@bad_expectation)
|
27
|
+
end
|
28
|
+
|
29
|
+
it "should operator expectation returned" do
|
30
|
+
obj = 3.should
|
31
|
+
assert_equal MacSpec::MatcherSystem::Expectations::OperatorExpectation, obj.class
|
32
|
+
end
|
33
|
+
|
34
|
+
|
35
|
+
it "should not operator expectation returned" do
|
36
|
+
obj = 3.should_not
|
37
|
+
assert_equal MacSpec::MatcherSystem::Expectations::OperatorExpectation, obj.class
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
# parses all test files (test_...rb or ..._tests.rb) below current folder
|
2
|
+
# and replaces all occurences of
|
3
|
+
# def test_whatever
|
4
|
+
# with
|
5
|
+
# $keyword "whatever" do
|
6
|
+
# $keyword defaults to 'test'
|
7
|
+
|
8
|
+
keyword = "test"
|
9
|
+
|
10
|
+
dir = File.dirname(__FILE__)
|
11
|
+
Dir[File.expand_path("#{dir}/**/*.rb")].uniq.each do |file|
|
12
|
+
if ((file =~ /\/test_\w+\.rb$/) || (file =~ /\w+_tests\.rb$/)) && (file !~ /\/test_helper\.rb$/)
|
13
|
+
puts file
|
14
|
+
File.open(file,File::RDWR) do |f|
|
15
|
+
new_lines = []
|
16
|
+
old_lines = f.readlines
|
17
|
+
old_lines.each do |line|
|
18
|
+
if line =~ /\A(\s*)def\s+test_(.*)\Z/
|
19
|
+
space = $1
|
20
|
+
desc = $2.gsub(/_/, " ")
|
21
|
+
line = "#{space}#{keyword} \"#{desc}\" do"
|
22
|
+
end
|
23
|
+
new_lines << line
|
24
|
+
end
|
25
|
+
f.pos = 0
|
26
|
+
f.puts new_lines
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
require File.dirname(__FILE__) + "/../test_helper.rb"
|
2
|
+
|
3
|
+
module MacSpec
|
4
|
+
module MockingFramework
|
5
|
+
describe KernelExtension do
|
6
|
+
include MacSpec::MockingFramework::KernelExtension
|
7
|
+
|
8
|
+
describe "mock(name, options)" do
|
9
|
+
before do
|
10
|
+
@mock = mock("mock")
|
11
|
+
end
|
12
|
+
|
13
|
+
it "creates a Mock" do
|
14
|
+
@mock.should be_kind_of(Mock)
|
15
|
+
end
|
16
|
+
|
17
|
+
describe "null_object => true" do
|
18
|
+
before do
|
19
|
+
@null = mock("mock", :null_object => true)
|
20
|
+
end
|
21
|
+
|
22
|
+
it "creates a null" do
|
23
|
+
@null.hello?
|
24
|
+
end
|
25
|
+
|
26
|
+
it "returns another null for each method call" do
|
27
|
+
@null.hello?.should be_kind_of(Mock)
|
28
|
+
end
|
29
|
+
|
30
|
+
it "and so on ..." do
|
31
|
+
@null.hello?.hello?.hello?.should be_kind_of(Mock)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,96 @@
|
|
1
|
+
require File.dirname(__FILE__) + "/../test_helper.rb"
|
2
|
+
|
3
|
+
describe "Mocking existing methods" do
|
4
|
+
|
5
|
+
before do
|
6
|
+
class A
|
7
|
+
def self.noarg
|
8
|
+
"noarg"
|
9
|
+
end
|
10
|
+
def self.onearg(arg)
|
11
|
+
"onearg"
|
12
|
+
end
|
13
|
+
def self.twoargs(arg1, arg2)
|
14
|
+
"twoargs"
|
15
|
+
end
|
16
|
+
def self.threeargs(arg1, arg2, arg3)
|
17
|
+
"threeargs"
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
describe "not mocked" do
|
23
|
+
it "noarg" do
|
24
|
+
A.noarg.should eql("noarg")
|
25
|
+
end
|
26
|
+
|
27
|
+
it "onearg" do
|
28
|
+
A.onearg("arg").should eql("onearg")
|
29
|
+
end
|
30
|
+
|
31
|
+
it "twoargs" do
|
32
|
+
A.twoargs("arg1", "arg2").should eql("twoargs")
|
33
|
+
end
|
34
|
+
|
35
|
+
it "threeargs" do
|
36
|
+
A.threeargs("arg1", "arg2", "arg3").should eql("threeargs")
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
describe "Without args" do
|
41
|
+
it "should work" do
|
42
|
+
A.should_receive(:noarg).and_return("b")
|
43
|
+
A.noarg.should eql("b")
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
describe "With one arg" do
|
48
|
+
it "will take a number" do
|
49
|
+
A.should_receive(:onearg).with(1).and_return("b")
|
50
|
+
A.onearg(1).should eql("b")
|
51
|
+
end
|
52
|
+
|
53
|
+
it "will take a string" do
|
54
|
+
A.should_receive(:onearg).with("string").and_return("b")
|
55
|
+
A.onearg("string").should eql("b")
|
56
|
+
end
|
57
|
+
|
58
|
+
it "will take an array" do
|
59
|
+
A.should_receive(:onearg).with([1,2,3]).and_return("b")
|
60
|
+
A.onearg([1,2,3]).should eql("b")
|
61
|
+
end
|
62
|
+
|
63
|
+
it "will take an empty array" do
|
64
|
+
A.should_receive(:onearg).with([]).and_return("b")
|
65
|
+
A.onearg([]).should eql("b")
|
66
|
+
end
|
67
|
+
|
68
|
+
it "will take nil" do
|
69
|
+
A.should_receive(:onearg).with(nil).and_return("b")
|
70
|
+
A.onearg(nil).should eql("b")
|
71
|
+
end
|
72
|
+
|
73
|
+
it "will take a custom object" do
|
74
|
+
obj = Object.new
|
75
|
+
A.should_receive(:onearg).with(obj).and_return("b")
|
76
|
+
A.onearg(obj).should eql("b")
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
describe "Several Expectations on one class" do
|
81
|
+
it "First Expectations, then calling" do
|
82
|
+
A.should_receive(:noarg).and_return("b")
|
83
|
+
A.should_receive(:onearg).and_return("b")
|
84
|
+
A.noarg
|
85
|
+
A.onearg
|
86
|
+
end
|
87
|
+
|
88
|
+
it "Mixed, but valid" do
|
89
|
+
A.should_receive(:noarg).and_return("b")
|
90
|
+
A.noarg
|
91
|
+
A.should_receive(:onearg).and_return("b")
|
92
|
+
A.onearg
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
require File.dirname(__FILE__) + "/../test_helper.rb"
|
2
|
+
|
3
|
+
describe "Negative Message Expactation" do
|
4
|
+
|
5
|
+
describe "with class methods" do
|
6
|
+
before do
|
7
|
+
class A
|
8
|
+
def self.meth
|
9
|
+
"class meth"
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
it "works" do
|
15
|
+
A.should_not_receive(:blah)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
describe "with instance methods" do
|
20
|
+
before do
|
21
|
+
class A
|
22
|
+
def meth
|
23
|
+
"instance meth"
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
it "works" do
|
29
|
+
A.new.should_not_receive(:blah)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require File.dirname(__FILE__) + "/../test_helper.rb"
|
2
|
+
|
3
|
+
describe "Stubs" do
|
4
|
+
describe "mock(name, :meth => 'return_value')" do
|
5
|
+
[:any, :kind, :of, :method, :name].each do |m|
|
6
|
+
["string", 1, 1.0, Object.new].each do |val|
|
7
|
+
it "returns #{val} for #{m}" do
|
8
|
+
mock("name", m => val).send(m).should == val
|
9
|
+
end
|
10
|
+
|
11
|
+
it "stub!(#{m} => #{val})" do
|
12
|
+
obj = Object.new
|
13
|
+
obj.stub!(m => val)
|
14
|
+
obj.send(m).should == val
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
require File.dirname(__FILE__) + "/../test_helper.rb"
|
@@ -0,0 +1 @@
|
|
1
|
+
require File.dirname(__FILE__) + "/../test_helper.rb"
|
@@ -0,0 +1,125 @@
|
|
1
|
+
require File.dirname(__FILE__) + "/../test_helper.rb"
|
2
|
+
|
3
|
+
class Thing
|
4
|
+
def widgets
|
5
|
+
@widgets ||= []
|
6
|
+
end
|
7
|
+
end
|
8
|
+
|
9
|
+
def_matcher :be_in_range do |given, matcher, args|
|
10
|
+
range = args[1] ? (args[0]..args[1]) : args[0]
|
11
|
+
matcher.positive_msg = "expected #{given} to be in range (#{range})"
|
12
|
+
matcher.negative_msg = "expected #{given} not to be in range (#{range})"
|
13
|
+
range.include?(given)
|
14
|
+
end
|
15
|
+
|
16
|
+
def_matcher :have do |given, matcher, args|
|
17
|
+
number = args[0]
|
18
|
+
actual = given.send(matcher.msgs[0].name).length
|
19
|
+
matcher.positive_msg = "Expected #{given} to have #{actual}, but found #{number} "
|
20
|
+
actual == number
|
21
|
+
end
|
22
|
+
|
23
|
+
1.times do |i|
|
24
|
+
|
25
|
+
describe "Matcher: be_in_range#{i}" do
|
26
|
+
describe "With lower and upper bound seperately#{i}" do
|
27
|
+
describe "Given value of 1 #{i}" do
|
28
|
+
|
29
|
+
setup do
|
30
|
+
@value = 1
|
31
|
+
end
|
32
|
+
|
33
|
+
it "should be in range (0,1), #{i}" do
|
34
|
+
@value.should be_in_range(0,1)
|
35
|
+
end
|
36
|
+
|
37
|
+
it "should be in range (1,1), #{i}" do
|
38
|
+
@value.should be_in_range(1,1)
|
39
|
+
end
|
40
|
+
|
41
|
+
it "should be in range (1,2), #{i}" do
|
42
|
+
@value.should be_in_range(1,2)
|
43
|
+
end
|
44
|
+
|
45
|
+
it "should not be in range (0,0), #{i}" do
|
46
|
+
@value.should_not be_in_range(0,0)
|
47
|
+
end
|
48
|
+
|
49
|
+
it "should not be in range (2,2), #{i}" do
|
50
|
+
@value.should_not be_in_range(2,2)
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
describe "With range (), #{i}" do
|
55
|
+
describe "Given value of 1" do
|
56
|
+
|
57
|
+
setup do
|
58
|
+
@value = 1
|
59
|
+
end
|
60
|
+
|
61
|
+
it "should be in range (0,1), #{i}" do
|
62
|
+
@value.should be_in_range(0..1)
|
63
|
+
end
|
64
|
+
|
65
|
+
it "should be in range (1,1), #{i}" do
|
66
|
+
@value.should be_in_range(1..1)
|
67
|
+
end
|
68
|
+
|
69
|
+
it "should be in range (1,2), #{i}" do
|
70
|
+
@value.should be_in_range(1..2)
|
71
|
+
end
|
72
|
+
|
73
|
+
it "should not be in range (0,0), #{i}" do
|
74
|
+
@value.should_not be_in_range(0..0)
|
75
|
+
end
|
76
|
+
|
77
|
+
it "should not be in range (2,2), #{i}" do
|
78
|
+
@value.should_not be_in_range(2..2)
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
|
86
|
+
describe "top level description block with one example, #{i}" do
|
87
|
+
|
88
|
+
setup do
|
89
|
+
@horst = "Horst"
|
90
|
+
end
|
91
|
+
|
92
|
+
it "example3, #{i}" do
|
93
|
+
@horst.should == "Horst"
|
94
|
+
end
|
95
|
+
|
96
|
+
describe "second level description block, #{i}" do
|
97
|
+
|
98
|
+
setup do
|
99
|
+
@inge = "Inge"
|
100
|
+
end
|
101
|
+
|
102
|
+
it "Inge should be here, #{i}" do
|
103
|
+
@inge.should == "Inge"
|
104
|
+
end
|
105
|
+
|
106
|
+
it "Horst should still be here, #{i}" do
|
107
|
+
@horst.should == "Horst"
|
108
|
+
end
|
109
|
+
|
110
|
+
end
|
111
|
+
end
|
112
|
+
|
113
|
+
describe "Thing, #{i}" do
|
114
|
+
|
115
|
+
setup do
|
116
|
+
@thing = Thing.new
|
117
|
+
end
|
118
|
+
describe "initialized in first before,#{i}" do
|
119
|
+
setup {}
|
120
|
+
it "has 0 widgets, #{i}" do
|
121
|
+
@thing.should have(0).widgets
|
122
|
+
end
|
123
|
+
end
|
124
|
+
end
|
125
|
+
end
|