rspec 0.1.4 → 0.1.5

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGES CHANGED
@@ -13,6 +13,10 @@
13
13
  * Make sure the PKG_VERSION constant in Rakefile.rb is
14
14
  consistent with the latest version in this document.
15
15
 
16
+ == Version 0.1.5
17
+
18
+ Included examples and tests in gem.
19
+
16
20
  == Version 0.1.4
17
21
 
18
22
  More tests on block based Mock expectations
@@ -19,11 +19,13 @@ PKG_NAME = "rspec"
19
19
  # (This is subject to change - AH)
20
20
  #
21
21
  # REMEMBER TO KEEP PKG_VERSION IN SYNC WITH CHANGELOG
22
- PKG_VERSION = "0.1.4"
22
+ PKG_VERSION = "0.1.5"
23
23
  PKG_FILE_NAME = "#{PKG_NAME}-#{PKG_VERSION}"
24
24
  PKG_FILES = FileList[
25
25
  '[A-Z]*',
26
26
  'lib/**/*.rb',
27
+ 'test/**/*.rb',
28
+ 'examples/**/*.rb',
27
29
  'doc/**/*'
28
30
  ]
29
31
 
@@ -74,6 +76,8 @@ spec = Gem::Specification.new do |s|
74
76
  '--title' << 'RSpec' <<
75
77
  '--main' << 'README' <<
76
78
  '--line-numbers'
79
+
80
+ s.test_files = Dir.glob('test/tc_*.rb')
77
81
 
78
82
  #### Author and project details.
79
83
 
@@ -0,0 +1,15 @@
1
+ class Craps
2
+
3
+ def initialize(a_die, another_die)
4
+ @die1 = a_die
5
+ @die2 = another_die
6
+ end
7
+
8
+ def play
9
+ total_roll = @die1.roll() + @die2.roll()
10
+ return true if total_roll == 7
11
+ return true if total_roll == 11
12
+ false
13
+ end
14
+
15
+ end
@@ -0,0 +1,110 @@
1
+ require 'spec'
2
+ require 'craps'
3
+
4
+ class CrapsSpecification < Spec::Context
5
+
6
+ def setup
7
+ @die1 = Mock.new
8
+ @die2 = Mock.new
9
+ @game = Craps.new(@die1, @die2)
10
+ end
11
+
12
+ def teardown
13
+ @die1.__verify
14
+ @die2.__verify
15
+ end
16
+
17
+ # coming out roll of 7
18
+
19
+ def come_out_roll_of_1_6_wins
20
+ _load_dice([1], [6])
21
+ @game.play.should_be_true
22
+ end
23
+
24
+ def come_out_roll_of_2_5_wins
25
+ _load_dice([2], [5])
26
+ @game.play.should_be_true
27
+ end
28
+
29
+ def come_out_roll_of_3_4_wins
30
+ _load_dice([3], [4])
31
+ @game.play.should_be_true
32
+ end
33
+
34
+ def come_out_roll_of_4_3_wins
35
+ _load_dice([4], [3])
36
+ @game.play.should_be_true
37
+ end
38
+
39
+ def come_out_roll_of_5_2_wins
40
+ _load_dice([5], [2])
41
+ @game.play.should_be_true
42
+ end
43
+
44
+ def come_out_roll_of_6_1_wins
45
+ _load_dice([6], [1])
46
+ @game.play.should_be_true
47
+ end
48
+
49
+ # coming out roll of 11
50
+
51
+ def come_out_roll_of_5_6_wins
52
+ _load_dice([5], [6])
53
+ @game.play.should_be_true
54
+ end
55
+
56
+ def come_out_roll_of_6_5_wins
57
+ _load_dice([6], [5])
58
+ @game.play.should_be_true
59
+ end
60
+
61
+ # coming out roll of 2
62
+
63
+ def come_out_roll_of_1_1_looses
64
+ _load_dice([1], [1])
65
+ @game.play.should_be_false
66
+ end
67
+
68
+ # coming out roll of 3
69
+
70
+ def come_out_roll_of_1_2_looses
71
+ _load_dice([1], [2])
72
+ @game.play.should_be_false
73
+ end
74
+
75
+ def come_out_roll_of_2_1_looses
76
+ _load_dice([2], [1])
77
+ @game.play.should_be_false
78
+ end
79
+
80
+ # coming out roll of 12
81
+
82
+ def come_out_roll_of_6_6_looses
83
+ _load_dice([6], [6])
84
+ @game.play.should_be_false
85
+ end
86
+
87
+ # loosing with a point
88
+
89
+ # def second_roll_of_7_looses
90
+ # _load_dice([2, 4], [2, 3])
91
+ # @game.play.should_be_false
92
+ # end
93
+
94
+ # support
95
+
96
+ def _load_dice(rolls1, rolls2)
97
+ _load_die(@die1, rolls1)
98
+ _load_die(@die2, rolls2)
99
+ end
100
+
101
+ def _load_die(die, rolls)
102
+ rolls.each {| each | die.__expects(:roll).once.with_no_args.returns(each) }
103
+ end
104
+
105
+ end
106
+
107
+ if __FILE__ == $0
108
+ runner = Spec::TextRunner.new($stdout)
109
+ runner.run(CrapsSpecification)
110
+ end
@@ -0,0 +1,7 @@
1
+ class Movie
2
+ attr_reader :name
3
+
4
+ def initialize(aName)
5
+ @name = aName
6
+ end
7
+ end
@@ -0,0 +1,19 @@
1
+ class MovieList
2
+
3
+ def initialize
4
+ @movies = Hash.new
5
+ end
6
+
7
+ def size
8
+ @movies.size
9
+ end
10
+
11
+ def add (movieToAdd)
12
+ @movies.store(movieToAdd.name, movieToAdd)
13
+ end
14
+
15
+ def include? (aName)
16
+ @movies.include?(aName)
17
+ end
18
+
19
+ end
@@ -0,0 +1,43 @@
1
+ require 'spec'
2
+ require 'movie'
3
+ require 'movie_list'
4
+
5
+ class EmptyMovieList < Spec::Context
6
+
7
+ def setup
8
+ @list = MovieList.new
9
+ end
10
+
11
+ def should_have_size_of_0
12
+ @list.size.should_equal 0
13
+ end
14
+
15
+ def should_not_include_star_wars
16
+ @list.should_not_include "Star Wars"
17
+ end
18
+
19
+ end
20
+
21
+ class OneMovieList < Spec::Context
22
+
23
+ def setup
24
+ @list = MovieList.new
25
+ star_wars = Movie.new "Star Wars"
26
+ @list.add star_wars
27
+ end
28
+
29
+ def should_have_size_of_1
30
+ @list.size.should_equal 1
31
+ end
32
+
33
+ def should_include_star_wars
34
+ @list.should_include "Star Wars"
35
+ end
36
+
37
+ end
38
+
39
+ if __FILE__ == $0
40
+ runner = Spec::TextRunner.new($stdout)
41
+ runner.run(EmptyMovieList)
42
+ runner.run(OneMovieList)
43
+ end
@@ -1,6 +1,5 @@
1
1
  require 'spec'
2
2
 
3
-
4
3
  module Spec
5
4
  class Context
6
5
 
@@ -0,0 +1,71 @@
1
+ require 'test/unit'
2
+
3
+ require 'spec'
4
+
5
+
6
+ class FixtureTestingContext < Spec::Context
7
+
8
+ @setup_called = false
9
+ @spec_called = false
10
+ @teardown_called = false
11
+
12
+ def setup
13
+ @setup_called = true
14
+ end
15
+
16
+ def verify_setup
17
+ @setup_called
18
+ end
19
+
20
+ def teardown
21
+ @teardown_called = true
22
+ end
23
+
24
+ def verify_teardown
25
+ @teardown_called
26
+ end
27
+
28
+ def specification
29
+ @spec_called = true
30
+ end
31
+
32
+ def verify_spec
33
+ @spec_called
34
+ end
35
+
36
+ end
37
+
38
+
39
+ class NullResultListener
40
+
41
+ def pass(spec)
42
+ end
43
+
44
+ def failure(spec)
45
+ end
46
+
47
+ def error(spec)
48
+ end
49
+
50
+ def spec(spec)
51
+ end
52
+
53
+ end
54
+
55
+
56
+ class ContextFixturesTest < Test::Unit::TestCase
57
+
58
+ def setup
59
+ @fixture_testing_context = FixtureTestingContext.new(:specification)
60
+ @fixture_testing_context.run(NullResultListener.new)
61
+ end
62
+
63
+ def test_should_run_setup_before
64
+ @fixture_testing_context.verify_setup
65
+ end
66
+
67
+ def test_should_run_teardown_after
68
+ @fixture_testing_context.verify_teardown
69
+ end
70
+
71
+ end
@@ -0,0 +1,174 @@
1
+ require 'test/unit'
2
+
3
+ require 'spec'
4
+
5
+
6
+ class TestCon < Spec::Context
7
+
8
+ def empty_specification
9
+ end
10
+
11
+ def passing_once_specification
12
+ true.should_equal(true)
13
+ end
14
+
15
+ def failing_once_specification
16
+ false.should_equal(true)
17
+ end
18
+
19
+ def erroring_once_specification
20
+ undefined_method.should_equal(true)
21
+ end
22
+
23
+ def passing_multi_specification
24
+ true.should_equal(true)
25
+ false.should_equal(false)
26
+ Object.should_equal(Object)
27
+ end
28
+
29
+ def failing_multi_specification
30
+ false.should_equal(true)
31
+ true.should_equal(false)
32
+ false.should_equal(nil)
33
+ end
34
+
35
+ def erroring_multi_specification
36
+ undefined_method.should_equal(false)
37
+ undefined_method.should_not_equal(true)
38
+ end
39
+
40
+ end
41
+
42
+
43
+ class MockResultListener
44
+
45
+ def initialize
46
+ @pass_count = 0
47
+ @failure_count = 0
48
+ @spec_count = 0
49
+ end
50
+
51
+ def pass(spec)
52
+ @pass_count += 1
53
+ end
54
+
55
+ def failure(spec, exception)
56
+ @failure_count += 1
57
+ end
58
+
59
+ def spec(spec)
60
+ @spec_count += 1
61
+ end
62
+
63
+ def verify_failures(count)
64
+ check(count, @failure_count)
65
+ end
66
+
67
+ def verify_passes(count)
68
+ check(count, @pass_count)
69
+ end
70
+
71
+ def verify_specs(count)
72
+ check(count, @spec_count)
73
+ end
74
+
75
+ def check(expected, actual)
76
+ if (expected != actual)
77
+ raise Test::Unit::AssertionFailedError.new("expected: " + expected.to_s + " actual: " + actual.to_s)
78
+ end
79
+ end
80
+
81
+ end
82
+
83
+
84
+ class ContextRunPassingOnceTest < Test::Unit::TestCase
85
+
86
+ def setup
87
+ @context = TestCon.new(:passing_once_specification)
88
+ @result_listener = MockResultListener.new
89
+ @context.run(@result_listener)
90
+ end
91
+
92
+ def test_should_have_one_pass
93
+ @result_listener.verify_passes(1)
94
+ end
95
+
96
+ def test_should_have_no_failures
97
+ @result_listener.verify_failures(0)
98
+ end
99
+
100
+ def test_should_have_one_expectation
101
+ @result_listener.verify_specs(1)
102
+ end
103
+
104
+ end
105
+
106
+
107
+ class ContextRunFailingOnceTest < Test::Unit::TestCase
108
+
109
+ def setup
110
+ @context = TestCon.new(:failing_once_specification)
111
+ @result_listener = MockResultListener.new
112
+ @context.run(@result_listener)
113
+ end
114
+
115
+ def test_should_have_one_failure
116
+ @result_listener.verify_failures(1)
117
+ end
118
+
119
+ def test_should_have_no_passes
120
+ @result_listener.verify_passes(0)
121
+ end
122
+
123
+ def test_should_have_one_expectation
124
+ @result_listener.verify_specs(1)
125
+ end
126
+
127
+ end
128
+
129
+
130
+ class ContextRunErroringTest < Test::Unit::TestCase
131
+
132
+ def setup
133
+ @context = TestCon.new(:erroring_once_specification)
134
+ @result_listener = MockResultListener.new
135
+ @context.run(@result_listener)
136
+ end
137
+
138
+ def test_should_have_one_failures
139
+ @result_listener.verify_failures(1)
140
+ end
141
+
142
+ def test_should_have_no_passes
143
+ @result_listener.verify_passes(0)
144
+ end
145
+
146
+ def test_should_have_one_spec
147
+ @result_listener.verify_specs(1);
148
+ end
149
+
150
+ end
151
+
152
+
153
+ class ContextRunFailingMultipleTest <Test::Unit::TestCase
154
+
155
+ def test_should_have_one_expectation
156
+ @context = TestCon.new(:failing_multi_specification)
157
+ @result_listener = MockResultListener.new
158
+ @context.run(@result_listener)
159
+ @result_listener.verify_specs(1)
160
+ end
161
+
162
+ end
163
+
164
+
165
+ class ContextRunErroringMultipleTest < Test::Unit::TestCase
166
+
167
+ def test_should_have_no_expectations
168
+ @context = TestCon.new(:erroring_multi_specification)
169
+ @result_listener = MockResultListener.new
170
+ @context.run(@result_listener)
171
+ @result_listener.verify_specs(1)
172
+ end
173
+
174
+ end