Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Newer
Older
100644 276 lines (241 sloc) 10.106 kb
a26ec9b copy tests from c ruby
xue.yong.zhi authored
1 # Author:: Nathaniel Talbott.
2 # Copyright:: Copyright (c) 2000-2002 Nathaniel Talbott. All rights reserved.
3 # License:: Ruby license.
4
5 require 'test/unit'
6
7 module Test
8 module Unit
9 class TC_TestCase < TestCase
10 def test_creation
11 tc = Class.new(TestCase) do
12 def test_with_arguments(arg1, arg2)
13 end
14 end
15
16 caught = true
17 catch(:invalid_test) do
18 tc.new(:test_with_arguments)
19 caught = false
20 end
21 check("Should have caught an invalid test when there are arguments", caught)
22
23 caught = true
24 catch(:invalid_test) do
25 tc.new(:non_existent_test)
26 caught = false
27 end
28 check("Should have caught an invalid test when the method does not exist", caught)
29 end
30
31 def setup
32 @tc_failure_error = Class.new(TestCase) do
33 def test_failure
34 assert_block("failure") { false }
35 end
36 def test_error
37 1 / 0
38 end
39 def test_nested_failure
40 nested
41 end
42 def nested
43 assert_block("nested"){false}
44 end
45 def return_passed?
46 return passed?
47 end
48 end
49
50 def @tc_failure_error.name
51 "TC_FailureError"
52 end
53 end
54
55 def test_add_failed_assertion
56 test_case = @tc_failure_error.new(:test_failure)
57 check("passed? should start out true", test_case.return_passed?)
58 result = TestResult.new
59 called = false
60 result.add_listener(TestResult::FAULT) {
61 | fault |
62 check("Should have a Failure", fault.instance_of?(Failure))
63 check("The Failure should have the correct message", "failure" == fault.message)
64 check("The Failure should have the correct test_name (was <#{fault.test_name}>)", fault.test_name == "test_failure(TC_FailureError)")
65 r = /\A.*#{Regexp.escape(File.basename(__FILE__))}:\d+:in `test_failure'\Z/
66
67 location = fault.location
68 check("The location should be an array", location.kind_of?(Array))
69 check("The location should have two lines (was: <#{location.inspect}>)", location.size == 2)
70 check("The Failure should have the correct location (was <#{location[0].inspect}>, expected <#{r.inspect}>)", r =~ location[0])
71 called = true
72 }
73 progress = []
74 test_case.run(result) { |*arguments| progress << arguments }
75 check("The failure should have triggered the listener", called)
76 check("The failure should have set passed?", !test_case.return_passed?)
77 check("The progress block should have been updated correctly", [[TestCase::STARTED, test_case.name], [TestCase::FINISHED, test_case.name]] == progress)
78 end
79
80 def test_add_failure_nested
81 test_case = @tc_failure_error.new(:test_nested_failure)
82 check("passed? should start out true", test_case.return_passed?)
83
84 result = TestResult.new
85 called = false
86 result.add_listener(TestResult::FAULT) {
87 | fault |
88 check("Should have a Failure", fault.instance_of?(Failure))
89 check("The Failure should have the correct message", "nested" == fault.message)
90 check("The Failure should have the correct test_name (was <#{fault.test_name}>)", fault.test_name == "test_nested_failure(TC_FailureError)")
91 r =
92
93 location = fault.location
94 check("The location should be an array", location.kind_of?(Array))
95 check("The location should have the correct number of lines (was: <#{location.inspect}>)", location.size == 3)
96 check("The Failure should have the correct location (was <#{location[0].inspect}>)", /\A.*#{Regexp.escape(File.basename(__FILE__))}:\d+:in `nested'\Z/ =~ location[0])
97 check("The Failure should have the correct location (was <#{location[1].inspect}>)", /\A.*#{Regexp.escape(File.basename(__FILE__))}:\d+:in `test_nested_failure'\Z/ =~ location[1])
98 called = true
99 }
100 test_case.run(result){}
101 check("The failure should have triggered the listener", called)
102 end
103
104 def test_add_error
105 test_case = @tc_failure_error.new(:test_error)
106 check("passed? should start out true", test_case.return_passed?)
107 result = TestResult.new
108 called = false
109 result.add_listener(TestResult::FAULT) {
110 | fault |
111 check("Should have a TestError", fault.instance_of?(Error))
112 check("The Error should have the correct message", "ZeroDivisionError: divided by 0" == fault.message)
113 check("The Error should have the correct test_name", "test_error(TC_FailureError)" == fault.test_name)
114 check("The Error should have the correct exception", fault.exception.instance_of?(ZeroDivisionError))
115 called = true
116 }
117 test_case.run(result) {}
118 check("The error should have triggered the listener", called)
119 check("The error should have set passed?", !test_case.return_passed?)
120 end
121
122 def test_no_tests
123 suite = TestCase.suite
124 check("Should have a test suite", suite.instance_of?(TestSuite))
125 check("Should have one test", suite.size == 1)
126 check("Should have the default test", suite.tests.first.name == "default_test(Test::Unit::TestCase)")
127
128 result = TestResult.new
129 suite.run(result) {}
130 check("Should have had one test run", result.run_count == 1)
131 check("Should have had one test failure", result.failure_count == 1)
132 check("Should have had no errors", result.error_count == 0)
133 end
134
135 def test_suite
136 tc = Class.new(TestCase) do
137 def test_succeed
138 assert_block {true}
139 end
140 def test_fail
141 assert_block {false}
142 end
143 def test_error
144 1/0
145 end
146 def dont_run
147 assert_block {true}
148 end
149 def test_dont_run(argument)
150 assert_block {true}
151 end
152 def test
153 assert_block {true}
154 end
155 end
156
157 suite = tc.suite
158 check("Should have a test suite", suite.instance_of?(TestSuite))
159 check("Should have three tests", suite.size == 3)
160
161 result = TestResult.new
162 suite.run(result) {}
163 check("Should have had three test runs", result.run_count == 3)
164 check("Should have had one test failure", result.failure_count == 1)
165 check("Should have had one test error", result.error_count == 1)
166 end
167
168
169 def test_setup_teardown
170 tc = Class.new(TestCase) do
171 attr_reader(:setup_called, :teardown_called)
172 def initialize(test)
173 super(test)
174 @setup_called = false
175 @teardown_called = false
176 end
177 def setup
178 @setup_called = true
179 end
180 def teardown
181 @teardown_called = true
182 end
183 def test_succeed
184 assert_block {true}
185 end
186 def test_fail
187 assert_block {false}
188 end
189 def test_error
190 raise "Error!"
191 end
192 end
193 result = TestResult.new
194
195 test = tc.new(:test_succeed)
196 test.run(result) {}
197 check("Should have called setup the correct number of times", test.setup_called)
198 check("Should have called teardown the correct number of times", test.teardown_called)
199
200 test = tc.new(:test_fail)
201 test.run(result) {}
202 check("Should have called setup the correct number of times", test.setup_called)
203 check("Should have called teardown the correct number of times", test.teardown_called)
204
205 test = tc.new(:test_error)
206 test.run(result) {}
207 check("Should have called setup the correct number of times", test.setup_called)
208 check("Should have called teardown the correct number of times", test.teardown_called)
209
210 check("Should have had two test runs", result.run_count == 3)
211 check("Should have had a test failure", result.failure_count == 1)
212 check("Should have had a test error", result.error_count == 1)
213 end
214
215 def test_assertion_failed_not_called
216 tc = Class.new(TestCase) do
217 def test_thing
218 raise AssertionFailedError.new
219 end
220 end
221
222 suite = tc.suite
223 check("Should have one test", suite.size == 1)
224 result = TestResult.new
225 suite.run(result) {}
226 check("Should have had one test run", result.run_count == 1)
227 check("Should have had one assertion failure", result.failure_count == 1)
228 check("Should not have any assertion errors but had #{result.error_count}", result.error_count == 0)
229 end
230
231 def test_equality
232 tc1 = Class.new(TestCase) do
233 def test_1
234 end
235 def test_2
236 end
237 end
238
239 tc2 = Class.new(TestCase) do
240 def test_1
241 end
242 end
243
244 test1 = tc1.new('test_1')
245 test2 = tc1.new('test_1')
246 check("Should be equal", test1 == test2)
247 check("Should be equal", test2 == test1)
248
249 test1 = tc1.new('test_2')
250 check("Should not be equal", test1 != test2)
251 check("Should not be equal", test2 != test1)
252
253 test2 = tc1.new('test_2')
254 check("Should be equal", test1 == test2)
255 check("Should be equal", test2 == test1)
256
257 test1 = tc1.new('test_1')
258 test2 = tc2.new('test_1')
259 check("Should not be equal", test1 != test2)
260 check("Should not be equal", test2 != test1)
261
262
263 check("Should not be equal", test1 != Object.new)
264 check("Should not be equal", Object.new != test1)
265 end
266
267 def check(message, passed)
268 @_result.add_assertion
269 if ! passed
270 raise AssertionFailedError.new(message)
271 end
272 end
273 end
274 end
275 end
Something went wrong with that request. Please try again.