baretest 0.2.4 → 0.4.0.pre1

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 (85) hide show
  1. data/LICENSE.txt +6 -6
  2. data/MANIFEST.txt +40 -18
  3. data/README.rdoc +8 -1
  4. data/bin/baretest +126 -118
  5. data/doc/baretest.rdoc +1 -1
  6. data/doc/mocking_stubbing_test_doubles.rdoc +31 -3
  7. data/doc/news/news-0.3.0.rdoc +7 -0
  8. data/doc/quickref.rdoc +74 -28
  9. data/doc/whats_going_on.rdoc +5 -0
  10. data/doc/writing_tests.rdoc +25 -13
  11. data/examples/components/rack-test.rb +17 -0
  12. data/examples/{tests/irb_mode → irb_mode}/failures.rb +0 -0
  13. data/examples/rake/test.rake +40 -0
  14. data/examples/tests/01_basics_I.rb +34 -0
  15. data/examples/tests/02_basics_II_helpers.rb +25 -0
  16. data/examples/tests/03_basics_III_setup_and_teardown.rb +53 -0
  17. data/examples/tests/04_advanced_I_dependencies.rb +31 -0
  18. data/examples/tests/05_advanced_II_tags.rb +12 -0
  19. data/examples/tests/06_advanced_III_requires.rb +21 -0
  20. data/examples/tests/07_advanced_IV_components.rb +48 -0
  21. data/examples/tests/08_expert_I_setup_variants.rb +46 -0
  22. data/lib/baretest.rb +142 -21
  23. data/lib/baretest/assertion.rb +83 -92
  24. data/lib/baretest/assertion/context.rb +9 -0
  25. data/lib/baretest/assertion/support.rb +88 -61
  26. data/lib/baretest/commandline.rb +268 -0
  27. data/lib/baretest/formatter.rb +58 -0
  28. data/lib/baretest/invalidselectors.rb +24 -0
  29. data/lib/baretest/irb_mode.rb +100 -58
  30. data/lib/baretest/persistence.rb +94 -0
  31. data/lib/baretest/run.rb +138 -37
  32. data/lib/baretest/run/cli.rb +97 -43
  33. data/lib/baretest/run/minimal.rb +2 -1
  34. data/lib/baretest/run/none.rb +21 -0
  35. data/lib/baretest/run/xml.rb +21 -19
  36. data/lib/baretest/setup.rb +2 -0
  37. data/lib/baretest/status.rb +93 -0
  38. data/lib/baretest/suite.rb +185 -59
  39. data/lib/baretest/uid.rb +51 -0
  40. data/lib/baretest/use/mocha.rb +24 -0
  41. data/lib/baretest/use/rack_test.rb +9 -0
  42. data/lib/baretest/use/rr.rb +17 -0
  43. data/lib/baretest/version.rb +18 -4
  44. data/lib/command.rb +36 -0
  45. data/lib/command/argument.rb +11 -0
  46. data/lib/command/decoratinghash.rb +31 -0
  47. data/lib/command/definition.rb +294 -0
  48. data/lib/command/directorynotfounderror.rb +11 -0
  49. data/lib/command/env.rb +11 -0
  50. data/lib/command/filenotfounderror.rb +11 -0
  51. data/lib/command/kernel.rb +14 -0
  52. data/lib/command/nodirectoryerror.rb +11 -0
  53. data/lib/command/nofileerror.rb +11 -0
  54. data/lib/command/option.rb +16 -0
  55. data/lib/command/parser.rb +145 -0
  56. data/lib/command/result.rb +11 -0
  57. data/lib/command/types.rb +33 -0
  58. data/lib/command/version.rb +28 -0
  59. data/test/setup.rb +3 -0
  60. data/test/suite/lib/baretest.rb +0 -178
  61. data/test/suite/lib/baretest/assertion.rb +133 -112
  62. data/test/suite/lib/baretest/assertion/context.rb +40 -0
  63. data/test/suite/lib/baretest/assertion/failure.rb +19 -0
  64. data/test/suite/lib/baretest/assertion/skip.rb +19 -0
  65. data/test/suite/lib/baretest/assertion/support.rb +366 -84
  66. data/test/suite/lib/baretest/run.rb +114 -15
  67. data/test/suite/lib/baretest/suite.rb +70 -29
  68. metadata +46 -24
  69. data/examples/test.rake +0 -65
  70. data/examples/tests/mock_developer/test/helper/mocks.rb +0 -0
  71. data/examples/tests/mock_developer/test/setup.rb +0 -57
  72. data/examples/tests/mock_developer/test/suite/mock_demo.rb +0 -19
  73. data/examples/tests/overview/test.rb +0 -89
  74. data/examples/tests/variations/variations_01.rb +0 -14
  75. data/examples/tests/variations/variations_02.rb +0 -19
  76. data/examples/tests/variations/variations_03.rb +0 -19
  77. data/lib/baretest/mocha.rb +0 -18
  78. data/lib/baretest/rr.rb +0 -16
  79. data/lib/baretest/run/errors.rb +0 -49
  80. data/lib/baretest/skipped.rb +0 -15
  81. data/lib/baretest/skipped/assertion.rb +0 -20
  82. data/lib/baretest/skipped/suite.rb +0 -49
  83. data/test/external/bootstraptest.rb +0 -5
  84. data/test/external/bootstrapwrap.rb +0 -2
  85. data/test/helper/mocks.rb +0 -0
@@ -6,66 +6,104 @@
6
6
 
7
7
 
8
8
 
9
- BareTest.suite "BareTest" do
10
- suite "Assertion" do
11
- suite "::new" do
12
- assert "Should return a ::BareTest::Assertion instance" do
13
- ::BareTest::Assertion.new(nil, "description") { nil }.class ==
14
- ::BareTest::Assertion
9
+ BareTest.suite 'BareTest' do
10
+ suite 'Assertion' do
11
+ suite '::new' do
12
+ assert 'Returns a ::BareTest::Assertion instance' do
13
+ instance_of ::BareTest::Assertion, ::BareTest::Assertion.new(nil, 'description') { nil }
15
14
  end
15
+ end
16
16
 
17
- assert "Should expect exactly 2 arguments" do
18
- raises(ArgumentError) { ::BareTest::Assertion.new() } &&
19
- raises(ArgumentError) { ::BareTest::Assertion.new(nil) } &&
20
- raises(ArgumentError) { ::BareTest::Assertion.new(nil, "foo", "bar") }
17
+ suite '#execute' do
18
+ suite 'An assertion with a block that returns true' do
19
+ assert 'Returns a Status with status :success' do
20
+ assertion = ::BareTest::Assertion.new(nil, 'description') do true end
21
+ status = assertion.execute
22
+ same(:success, status.status)
23
+ end
21
24
  end
22
- end
23
25
 
24
- suite "#status" do
25
- assert "A new Assertion should have a status of nil" do
26
- ::BareTest::Assertion.new(nil, "description") {}.status.nil?
26
+ suite 'An assertion with a block that returns false' do
27
+ setup do
28
+ @assertion = ::BareTest::Assertion.new(nil, 'description') do false end
29
+ end
30
+
31
+ assert 'Returns a Status with status :failure' do
32
+ status = @assertion.execute
33
+ same(:failure, status.status)
34
+ end
35
+
36
+ assert 'Returns a Status with failure reason "Assertion failed"' do
37
+ status = @assertion.execute
38
+ equal("Assertion failed", status.failure_reason)
39
+ end
27
40
  end
28
41
 
29
- assert "Executing an assertion with a block that returns true should be :success" do
30
- assertion_success = ::BareTest::Assertion.new(nil, "description") { true }
31
- assertion_success.execute
32
- assertion_success.status == :success
42
+ assert 'Executing an assertion with a block that raises a Failure should be :failure' do
43
+ assertion = ::BareTest::Assertion.new(nil, 'description') { raise ::BareTest::Assertion::Failure, 'just fail' }
44
+ status = assertion.execute
45
+ same(:failure, status.status)
33
46
  end
34
47
 
35
- assert "Executing an assertion with a block that returns false should be :failure" do
36
- assertion_success = ::BareTest::Assertion.new(nil, "description") { false }
37
- assertion_success.execute
38
- assertion_success.status == :failure
48
+ assert 'Executing an assertion with a block that raises should be :error' do
49
+ assertion = ::BareTest::Assertion.new(nil, 'description') { raise }
50
+ status = assertion.execute
51
+ same(:error, status.status)
39
52
  end
40
53
 
41
- assert "Executing an assertion with a block that raises a Failure should be :failure" do
42
- assertion_success = ::BareTest::Assertion.new(nil, "description") { raise ::BareTest::Assertion::Failure, "just fail" }
43
- assertion_success.execute
44
- assertion_success.status == :failure
54
+ assert 'Executing an assertion without a block should be :pending' do
55
+ assertion = ::BareTest::Assertion.new(nil, 'description')
56
+ status = assertion.execute
57
+ same(:pending, status.status)
45
58
  end
46
59
 
47
- assert "Executing an assertion with a block that raises should be :error" do
48
- assertion_success = ::BareTest::Assertion.new(nil, "description") { raise }
49
- assertion_success.execute
50
- assertion_success.status == :error
60
+ assert 'Executing an assertion with a block that raises a Skip should be :manually_skipped' do
61
+ assertion = ::BareTest::Assertion.new(nil, 'description') { raise ::BareTest::Assertion::Skip, 'just skip' }
62
+ status = assertion.execute
63
+ same(:manually_skipped, status.status)
51
64
  end
52
65
 
53
- assert "Executing an assertion without a block should be :pending" do
54
- assertion_success = ::BareTest::Assertion.new(nil, "description")
55
- assertion_success.execute
66
+ suite "With a skipped assertion" do
67
+ suite "That is pending" do
68
+ assert "Has status :manually_skipped" do
69
+ assertion = ::BareTest::Assertion.new(nil, "", :skip => true)
70
+ status = assertion.execute
56
71
 
57
- same :expected => :pending, :actual => assertion_success.status
58
- end
72
+ equal(:manually_skipped, status.status)
73
+ end
74
+ end
75
+
76
+ suite "Given a test that succeeds" do
77
+ assert "Should have status :skipped" do
78
+ assertion = ::BareTest::Assertion.new(nil, "", :skip => true) do true end
79
+ status = assertion.execute
80
+
81
+ equal(:manually_skipped, status.status)
82
+ end
83
+ end
59
84
 
60
- assert "Executing an assertion with a block that raises a Skip should be :skipped" do
61
- assertion_success = ::BareTest::Assertion.new(nil, "description") { raise ::BareTest::Assertion::Skip, "just skip" }
62
- assertion_success.execute
63
- assertion_success.status == :skipped
85
+ suite "Given a test that fails" do
86
+ assert "Should have status :skipped" do
87
+ assertion = ::BareTest::Assertion.new(nil, "", :skip => true) do false end
88
+ status = assertion.execute
89
+
90
+ equal(:manually_skipped, status.status)
91
+ end
92
+ end
93
+
94
+ suite "Given a test that errors" do
95
+ assert "Should have status :skipped" do
96
+ assertion = ::BareTest::Assertion.new(nil, "", :skip => true) do raise "something" end
97
+ status = assertion.execute
98
+
99
+ equal(:manually_skipped, status.status)
100
+ end
101
+ end
64
102
  end
65
- end
103
+ end # '#execute'
66
104
 
67
- suite "meta information" do
68
- assert "An assertion should have a valid line number and file" do
105
+ suite 'meta information' do
106
+ assert 'An assertion should have a valid line number and file' do
69
107
  suite = ::BareTest::Suite.new
70
108
  assertion = suite.assert do true end
71
109
 
@@ -73,98 +111,70 @@ BareTest.suite "BareTest" do
73
111
  end
74
112
  end
75
113
 
76
- suite "#exception" do
114
+ suite '#exception' do
77
115
  assert "An assertion that doesn't raise should have nil as exception" do
78
- assertion_success = ::BareTest::Assertion.new(nil, "description") { true }
79
- assertion_success.execute
80
- same :expected => nil, :actual => assertion_success.exception
116
+ assertion = ::BareTest::Assertion.new(nil, 'description') { true }
117
+ status = assertion.execute
118
+ same(nil, status.exception)
81
119
  end
82
120
  end
83
121
 
84
- suite "#description" do
85
- assert "An assertion should have a description" do
86
- description = "The assertion description"
122
+ suite '#description' do
123
+ assert 'An assertion should have a description' do
124
+ description = 'The assertion description'
87
125
  assertion = ::BareTest::Assertion.new(nil, description) { true }
88
126
  same :expected => description, :actual => assertion.description
89
127
  end
90
128
  end
91
129
 
92
- suite "#suite" do
93
- assert "An assertion can belong to a suite" do
130
+ suite '#suite' do
131
+ assert 'An assertion can belong to a suite' do
94
132
  suite = ::BareTest::Suite.new
95
- assertion = ::BareTest::Assertion.new(suite, "") { true }
133
+ assertion = ::BareTest::Assertion.new(suite, '') { true }
96
134
  same :expected => suite, :actual => assertion.suite
97
135
  end
98
136
  end
99
137
 
100
- suite "#block" do
101
- assert "An assertion can have a block" do
138
+ suite '#block' do
139
+ assert 'An assertion can have a block' do
102
140
  block = proc { true }
103
- assertion = ::BareTest::Assertion.new(nil, "", &block)
141
+ assertion = ::BareTest::Assertion.new(nil, '', &block)
104
142
  same :expected => block, :actual => assertion.block
105
143
  end
106
144
  end
107
145
 
108
- suite "#setup" do
109
- assert "Should run all enclosing suite's setup blocks, outermost first" do
110
- executed = []
111
- block1 = proc { executed << :block1 }
112
- block2 = proc { executed << :block2 }
113
- suite1 = ::BareTest::Suite.new("block1") do setup(&block1) end
114
- suite2 = ::BareTest::Suite.new("suite2", suite1) do setup(&block2) end
115
- assertion = ::BareTest::Assertion.new(suite2, "assertion")
116
-
117
- raises_nothing do assertion.setup end &&
118
- equal([:block1, :block2], executed)
119
- end
120
-
121
- assert "Should fail if setup raises an exception" do
122
- block = proc { raise "Some error" }
123
- suite = ::BareTest::Suite.new("block") do setup(&block) end
124
- assertion = ::BareTest::Assertion.new(suite, "assertion") do true end
146
+ suite '#setup' do
147
+ assert 'Fails if setup raises an exception' do
148
+ setup = proc { raise 'Some error' }
149
+ assertion = ::BareTest::Assertion.new(nil, 'assertion') do true end
150
+ status = assertion.execute([setup])
125
151
 
126
- assertion.execute
127
-
128
- equal(:error, assertion.status, "assertion.status")
152
+ same(:error, status.status, 'status.status')
129
153
  end
130
154
  end
131
155
 
132
- suite "#teardown" do
133
- assert "Should run all enclosing suite's teardown blocks, innermost first" do
134
- executed = []
135
- block1 = proc { executed << :block1 }
136
- block2 = proc { executed << :block2 }
137
- suite1 = ::BareTest::Suite.new("block1") do teardown(&block1) end
138
- suite2 = ::BareTest::Suite.new("suite2", suite1) do teardown(&block2) end
139
- assertion = ::BareTest::Assertion.new(suite2, "assertion")
140
-
141
- raises_nothing do assertion.teardown end &&
142
- equal([:block2, :block1], executed)
143
- end
144
-
145
- assert "Should fail if teardown raises an exception" do
146
- block = proc { raise "Some error" }
147
- suite = ::BareTest::Suite.new("block") do teardown(&block) end
148
- assertion = ::BareTest::Assertion.new(suite, "assertion") do true end
149
-
150
- assertion.execute
156
+ suite '#teardown' do
157
+ assert 'Fails if teardown raises an exception' do
158
+ teardown = proc { raise 'Some error' }
159
+ assertion = ::BareTest::Assertion.new(nil, 'assertion') do true end
160
+ status = assertion.execute(nil, [teardown])
151
161
 
152
- assertion.status == :error
162
+ same(:error, status.status, 'status.status')
153
163
  end
154
164
  end
155
165
 
156
- suite "#execute" do
157
- assert "Execute will run the assertion's block" do
166
+ suite '#execute' do
167
+ assert "Runs the assertion's block" do
158
168
  this = self # needed because touch is called in the block of another assertion, so otherwise it'd be local to that assertion
159
- assertion = ::BareTest::Assertion.new(nil, "") { this.touch(:execute) }
169
+ assertion = ::BareTest::Assertion.new(nil, '') { this.touch(:execute) }
160
170
  assertion.execute
161
171
  touched(:execute)
162
172
  end
163
173
  end
164
174
 
165
- suite "#to_s" do
166
- assert "Assertion should have a to_s which contains the classname and the description" do
167
- description = "the description"
175
+ suite '#to_s' do
176
+ assert 'Assertion should have a to_s which contains the classname and the description' do
177
+ description = 'the description'
168
178
  assertion = ::BareTest::Assertion.new(nil, description)
169
179
  print_string = assertion.to_s
170
180
 
@@ -173,19 +183,30 @@ BareTest.suite "BareTest" do
173
183
  end
174
184
  end
175
185
 
176
- suite "#inspect" do
177
- assert "Assertion should have an inspect which contains the classname, the shifted object-id in zero-padded hex, the suite's inspect and the description's inspect" do
178
- suite = ::BareTest::Suite.new
179
- description = "the description"
180
- assertion = ::BareTest::Assertion.new(suite, description)
181
- def suite.inspect; "<inspect of suite>"; end
186
+ suite '#inspect' do
187
+ setup do
188
+ @suite = ::BareTest::Suite.new
189
+ def @suite.inspect; '<inspect of suite>'; end
182
190
 
183
- inspect_string = assertion.inspect
191
+ @description = 'the description'
192
+ @assertion = ::BareTest::Assertion.new(@suite, @description)
193
+ @inspect_string = @assertion.inspect
194
+ end
195
+
196
+ assert 'Should contain the classname' do
197
+ @inspect_string.include?(@assertion.class.name)
198
+ end
199
+
200
+ assert 'Should contain the shifted object-id in zero-padded hex' do
201
+ @inspect_string.include?('%08x' % (@assertion.object_id >> 1))
202
+ end
203
+
204
+ assert "Should contain the suite's inspect" do
205
+ @inspect_string.include?(@suite.inspect)
206
+ end
184
207
 
185
- inspect_string.include?(assertion.class.name) &&
186
- inspect_string.include?("%08x" % (assertion.object_id >> 1)) &&
187
- inspect_string.include?(suite.inspect) &&
188
- inspect_string.include?(description.inspect)
208
+ assert "Should contain the description's inspect" do
209
+ @inspect_string.include?(@description.inspect)
189
210
  end
190
211
  end
191
212
  end
@@ -0,0 +1,40 @@
1
+ #--
2
+ # Copyright 2010 by Stefan Rusterholz.
3
+ # All rights reserved.
4
+ # See LICENSE.txt for permissions.
5
+ #++
6
+
7
+
8
+
9
+ BareTest.suite "BareTest" do
10
+ suite "Assertion" do
11
+ suite "Context" do
12
+ suite "::new" do
13
+ suite "Expects 1 argument" do
14
+ assert "Raises ArgumentError with less than 1 argument" do
15
+ raises ArgumentError do BareTest::Assertion::Context.new end
16
+ end
17
+
18
+ assert "Returns a Context with 1 argument" do
19
+ kind_of BareTest::Assertion::Context, BareTest::Assertion::Context.new(Object.new)
20
+ end
21
+
22
+ assert "Raises ArgumentError with more than 1 argument" do
23
+ raises ArgumentError do BareTest::Assertion::Context.new(Object.new, Object.new) end
24
+ end
25
+ end
26
+ end # ::new
27
+
28
+ suite "#__assertion__" do
29
+ setup do
30
+ @assertion = Object.new
31
+ @context = BareTest::Assertion::Context.new(@assertion)
32
+ end
33
+
34
+ assert "Returns the assertion the context was constructed with" do
35
+ same(@assertion, @context.__assertion__)
36
+ end
37
+ end
38
+ end # Context
39
+ end # Assertion
40
+ end # BareTest
@@ -0,0 +1,19 @@
1
+ #--
2
+ # Copyright 2010 by Stefan Rusterholz.
3
+ # All rights reserved.
4
+ # See LICENSE.txt for permissions.
5
+ #++
6
+
7
+
8
+
9
+ BareTest.suite "BareTest" do
10
+ suite "Assertion" do
11
+ suite "Failure" do
12
+ assert "Can be raised" do
13
+ raises BareTest::Assertion::Failure do
14
+ raise BareTest::Assertion::Failure, "raised"
15
+ end
16
+ end
17
+ end # Context
18
+ end # Assertion
19
+ end # BareTest
@@ -0,0 +1,19 @@
1
+ #--
2
+ # Copyright 2010 by Stefan Rusterholz.
3
+ # All rights reserved.
4
+ # See LICENSE.txt for permissions.
5
+ #++
6
+
7
+
8
+
9
+ BareTest.suite "BareTest" do
10
+ suite "Assertion" do
11
+ suite "Skip" do
12
+ assert "Can be raised" do
13
+ raises BareTest::Assertion::Skip do
14
+ raise BareTest::Assertion::Skip, "raised"
15
+ end
16
+ end
17
+ end # Context
18
+ end # Assertion
19
+ end # BareTest
@@ -6,50 +6,295 @@
6
6
 
7
7
 
8
8
 
9
- module BareTest
10
- class Assertion
11
- class Context
12
- # used here to test for failure
13
- def fails # :nodoc:
14
- failed = false
15
- begin
16
- failed = !yield
17
- rescue ::BareTest::Assertion::Failure
18
- failed = true
19
- end
20
- unless failed then
21
- failure "Expected the block to fail, but it returned a true value."
22
- end
23
-
24
- true
25
- end
26
- end
27
- end
28
- end
9
+ # FIXME: These tests are actually integration tests and not properly isolated
10
+ # (they depend on Assertion, Status and their own integration).
11
+ # Slated to be fixed in version 0.9
12
+
13
+
29
14
 
30
15
  BareTest.suite "BareTest" do
31
16
  suite "Assertion" do
32
17
  suite "Support" do
18
+ suite "#yields" do
19
+ suite "If the expected values are yielded" do
20
+ setup do
21
+ @assertion = BareTest::Assertion.new nil, "test" do yields([1,2,3], :each, [], [1],[2],[3]) end
22
+ @status = @assertion.execute
23
+ end
24
+
25
+ assert "Succeeds" do
26
+ same(:success, @status.status)
27
+ end
28
+ end
29
+
30
+ suite "If different values than expected are yielded" do
31
+ setup do
32
+ @assertion = BareTest::Assertion.new nil, "test" do yields([1,2,3], :each, [], [2],[4],[8]) end
33
+ @status = @assertion.execute
34
+ end
35
+
36
+ assert "Fails" do
37
+ same(:failure, @status.status)
38
+ end
39
+ end
40
+ end
41
+
42
+ suite "#throws" do
43
+ suite "If the expected symbol is thrown" do
44
+ setup do
45
+ @assertion = BareTest::Assertion.new nil, "test" do
46
+ throws :catchme do
47
+ throw :catchme
48
+ end
49
+ end
50
+ @status = @assertion.execute
51
+ end
52
+
53
+ assert "Succeeds" do
54
+ same(:success, @status.status)
55
+ end
56
+ end
57
+
58
+ suite "If a different symbol than the expected is thrown" do
59
+ setup do
60
+ @assertion = BareTest::Assertion.new nil, "test" do
61
+ throws :catchme do
62
+ throw :something_else
63
+ end
64
+ end
65
+ @status = @assertion.execute
66
+ end
67
+
68
+ assert "Fails" do
69
+ same(:failure, @status.status)
70
+ end
71
+
72
+ assert "The message states what symbol was expected to be thrown and what was thrown instead" do
73
+ equal("Expected the code to throw :catchme, but it threw :something_else instead", @status.failure_reason)
74
+ end
75
+ end
76
+
77
+ suite "If nothing is thrown" do
78
+ setup do
79
+ @assertion = BareTest::Assertion.new nil, "test" do
80
+ throws :catchme do
81
+ true # don't throw anything, just return
82
+ end
83
+ end
84
+ @status = @assertion.execute
85
+ end
86
+
87
+ assert "Fails" do
88
+ same(:failure, @status.status)
89
+ end
90
+
91
+ assert "The message states what symbol was expected to be thrown and that nothing was thrown instead" do
92
+ equal("Expected the code to throw :catchme, but nothing was thrown", @status.failure_reason)
93
+ end
94
+ end
95
+ end
96
+
33
97
  suite "#raises" do
34
- assert "Should not fail when used without argument and the block raises an exception derived from StandardError." do
35
- raises do raise "foo" end
98
+ suite "Used without an argument and a block that raises an exception" do
99
+ setup do
100
+ @assertion = BareTest::Assertion.new nil, "test" do
101
+ raises do
102
+ raise "foo"
103
+ end
104
+ end
105
+ @status = @assertion.execute
106
+ end
107
+
108
+ assert "Succeeds" do
109
+ same(:success, @status.status)
110
+ end
36
111
  end
37
112
 
38
- assert "Should not fail when the block raises an exception derived from the provided exception-class." do
39
- raises(ArgumentError) do raise ArgumentError, "foo" end
113
+ suite "Used with an exception class as argument and a block that raises an exception of that class" do
114
+ setup do
115
+ @assertion = BareTest::Assertion.new nil, "test" do
116
+ raises(ArgumentError) do
117
+ raise ArgumentError, "foo"
118
+ end
119
+ end
120
+ @status = @assertion.execute
121
+ end
122
+
123
+ assert "Succeeds" do
124
+ same(:success, @status.status)
125
+ end
40
126
  end
41
127
 
42
- assert "Should fail when used without argument and the block doesn't raise." do
43
- begin
44
- raises do "nothing raised -> should fail" end
45
- rescue ::BareTest::Assertion::Failure
46
- true
47
- else
48
- false
128
+ suite "Used with an exception class and a message string as arguments and a block that raises an exception of that class with that message" do
129
+ setup do
130
+ @assertion = BareTest::Assertion.new nil, "test" do
131
+ raises(ArgumentError, "foo") do
132
+ raise ArgumentError, "foo"
133
+ end
134
+ end
135
+ @status = @assertion.execute
136
+ end
137
+
138
+ assert "Succeeds" do
139
+ same(:success, @status.status)
140
+ end
141
+ end
142
+
143
+ suite "Used with an exception class and a message regex as arguments and a block that raises an exception of that class with a matching message" do
144
+ setup do
145
+ @assertion = BareTest::Assertion.new nil, "test" do
146
+ raises(ArgumentError, /fo[aeiou]/) do
147
+ raise ArgumentError, "foo"
148
+ end
149
+ end
150
+ @status = @assertion.execute
151
+ end
152
+
153
+ assert "Succeeds" do
154
+ same(:success, @status.status)
155
+ end
156
+ end
157
+
158
+ suite "Used with an exception class as argument and a block that raises an exception that is a subclass of that class" do
159
+ setup do
160
+ @expected = StandardError
161
+ @actual = ArgumentError
162
+ expected = @expected
163
+ actual = @actual
164
+ @assertion = BareTest::Assertion.new nil, "test" do
165
+ raises(expected) do
166
+ raise actual, "foo"
167
+ end
168
+ end
169
+ @status = @assertion.execute
170
+ end
171
+
172
+ guard "Actual exception class is a subclass of expected exception class" do
173
+ @actual < @expected
174
+ end
175
+
176
+ assert "Fails" do
177
+ same(:failure, @status.status)
178
+ end
179
+
180
+ assert "The message states what exception-class was expected to be raised and what was raised instead" do
181
+ equal("Expected the code to raise #{@expected.name}, but it raised #{@actual.name} instead", @status.failure_reason)
182
+ end
183
+ end
184
+
185
+ suite "Used with an exception class as argument and a block that raises an exception that is of a different class" do
186
+ setup do
187
+ @expected = expected = NameError
188
+ @actual = actual = ArgumentError
189
+ @assertion = BareTest::Assertion.new nil, "test" do
190
+ raises(expected) do
191
+ raise actual, "foo"
192
+ end
193
+ end
194
+ @status = @assertion.execute
195
+ end
196
+
197
+ guard "Actual exception class is a different class than expected exception class" do
198
+ (@actual <=> @expected).nil?
199
+ end
200
+
201
+ assert "Fails" do
202
+ same(:failure, @status.status)
203
+ end
204
+
205
+ assert "The message states what message was expected to be raised and what was raised instead" do
206
+ equal("Expected the code to raise #{@expected.name}, but it raised #{@actual.name} instead", @status.failure_reason)
207
+ end
208
+ end
209
+
210
+ suite "Used with an exception class and a message string as arguments and a block that raises an exception of that class but with a different message" do
211
+ setup do
212
+ @expected_message = expected_message = "foo"
213
+ @actual_message = actual_message = "bar"
214
+ @assertion = BareTest::Assertion.new nil, "test" do
215
+ raises(ArgumentError, expected_message) do
216
+ raise ArgumentError, actual_message
217
+ end
218
+ end
219
+ @status = @assertion.execute
220
+ end
221
+
222
+ assert "Fails" do
223
+ same(:failure, @status.status)
224
+ end
225
+
226
+ assert "The message states what exception-class was expected to be raised and what was raised instead" do
227
+ equal(
228
+ "Expected the code to raise with the message #{@expected_message.inspect}, but the message was #{@actual_message.inspect}",
229
+ @status.failure_reason
230
+ )
231
+ end
232
+ end
233
+
234
+ suite "Used with an exception class and a message regex as arguments and a block that raises an exception of that class with a different message" do
235
+ setup do
236
+ @expected_message = expected_message = /fo[aeiou]/
237
+ @actual_message = actual_message = "bar"
238
+ @assertion = BareTest::Assertion.new nil, "test" do
239
+ raises(ArgumentError, expected_message) do
240
+ raise ArgumentError, actual_message
241
+ end
242
+ end
243
+ @status = @assertion.execute
244
+ end
245
+
246
+ assert "Fails" do
247
+ same(:failure, @status.status)
248
+ end
249
+
250
+ assert "The message states what exception-class was expected to be raised and what was raised instead" do
251
+ equal(
252
+ "Expected the code to raise with the message #{@expected_message.inspect}, but the message was #{@actual_message.inspect}",
253
+ @status.failure_reason
254
+ )
255
+ end
256
+ end
257
+
258
+ suite "Used without argument and a block that doesn't raise" do
259
+ setup do
260
+ @assertion = BareTest::Assertion.new nil, "test" do
261
+ raises do
262
+ "nothing raised -> should fail"
263
+ end
264
+ end
265
+ @status = @assertion.execute
266
+ end
267
+
268
+ assert "Fails" do
269
+ same(:failure, @status.status)
270
+ end
271
+
272
+ assert "The message states what exception-class was expected to be raised and what was raised instead" do
273
+ equal("Expected the code to raise, but nothing was raised", @status.failure_reason)
49
274
  end
50
275
  end
51
276
 
52
- assert "Should fail when the block raises an exception not derived from the provided exception-class." do
277
+ suite "Used with an exception class as argument and a block that doesn't raise" do
278
+ setup do
279
+ @expected = expected = ArgumentError
280
+ @assertion = BareTest::Assertion.new nil, "test" do
281
+ raises(ArgumentError) do
282
+ "nothing raised -> should fail"
283
+ end
284
+ end
285
+ @status = @assertion.execute
286
+ end
287
+
288
+ assert "Fails" do
289
+ same(:failure, @status.status)
290
+ end
291
+
292
+ assert "The message states what exception-class was expected to be raised and that nothing was raised instead" do
293
+ equal("Expected the code to raise ArgumentError, but nothing was raised", @status.failure_reason)
294
+ end
295
+ end
296
+
297
+ assert "Should fail when the block raises an exception not derived from the provided exception-class" do
53
298
  begin
54
299
  raises(TypeError) do raise ArgumentError, "different class -> should fail" end
55
300
  rescue ::BareTest::Assertion::Failure
@@ -61,17 +306,37 @@ BareTest.suite "BareTest" do
61
306
  end # raises
62
307
 
63
308
  suite "#raises_nothing" do
64
- assert "Should not fail when the block doesn't raise." do
65
- raises_nothing do; end
309
+ suite "Used with a block that doesn't raise" do
310
+ setup do
311
+ @assertion = BareTest::Assertion.new nil, "test" do
312
+ raises_nothing do
313
+ "nothing raised -> should succeed"
314
+ end
315
+ end
316
+ @status = @assertion.execute
317
+ end
318
+
319
+ assert "Succeeds" do
320
+ same(:success, @status.status)
321
+ end
66
322
  end
67
323
 
68
- assert "Should fail when the block raises." do
69
- begin
70
- raises_nothing do raise "anything" end
71
- rescue ::BareTest::Assertion::Failure
72
- true
73
- else
74
- false
324
+ suite "Used with a block that raises" do
325
+ setup do
326
+ @assertion = BareTest::Assertion.new nil, "test" do
327
+ raises_nothing do
328
+ raise "Something"
329
+ end
330
+ end
331
+ @status = @assertion.execute
332
+ end
333
+
334
+ assert "Fails" do
335
+ same(:failure, @status.status)
336
+ end
337
+
338
+ assert "The message states that it was not expected to raise anything but that something was raised" do
339
+ equal("Expected the code to raise nothing, but it raised RuntimeError (Something)", @status.failure_reason)
75
340
  end
76
341
  end
77
342
  end
@@ -79,13 +344,13 @@ BareTest.suite "BareTest" do
79
344
  suite "#touch/#touched" do
80
345
  suite "When you don't touch(x), touched(x) should fail" do
81
346
  assert "When you don't touch at all, touched(x) should fail" do
82
- fails do
347
+ raises ::BareTest::Assertion::Failure do
83
348
  touched :foo1
84
349
  end
85
350
  end
86
351
 
87
352
  assert "When you don't touch something else, touched(x) should fail" do
88
- fails do
353
+ raises ::BareTest::Assertion::Failure do
89
354
  touch :bar2
90
355
  touched :foo2
91
356
  end
@@ -109,68 +374,68 @@ BareTest.suite "BareTest" do
109
374
  touch(:foo5)
110
375
  end
111
376
 
112
- assert "No touch x, touched x should raise." do
113
- fails do touched(:foo5) end
377
+ assert "No touch x, touched x should raise" do
378
+ raises ::BareTest::Assertion::Failure do touched(:foo5) end
114
379
  end
115
380
  end
116
381
  end # #touch/#touched
117
382
 
118
383
  suite "#within_delta" do
119
- assert "Should not fail when the value is within the delta." do
384
+ assert "Should not fail when the value is within the delta" do
120
385
  within_delta(3.0, 3.01, 0.02)
121
386
  end
122
387
 
123
- assert "Should fail when the value is not within the delta." do
124
- fails do
388
+ assert "Should fail when the value is not within the delta" do
389
+ raises ::BareTest::Assertion::Failure do
125
390
  within_delta(3.0, 3.03, 0.02)
126
391
  end
127
392
  end
128
393
 
129
- assert "Should fail with invalid input." do
130
- fails do
394
+ assert "Should fail with invalid input" do
395
+ raises ::BareTest::Assertion::Failure do
131
396
  within_delta(nil, nil, 0.02)
132
397
  end
133
398
  end
134
399
  end # within_delta
135
400
 
136
401
  suite "#equal_unordered" do
137
- assert "Should not fail when the two arrays contain the same items the same number of times." do
402
+ assert "Should not fail when the two arrays contain the same items the same number of times" do
138
403
  equal_unordered([1,2,3], [3,1,2])
139
404
  end
140
405
 
141
- assert "Should fail when the two arrays don't contain the same items." do
142
- fails do
406
+ assert "Should fail when the two arrays don't contain the same items" do
407
+ raises ::BareTest::Assertion::Failure do
143
408
  equal_unordered([1,2,3], [5,6,1])
144
409
  end
145
410
  end
146
411
 
147
- assert "Should fail when the two arrays contain the same items a different number of times." do
148
- fails do
412
+ assert "Should fail when the two arrays contain the same items a different number of times" do
413
+ raises ::BareTest::Assertion::Failure do
149
414
  equal_unordered([1,2,3], [3,1,2,2])
150
415
  end
151
416
  end
152
417
 
153
- assert "Should fail with invalid input." do
154
- fails do
418
+ assert "Should fail with invalid input" do
419
+ raises ::BareTest::Assertion::Failure do
155
420
  equal_unordered(nil, nil)
156
421
  end
157
422
  end
158
423
  end # equal_unordered
159
424
 
160
425
  suite "#same" do
161
- assert "Should not fail when the values are the same object." do
426
+ assert "Should not fail when the values are the same object" do
162
427
  a = "foo"
163
428
  same(a, a)
164
429
  end
165
430
 
166
- assert "Should fail when the values are not the same object." do
167
- fails do
431
+ assert "Should fail when the values are not the same object" do
432
+ raises ::BareTest::Assertion::Failure do
168
433
  same("a", "b")
169
434
  end
170
435
  end
171
436
 
172
- assert "Should fail with invalid input." do
173
- fails do
437
+ assert "Should fail with invalid input" do
438
+ raises ::BareTest::Assertion::Failure do
174
439
  x = Class.new do undef equal? end # really, who does that?
175
440
  y = x.new
176
441
  equal_unordered(y, y)
@@ -179,18 +444,18 @@ BareTest.suite "BareTest" do
179
444
  end # same
180
445
 
181
446
  suite "#order_equal" do
182
- assert "Should not fail when the values are equal by ==." do
447
+ assert "Should not fail when the values are equal by ==" do
183
448
  order_equal(1, 1.0)
184
449
  end
185
450
 
186
- assert "Should fail when the values are not equal by ==." do
187
- fails do
451
+ assert "Should fail when the values are not equal by ==" do
452
+ raises ::BareTest::Assertion::Failure do
188
453
  order_equal(1, 1.1)
189
454
  end
190
455
  end
191
456
 
192
- assert "Should fail with invalid input." do
193
- fails do
457
+ assert "Should fail with invalid input" do
458
+ raises ::BareTest::Assertion::Failure do
194
459
  x = Class.new do undef == end
195
460
  y = x.new
196
461
  order_equal(y, y)
@@ -199,18 +464,18 @@ BareTest.suite "BareTest" do
199
464
  end # order_equal
200
465
 
201
466
  suite "#hash_key_equal" do
202
- assert "Should not fail when the values are the same object." do
467
+ assert "Should not fail when the values are the same object" do
203
468
  hash_key_equal("foo", "foo")
204
469
  end
205
470
 
206
- assert "Should fail when the values are not the same object." do
207
- fails do
471
+ assert "Should fail when the values are not the same object" do
472
+ raises ::BareTest::Assertion::Failure do
208
473
  hash_key_equal("foo", "bar")
209
474
  end
210
475
  end
211
476
 
212
- assert "Should fail with invalid input." do
213
- fails do
477
+ assert "Should fail with invalid input" do
478
+ raises ::BareTest::Assertion::Failure do
214
479
  x = Class.new do undef eql? end
215
480
  y = x.new
216
481
  hash_key_equal(y, y)
@@ -219,18 +484,18 @@ BareTest.suite "BareTest" do
219
484
  end # hash_key_equal
220
485
 
221
486
  suite "#case_equal" do
222
- assert "Should not fail when the values are the same object." do
487
+ assert "Should not fail when the values are the same object" do
223
488
  case_equal(String, "foo")
224
489
  end
225
490
 
226
- assert "Should fail when the values are not the same object." do
227
- fails do
491
+ assert "Should fail when the values are not the same object" do
492
+ raises ::BareTest::Assertion::Failure do
228
493
  case_equal(String, [])
229
494
  end
230
495
  end
231
496
 
232
- assert "Should fail with invalid input." do
233
- fails do
497
+ assert "Should fail with invalid input" do
498
+ raises ::BareTest::Assertion::Failure do
234
499
  x = Class.new do undef === end
235
500
  y = x.new
236
501
  case_equal(y, y)
@@ -248,12 +513,29 @@ BareTest.suite "BareTest" do
248
513
  end
249
514
 
250
515
  assert "Should fail when the value is not instance of the given class or subclass" do
251
- fails do
516
+ raises ::BareTest::Assertion::Failure do
252
517
  kind_of(String, [])
253
518
  end
254
519
  end
255
520
  end
256
521
 
522
+ suite "#respond_to" do
523
+ assert "Should not fail when the object responds to all methods required" do
524
+ obj = Object.new
525
+ def obj.foo; end
526
+ def obj.bar; end
527
+ respond_to(obj, :foo, :bar)
528
+ end
529
+
530
+ assert "Should fail when the object doesn't respond to all methods required" do
531
+ raises ::BareTest::Assertion::Failure do
532
+ obj = Object.new
533
+ def obj.foo; end
534
+ respond_to(obj, :foo, :bar)
535
+ end
536
+ end
537
+ end
538
+
257
539
  suite "#failure_with_optional_message" do
258
540
  assert "Should raise a BareTest::Assertion::Failure" do
259
541
  raises(::BareTest::Assertion::Failure) do
@@ -262,30 +544,30 @@ BareTest.suite "BareTest" do
262
544
  end
263
545
 
264
546
  assert "Should use the string with message if message is given" do
265
- raises(::BareTest::Assertion::Failure, :with_message => "With message") do
547
+ raises(::BareTest::Assertion::Failure, "With message") do
266
548
  failure_with_optional_message "With %s", "Without message", "message"
267
549
  end
268
550
  end
269
551
 
270
552
  assert "Should use the string without message if no message is given" do
271
- raises(::BareTest::Assertion::Failure, :with_message => "Without message") do
553
+ raises(::BareTest::Assertion::Failure, "Without message") do
272
554
  failure_with_optional_message "With %s", "Without message", nil
273
555
  end
274
556
  end
275
557
  end
276
558
 
277
559
  suite "#failure" do
278
- assert "Should raise a BareTest::Assertion::Failure." do
560
+ assert "Should raise a BareTest::Assertion::Failure" do
279
561
  raises(::BareTest::Assertion::Failure) do
280
- failure "Should raise that exception."
562
+ failure "Should raise that exception"
281
563
  end
282
564
  end
283
565
  end
284
566
 
285
567
  suite "#skip" do
286
- assert "Should raise a BareTest::Assertion::Skip." do
568
+ assert "Should raise a BareTest::Assertion::Skip" do
287
569
  raises(::BareTest::Assertion::Skip) do
288
- skip "Should raise that exception."
570
+ skip "Should raise that exception"
289
571
  end
290
572
  end
291
573
  end