rroonga 0.9.3-x86-mingw32 → 0.9.4-x86-mingw32
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/NEWS.ja.rdoc +13 -0
- data/NEWS.rdoc +13 -0
- data/Rakefile +1 -1
- data/ext/groonga/extconf.rb +4 -3
- data/ext/groonga/rb-grn.h +698 -0
- data/html/developer.html +10 -7
- data/html/index.html +1 -1
- data/lib/1.8/groonga.so +0 -0
- data/lib/1.9/groonga.so +0 -0
- data/pkg-config.rb +1 -1
- data/test/run-test.rb +9 -3
- data/vendor/local/bin/libgroonga-0.dll +0 -0
- data/vendor/local/include/groonga.h +2285 -0
- data/vendor/local/lib/libgroonga.la +41 -0
- metadata +37 -85
- data/ext/groonga/mkmf.log +0 -99
- data/test-unit/Rakefile +0 -40
- data/test-unit/TODO +0 -5
- data/test-unit/bin/testrb +0 -5
- data/test-unit/html/classic.html +0 -15
- data/test-unit/html/index.html +0 -25
- data/test-unit/html/index.html.ja +0 -27
- data/test-unit/lib/test/unit/assertionfailederror.rb +0 -25
- data/test-unit/lib/test/unit/assertions.rb +0 -1230
- data/test-unit/lib/test/unit/attribute.rb +0 -125
- data/test-unit/lib/test/unit/autorunner.rb +0 -360
- data/test-unit/lib/test/unit/collector/descendant.rb +0 -23
- data/test-unit/lib/test/unit/collector/dir.rb +0 -108
- data/test-unit/lib/test/unit/collector/load.rb +0 -144
- data/test-unit/lib/test/unit/collector/objectspace.rb +0 -34
- data/test-unit/lib/test/unit/collector.rb +0 -36
- data/test-unit/lib/test/unit/color-scheme.rb +0 -102
- data/test-unit/lib/test/unit/color.rb +0 -96
- data/test-unit/lib/test/unit/diff.rb +0 -724
- data/test-unit/lib/test/unit/error.rb +0 -130
- data/test-unit/lib/test/unit/exceptionhandler.rb +0 -39
- data/test-unit/lib/test/unit/failure.rb +0 -136
- data/test-unit/lib/test/unit/fixture.rb +0 -176
- data/test-unit/lib/test/unit/notification.rb +0 -129
- data/test-unit/lib/test/unit/omission.rb +0 -191
- data/test-unit/lib/test/unit/pending.rb +0 -150
- data/test-unit/lib/test/unit/priority.rb +0 -180
- data/test-unit/lib/test/unit/runner/console.rb +0 -52
- data/test-unit/lib/test/unit/runner/emacs.rb +0 -8
- data/test-unit/lib/test/unit/runner/tap.rb +0 -8
- data/test-unit/lib/test/unit/testcase.rb +0 -476
- data/test-unit/lib/test/unit/testresult.rb +0 -89
- data/test-unit/lib/test/unit/testsuite.rb +0 -110
- data/test-unit/lib/test/unit/ui/console/outputlevel.rb +0 -14
- data/test-unit/lib/test/unit/ui/console/testrunner.rb +0 -466
- data/test-unit/lib/test/unit/ui/emacs/testrunner.rb +0 -63
- data/test-unit/lib/test/unit/ui/tap/testrunner.rb +0 -92
- data/test-unit/lib/test/unit/ui/testrunner.rb +0 -28
- data/test-unit/lib/test/unit/ui/testrunnermediator.rb +0 -77
- data/test-unit/lib/test/unit/ui/testrunnerutilities.rb +0 -41
- data/test-unit/lib/test/unit/util/backtracefilter.rb +0 -41
- data/test-unit/lib/test/unit/util/method-owner-finder.rb +0 -28
- data/test-unit/lib/test/unit/util/observable.rb +0 -90
- data/test-unit/lib/test/unit/util/procwrapper.rb +0 -48
- data/test-unit/lib/test/unit/version.rb +0 -7
- data/test-unit/lib/test/unit.rb +0 -323
- data/test-unit/sample/adder.rb +0 -13
- data/test-unit/sample/subtracter.rb +0 -12
- data/test-unit/sample/test_adder.rb +0 -20
- data/test-unit/sample/test_subtracter.rb +0 -20
- data/test-unit/sample/test_user.rb +0 -23
- data/test-unit/test/collector/test-descendant.rb +0 -133
- data/test-unit/test/collector/test-load.rb +0 -442
- data/test-unit/test/collector/test_dir.rb +0 -406
- data/test-unit/test/collector/test_objectspace.rb +0 -100
- data/test-unit/test/run-test.rb +0 -15
- data/test-unit/test/test-attribute.rb +0 -86
- data/test-unit/test/test-color-scheme.rb +0 -67
- data/test-unit/test/test-color.rb +0 -47
- data/test-unit/test/test-diff.rb +0 -518
- data/test-unit/test/test-emacs-runner.rb +0 -60
- data/test-unit/test/test-fixture.rb +0 -287
- data/test-unit/test/test-notification.rb +0 -33
- data/test-unit/test/test-omission.rb +0 -81
- data/test-unit/test/test-pending.rb +0 -70
- data/test-unit/test/test-priority.rb +0 -119
- data/test-unit/test/test-testcase.rb +0 -544
- data/test-unit/test/test_assertions.rb +0 -1151
- data/test-unit/test/test_error.rb +0 -26
- data/test-unit/test/test_failure.rb +0 -33
- data/test-unit/test/test_testresult.rb +0 -113
- data/test-unit/test/test_testsuite.rb +0 -129
- data/test-unit/test/testunit-test-util.rb +0 -14
- data/test-unit/test/ui/test_testrunmediator.rb +0 -20
- data/test-unit/test/util/test-method-owner-finder.rb +0 -38
- data/test-unit/test/util/test_backtracefilter.rb +0 -41
- data/test-unit/test/util/test_observable.rb +0 -102
- data/test-unit/test/util/test_procwrapper.rb +0 -36
@@ -1,476 +0,0 @@
|
|
1
|
-
#--
|
2
|
-
#
|
3
|
-
# Author:: Nathaniel Talbott.
|
4
|
-
# Copyright::
|
5
|
-
# * Copyright (c) 2000-2003 Nathaniel Talbott. All rights reserved.
|
6
|
-
# * Copyright (c) 2008-2009 Kouhei Sutou <tt><kou@clear-code.com></tt>
|
7
|
-
# License:: Ruby license.
|
8
|
-
|
9
|
-
require 'test/unit/attribute'
|
10
|
-
require 'test/unit/fixture'
|
11
|
-
require 'test/unit/exceptionhandler'
|
12
|
-
require 'test/unit/assertions'
|
13
|
-
require 'test/unit/failure'
|
14
|
-
require 'test/unit/error'
|
15
|
-
require 'test/unit/pending'
|
16
|
-
require 'test/unit/omission'
|
17
|
-
require 'test/unit/notification'
|
18
|
-
require 'test/unit/priority'
|
19
|
-
require 'test/unit/testsuite'
|
20
|
-
require 'test/unit/assertionfailederror'
|
21
|
-
require 'test/unit/util/backtracefilter'
|
22
|
-
require 'test/unit/util/method-owner-finder'
|
23
|
-
|
24
|
-
module Test
|
25
|
-
module Unit
|
26
|
-
|
27
|
-
# Ties everything together. If you subclass and add your own
|
28
|
-
# test methods, it takes care of making them into tests and
|
29
|
-
# wrapping those tests into a suite. It also does the
|
30
|
-
# nitty-gritty of actually running an individual test and
|
31
|
-
# collecting its results into a Test::Unit::TestResult object.
|
32
|
-
#
|
33
|
-
# You can run two hooks before/after a TestCase run.
|
34
|
-
#
|
35
|
-
# Example:
|
36
|
-
# class TestMyClass < Test::Unit::TestCase
|
37
|
-
# class << self
|
38
|
-
# def startup
|
39
|
-
# ...
|
40
|
-
# end
|
41
|
-
#
|
42
|
-
# def shutdown
|
43
|
-
# ...
|
44
|
-
# end
|
45
|
-
# end
|
46
|
-
#
|
47
|
-
# def setup
|
48
|
-
# ...
|
49
|
-
# end
|
50
|
-
#
|
51
|
-
# def teardown
|
52
|
-
# ...
|
53
|
-
# end
|
54
|
-
#
|
55
|
-
# def test_my_method1
|
56
|
-
# ...
|
57
|
-
# end
|
58
|
-
#
|
59
|
-
# def test_my_method2
|
60
|
-
# ...
|
61
|
-
# end
|
62
|
-
# end
|
63
|
-
#
|
64
|
-
# Here is a call order:
|
65
|
-
# * startup
|
66
|
-
# * setup
|
67
|
-
# * test_my_method1
|
68
|
-
# * teardown
|
69
|
-
# * setup
|
70
|
-
# * test_my_method2
|
71
|
-
# * teardown
|
72
|
-
# * shutdown
|
73
|
-
class TestCase
|
74
|
-
include Attribute
|
75
|
-
include Fixture
|
76
|
-
include ExceptionHandler
|
77
|
-
include ErrorHandler
|
78
|
-
include FailureHandler
|
79
|
-
include TestCasePendingSupport
|
80
|
-
include TestCaseOmissionSupport
|
81
|
-
include TestCaseNotificationSupport
|
82
|
-
include Priority
|
83
|
-
include Assertions
|
84
|
-
include Util::BacktraceFilter
|
85
|
-
|
86
|
-
STARTED = name + "::STARTED" # :nodoc:
|
87
|
-
FINISHED = name + "::FINISHED" # :nodoc:
|
88
|
-
|
89
|
-
DESCENDANTS = [] # :nodoc:
|
90
|
-
AVAILABLE_ORDERS = [:alphabetic, :random, :defined] # :nodoc:
|
91
|
-
|
92
|
-
class << self
|
93
|
-
def inherited(sub_class) # :nodoc:
|
94
|
-
DESCENDANTS << sub_class
|
95
|
-
end
|
96
|
-
|
97
|
-
@@added_methods = {}
|
98
|
-
def method_added(name) # :nodoc:
|
99
|
-
super
|
100
|
-
added_methods = (@@added_methods[self] ||= [])
|
101
|
-
stringified_name = name.to_s
|
102
|
-
if added_methods.include?(stringified_name)
|
103
|
-
attribute(:redefined, true, {}, stringified_name)
|
104
|
-
end
|
105
|
-
added_methods << stringified_name
|
106
|
-
end
|
107
|
-
|
108
|
-
# Rolls up all of the test* methods in the fixture into
|
109
|
-
# one suite, creating a new instance of the fixture for
|
110
|
-
# each method.
|
111
|
-
def suite
|
112
|
-
suite = TestSuite.new(name, self)
|
113
|
-
collect_test_names.each do |test|
|
114
|
-
catch(:invalid_test) do
|
115
|
-
suite << new(test)
|
116
|
-
end
|
117
|
-
end
|
118
|
-
if suite.empty?
|
119
|
-
catch(:invalid_test) do
|
120
|
-
suite << new("default_test")
|
121
|
-
end
|
122
|
-
end
|
123
|
-
suite
|
124
|
-
end
|
125
|
-
|
126
|
-
# Called before every test case runs. Can be used
|
127
|
-
# to set up fixture information used in test case
|
128
|
-
# scope.
|
129
|
-
#
|
130
|
-
# Here is an example test case:
|
131
|
-
# class TestMyClass < Test::Unit::TestCase
|
132
|
-
# class << self
|
133
|
-
# def startup
|
134
|
-
# ...
|
135
|
-
# end
|
136
|
-
# end
|
137
|
-
#
|
138
|
-
# def setup
|
139
|
-
# ...
|
140
|
-
# end
|
141
|
-
#
|
142
|
-
# def test_my_class1
|
143
|
-
# ...
|
144
|
-
# end
|
145
|
-
#
|
146
|
-
# def test_my_class2
|
147
|
-
# ...
|
148
|
-
# end
|
149
|
-
# end
|
150
|
-
#
|
151
|
-
# Here is a call order:
|
152
|
-
# * startup
|
153
|
-
# * setup
|
154
|
-
# * test_my_class1 (or test_my_class2)
|
155
|
-
# * setup
|
156
|
-
# * test_my_class2 (or test_my_class1)
|
157
|
-
#
|
158
|
-
# Note that you should not assume test order. Tests
|
159
|
-
# should be worked in any order.
|
160
|
-
def startup
|
161
|
-
end
|
162
|
-
|
163
|
-
# Called after every test case runs. Can be used to tear
|
164
|
-
# down fixture information used in test case scope.
|
165
|
-
#
|
166
|
-
# Here is an example test case:
|
167
|
-
# class TestMyClass < Test::Unit::TestCase
|
168
|
-
# class << self
|
169
|
-
# def shutdown
|
170
|
-
# ...
|
171
|
-
# end
|
172
|
-
# end
|
173
|
-
#
|
174
|
-
# def teardown
|
175
|
-
# ...
|
176
|
-
# end
|
177
|
-
#
|
178
|
-
# def test_my_class1
|
179
|
-
# ...
|
180
|
-
# end
|
181
|
-
#
|
182
|
-
# def test_my_class2
|
183
|
-
# ...
|
184
|
-
# end
|
185
|
-
# end
|
186
|
-
#
|
187
|
-
# Here is a call order:
|
188
|
-
# * test_my_class1 (or test_my_class2)
|
189
|
-
# * teardown
|
190
|
-
# * test_my_class2 (or test_my_class1)
|
191
|
-
# * teardown
|
192
|
-
# * shutdown
|
193
|
-
#
|
194
|
-
# Note that you should not assume test order. Tests
|
195
|
-
# should be worked in any order.
|
196
|
-
def shutdown
|
197
|
-
end
|
198
|
-
|
199
|
-
@@test_orders = {}
|
200
|
-
|
201
|
-
# Returns the current test order. This returns
|
202
|
-
# +:alphabetic+ by default.
|
203
|
-
def test_order
|
204
|
-
@@test_orders[self] || AVAILABLE_ORDERS.first
|
205
|
-
end
|
206
|
-
|
207
|
-
# Sets the current test order.
|
208
|
-
#
|
209
|
-
# Here are the available _order_:
|
210
|
-
# [:alphabetic]
|
211
|
-
# Default. Tests are sorted in alphabetic order.
|
212
|
-
# [:random]
|
213
|
-
# Tests are sorted in random order.
|
214
|
-
# [:defined]
|
215
|
-
# Tests are sorted in defined order.
|
216
|
-
def test_order=(order)
|
217
|
-
@@test_orders[self] = order
|
218
|
-
end
|
219
|
-
|
220
|
-
# Defines a test in declarative syntax.
|
221
|
-
#
|
222
|
-
# The following two test definitions are the same:
|
223
|
-
#
|
224
|
-
# description "register user"
|
225
|
-
# def test_register_user
|
226
|
-
# ...
|
227
|
-
# end
|
228
|
-
#
|
229
|
-
# test "register user" do
|
230
|
-
# ...
|
231
|
-
# end
|
232
|
-
def test(test_description, &block)
|
233
|
-
normalized_description = test_description.gsub(/[^a-zA-Z\d_]+/, '_')
|
234
|
-
method_name = "test_#{normalized_description}".to_sym
|
235
|
-
define_method(method_name, &block)
|
236
|
-
description(test_description, method_name)
|
237
|
-
end
|
238
|
-
|
239
|
-
# Describes a test.
|
240
|
-
#
|
241
|
-
# The following example associates "register a
|
242
|
-
# normal user" description with "test_register"
|
243
|
-
# test.
|
244
|
-
#
|
245
|
-
# description "register a normal user"
|
246
|
-
# def test_register
|
247
|
-
# ...
|
248
|
-
# end
|
249
|
-
def description(value, target=nil)
|
250
|
-
attribute(:description, value, {}, target || [])
|
251
|
-
end
|
252
|
-
|
253
|
-
# :stopdoc:
|
254
|
-
private
|
255
|
-
def collect_test_names
|
256
|
-
method_names = public_instance_methods(true).collect do |name|
|
257
|
-
name.to_s
|
258
|
-
end
|
259
|
-
test_names = method_names.find_all do |method_name|
|
260
|
-
method_name =~ /^test./
|
261
|
-
end
|
262
|
-
send("sort_test_names_in_#{test_order}_order", test_names)
|
263
|
-
end
|
264
|
-
|
265
|
-
def sort_test_names_in_alphabetic_order(test_names)
|
266
|
-
test_names.sort
|
267
|
-
end
|
268
|
-
|
269
|
-
def sort_test_names_in_random_order(test_names)
|
270
|
-
test_names.sort_by {rand(test_names.size)}
|
271
|
-
end
|
272
|
-
|
273
|
-
def sort_test_names_in_defined_order(test_names)
|
274
|
-
added_methods = @@added_methods[self]
|
275
|
-
test_names.sort do |test1, test2|
|
276
|
-
test1_defined_order = added_methods.index(test1)
|
277
|
-
test2_defined_order = added_methods.index(test2)
|
278
|
-
if test1_defined_order and test2_defined_order
|
279
|
-
test1_defined_order <=> test2_defined_order
|
280
|
-
elsif test1_defined_order
|
281
|
-
1
|
282
|
-
elsif test2_defined_order
|
283
|
-
-1
|
284
|
-
else
|
285
|
-
test1 <=> test2
|
286
|
-
end
|
287
|
-
end
|
288
|
-
end
|
289
|
-
# :startdoc:
|
290
|
-
end
|
291
|
-
|
292
|
-
attr_reader :method_name
|
293
|
-
|
294
|
-
# Creates a new instance of the fixture for running the
|
295
|
-
# test represented by test_method_name.
|
296
|
-
def initialize(test_method_name)
|
297
|
-
throw :invalid_test unless respond_to?(test_method_name)
|
298
|
-
test_method = method(test_method_name)
|
299
|
-
throw :invalid_test if test_method.arity > 0
|
300
|
-
owner = Util::MethodOwnerFinder.find(self, test_method_name)
|
301
|
-
if owner.class != Module and self.class != owner
|
302
|
-
throw :invalid_test
|
303
|
-
end
|
304
|
-
@method_name = test_method_name
|
305
|
-
@test_passed = true
|
306
|
-
@interrupted = false
|
307
|
-
end
|
308
|
-
|
309
|
-
# Runs the individual test method represented by this
|
310
|
-
# instance of the fixture, collecting statistics, failures
|
311
|
-
# and errors in result.
|
312
|
-
def run(result)
|
313
|
-
begin
|
314
|
-
@_result = result
|
315
|
-
yield(STARTED, name)
|
316
|
-
begin
|
317
|
-
run_setup
|
318
|
-
run_test
|
319
|
-
rescue Exception
|
320
|
-
@interrupted = true
|
321
|
-
raise unless handle_exception($!)
|
322
|
-
ensure
|
323
|
-
begin
|
324
|
-
run_teardown
|
325
|
-
rescue Exception
|
326
|
-
raise unless handle_exception($!)
|
327
|
-
end
|
328
|
-
end
|
329
|
-
result.add_run
|
330
|
-
yield(FINISHED, name)
|
331
|
-
ensure
|
332
|
-
# @_result = nil # For test-spec's after_all :<
|
333
|
-
end
|
334
|
-
end
|
335
|
-
|
336
|
-
# Called before every test method runs. Can be used
|
337
|
-
# to set up fixture information.
|
338
|
-
#
|
339
|
-
# You can add additional setup tasks by the following
|
340
|
-
# code:
|
341
|
-
# class TestMyClass < Test::Unit::TestCase
|
342
|
-
# def setup
|
343
|
-
# ...
|
344
|
-
# end
|
345
|
-
#
|
346
|
-
# setup
|
347
|
-
# def my_setup1
|
348
|
-
# ...
|
349
|
-
# end
|
350
|
-
#
|
351
|
-
# setup
|
352
|
-
# def my_setup2
|
353
|
-
# ...
|
354
|
-
# end
|
355
|
-
#
|
356
|
-
# def test_my_class
|
357
|
-
# ...
|
358
|
-
# end
|
359
|
-
# end
|
360
|
-
#
|
361
|
-
# Here is a call order:
|
362
|
-
# * setup
|
363
|
-
# * my_setup1
|
364
|
-
# * my_setup2
|
365
|
-
# * test_my_class
|
366
|
-
def setup
|
367
|
-
end
|
368
|
-
|
369
|
-
# Called after every test method runs. Can be used to tear
|
370
|
-
# down fixture information.
|
371
|
-
#
|
372
|
-
# You can add additional teardown tasks by the following
|
373
|
-
# code:
|
374
|
-
# class TestMyClass < Test::Unit::TestCase
|
375
|
-
# def teardown
|
376
|
-
# ...
|
377
|
-
# end
|
378
|
-
#
|
379
|
-
# teardown
|
380
|
-
# def my_teardown1
|
381
|
-
# ...
|
382
|
-
# end
|
383
|
-
#
|
384
|
-
# teardown
|
385
|
-
# def my_teardown2
|
386
|
-
# ...
|
387
|
-
# end
|
388
|
-
#
|
389
|
-
# def test_my_class
|
390
|
-
# ...
|
391
|
-
# end
|
392
|
-
# end
|
393
|
-
#
|
394
|
-
# Here is a call order:
|
395
|
-
# * test_my_class
|
396
|
-
# * my_teardown2
|
397
|
-
# * my_teardown1
|
398
|
-
# * teardown
|
399
|
-
def teardown
|
400
|
-
end
|
401
|
-
|
402
|
-
def default_test
|
403
|
-
flunk("No tests were specified")
|
404
|
-
end
|
405
|
-
|
406
|
-
def size
|
407
|
-
1
|
408
|
-
end
|
409
|
-
|
410
|
-
# Returns a human-readable name for the specific test that
|
411
|
-
# this instance of TestCase represents.
|
412
|
-
def name
|
413
|
-
"#{@method_name}(#{self.class.name})"
|
414
|
-
end
|
415
|
-
|
416
|
-
# Returns a description for the test. A description
|
417
|
-
# will be associated by Test::Unit::TestCase.test or
|
418
|
-
# Test::Unit::TestCase.description.
|
419
|
-
#
|
420
|
-
# Returns a name for the test for no description test.
|
421
|
-
def description
|
422
|
-
self[:description] || name
|
423
|
-
end
|
424
|
-
|
425
|
-
# Overridden to return #name.
|
426
|
-
def to_s
|
427
|
-
name
|
428
|
-
end
|
429
|
-
|
430
|
-
# It's handy to be able to compare TestCase instances.
|
431
|
-
def ==(other)
|
432
|
-
return false unless(other.kind_of?(self.class))
|
433
|
-
return false unless(@method_name == other.method_name)
|
434
|
-
self.class == other.class
|
435
|
-
end
|
436
|
-
|
437
|
-
def interrupted?
|
438
|
-
@interrupted
|
439
|
-
end
|
440
|
-
|
441
|
-
private
|
442
|
-
def current_result
|
443
|
-
@_result
|
444
|
-
end
|
445
|
-
|
446
|
-
def run_test
|
447
|
-
if self.class.get_attribute(@method_name, :redefined)
|
448
|
-
notify("#{self.class}\##{@method_name} was redefined")
|
449
|
-
end
|
450
|
-
__send__(@method_name)
|
451
|
-
end
|
452
|
-
|
453
|
-
def handle_exception(exception)
|
454
|
-
self.class.exception_handlers.each do |handler|
|
455
|
-
return true if send(handler, exception)
|
456
|
-
end
|
457
|
-
false
|
458
|
-
end
|
459
|
-
|
460
|
-
# Returns whether this individual test passed or
|
461
|
-
# not. Primarily for use in teardown so that artifacts
|
462
|
-
# can be left behind if the test fails.
|
463
|
-
def passed?
|
464
|
-
@test_passed
|
465
|
-
end
|
466
|
-
|
467
|
-
def problem_occurred
|
468
|
-
@test_passed = false
|
469
|
-
end
|
470
|
-
|
471
|
-
def add_assertion
|
472
|
-
current_result.add_assertion
|
473
|
-
end
|
474
|
-
end
|
475
|
-
end
|
476
|
-
end
|
@@ -1,89 +0,0 @@
|
|
1
|
-
#--
|
2
|
-
# Author:: Nathaniel Talbott.
|
3
|
-
# Copyright:: Copyright (c) 2000-2002 Nathaniel Talbott. All rights reserved.
|
4
|
-
# License:: Ruby license.
|
5
|
-
|
6
|
-
require 'test/unit/util/observable'
|
7
|
-
require 'test/unit/failure'
|
8
|
-
require 'test/unit/error'
|
9
|
-
require 'test/unit/omission'
|
10
|
-
require 'test/unit/pending'
|
11
|
-
require 'test/unit/notification'
|
12
|
-
|
13
|
-
module Test
|
14
|
-
module Unit
|
15
|
-
module NullResultContainerInitializer
|
16
|
-
private
|
17
|
-
def initialize_containers
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
# Collects Test::Unit::Failure and Test::Unit::Error so that
|
22
|
-
# they can be displayed to the user. To this end, observers
|
23
|
-
# can be added to it, allowing the dynamic updating of, say, a
|
24
|
-
# UI.
|
25
|
-
class TestResult
|
26
|
-
include Util::Observable
|
27
|
-
include NullResultContainerInitializer
|
28
|
-
include TestResultFailureSupport
|
29
|
-
include TestResultErrorSupport
|
30
|
-
include TestResultPendingSupport
|
31
|
-
include TestResultOmissionSupport
|
32
|
-
include TestResultNotificationSupport
|
33
|
-
|
34
|
-
CHANGED = "CHANGED"
|
35
|
-
FAULT = "FAULT"
|
36
|
-
|
37
|
-
attr_reader :run_count, :assertion_count, :faults
|
38
|
-
|
39
|
-
# Constructs a new, empty TestResult.
|
40
|
-
def initialize
|
41
|
-
@run_count, @assertion_count = 0, 0
|
42
|
-
@summary_generators = []
|
43
|
-
@problem_checkers = []
|
44
|
-
@faults = []
|
45
|
-
initialize_containers
|
46
|
-
end
|
47
|
-
|
48
|
-
# Records a test run.
|
49
|
-
def add_run
|
50
|
-
@run_count += 1
|
51
|
-
notify_changed
|
52
|
-
end
|
53
|
-
|
54
|
-
# Records an individual assertion.
|
55
|
-
def add_assertion
|
56
|
-
@assertion_count += 1
|
57
|
-
notify_changed
|
58
|
-
end
|
59
|
-
|
60
|
-
# Returns a string contain the recorded runs, assertions,
|
61
|
-
# failures and errors in this TestResult.
|
62
|
-
def summary
|
63
|
-
["#{run_count} tests",
|
64
|
-
"#{assertion_count} assertions",
|
65
|
-
*@summary_generators.collect {|generator| send(generator)}].join(", ")
|
66
|
-
end
|
67
|
-
|
68
|
-
def to_s
|
69
|
-
summary
|
70
|
-
end
|
71
|
-
|
72
|
-
# Returns whether or not this TestResult represents
|
73
|
-
# successful completion.
|
74
|
-
def passed?
|
75
|
-
@problem_checkers.all? {|checker| not send(checker)}
|
76
|
-
end
|
77
|
-
|
78
|
-
private
|
79
|
-
def notify_changed
|
80
|
-
notify_listeners(CHANGED, self)
|
81
|
-
end
|
82
|
-
|
83
|
-
def notify_fault(fault)
|
84
|
-
@faults << fault
|
85
|
-
notify_listeners(FAULT, fault)
|
86
|
-
end
|
87
|
-
end
|
88
|
-
end
|
89
|
-
end
|
@@ -1,110 +0,0 @@
|
|
1
|
-
#--
|
2
|
-
#
|
3
|
-
# Author:: Nathaniel Talbott.
|
4
|
-
# Copyright:: Copyright (c) 2000-2003 Nathaniel Talbott. All rights reserved.
|
5
|
-
# License:: Ruby license.
|
6
|
-
|
7
|
-
require 'test/unit/error'
|
8
|
-
|
9
|
-
module Test
|
10
|
-
module Unit
|
11
|
-
|
12
|
-
# A collection of tests which can be #run.
|
13
|
-
#
|
14
|
-
# Note: It is easy to confuse a TestSuite instance with
|
15
|
-
# something that has a static suite method; I know because _I_
|
16
|
-
# have trouble keeping them straight. Think of something that
|
17
|
-
# has a suite method as simply providing a way to get a
|
18
|
-
# meaningful TestSuite instance.
|
19
|
-
class TestSuite
|
20
|
-
attr_reader :name, :tests
|
21
|
-
|
22
|
-
STARTED = name + "::STARTED"
|
23
|
-
FINISHED = name + "::FINISHED"
|
24
|
-
|
25
|
-
# Creates a new TestSuite with the given name.
|
26
|
-
def initialize(name="Unnamed TestSuite", test_case=nil)
|
27
|
-
@name = name
|
28
|
-
@tests = []
|
29
|
-
@test_case = test_case
|
30
|
-
end
|
31
|
-
|
32
|
-
# Runs the tests and/or suites contained in this
|
33
|
-
# TestSuite.
|
34
|
-
def run(result, &progress_block)
|
35
|
-
yield(STARTED, name)
|
36
|
-
run_startup(result)
|
37
|
-
@tests.each do |test|
|
38
|
-
test.run(result, &progress_block)
|
39
|
-
end
|
40
|
-
run_shutdown(result)
|
41
|
-
yield(FINISHED, name)
|
42
|
-
end
|
43
|
-
|
44
|
-
# Adds the test to the suite.
|
45
|
-
def <<(test)
|
46
|
-
@tests << test
|
47
|
-
self
|
48
|
-
end
|
49
|
-
|
50
|
-
def delete(test)
|
51
|
-
@tests.delete(test)
|
52
|
-
end
|
53
|
-
|
54
|
-
# Retuns the rolled up number of tests in this suite;
|
55
|
-
# i.e. if the suite contains other suites, it counts the
|
56
|
-
# tests within those suites, not the suites themselves.
|
57
|
-
def size
|
58
|
-
total_size = 0
|
59
|
-
@tests.each { |test| total_size += test.size }
|
60
|
-
total_size
|
61
|
-
end
|
62
|
-
|
63
|
-
def empty?
|
64
|
-
tests.empty?
|
65
|
-
end
|
66
|
-
|
67
|
-
# Overridden to return the name given the suite at
|
68
|
-
# creation.
|
69
|
-
def to_s
|
70
|
-
@name
|
71
|
-
end
|
72
|
-
|
73
|
-
# It's handy to be able to compare TestSuite instances.
|
74
|
-
def ==(other)
|
75
|
-
return false unless(other.kind_of?(self.class))
|
76
|
-
return false unless(@name == other.name)
|
77
|
-
@tests == other.tests
|
78
|
-
end
|
79
|
-
|
80
|
-
private
|
81
|
-
def run_startup(result)
|
82
|
-
return if @test_case.nil? or !@test_case.respond_to?(:startup)
|
83
|
-
begin
|
84
|
-
@test_case.startup
|
85
|
-
rescue Exception
|
86
|
-
raise unless handle_exception($!, result)
|
87
|
-
end
|
88
|
-
end
|
89
|
-
|
90
|
-
def run_shutdown(result)
|
91
|
-
return if @test_case.nil? or !@test_case.respond_to?(:shutdown)
|
92
|
-
begin
|
93
|
-
@test_case.shutdown
|
94
|
-
rescue Exception
|
95
|
-
raise unless handle_exception($!, result)
|
96
|
-
end
|
97
|
-
end
|
98
|
-
|
99
|
-
def handle_exception(exception, result)
|
100
|
-
case exception
|
101
|
-
when *ErrorHandler::PASS_THROUGH_EXCEPTIONS
|
102
|
-
false
|
103
|
-
else
|
104
|
-
result.add_error(Error.new(@test_case.name, exception))
|
105
|
-
true
|
106
|
-
end
|
107
|
-
end
|
108
|
-
end
|
109
|
-
end
|
110
|
-
end
|