activegroonga 0.0.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/AUTHORS +1 -0
- data/NEWS.ja.rdoc +5 -0
- data/NEWS.rdoc +5 -0
- data/README.ja.rdoc +49 -0
- data/README.rdoc +49 -0
- data/Rakefile +175 -0
- data/lib/active_groonga.rb +75 -0
- data/lib/active_groonga/aggregations.rb +30 -0
- data/lib/active_groonga/associations.rb +93 -0
- data/lib/active_groonga/associations/belongs_to_association.rb +25 -0
- data/lib/active_groonga/attribute_methods.rb +36 -0
- data/lib/active_groonga/base.rb +1579 -0
- data/lib/active_groonga/column.rb +107 -0
- data/lib/active_groonga/dirty.rb +30 -0
- data/lib/active_groonga/fixtures.rb +92 -0
- data/lib/active_groonga/migration.rb +150 -0
- data/lib/active_groonga/rails_support.rb +31 -0
- data/lib/active_groonga/reflection.rb +30 -0
- data/lib/active_groonga/schema.rb +314 -0
- data/lib/active_groonga/schema_dumper.rb +147 -0
- data/lib/active_groonga/tasks.rb +16 -0
- data/lib/active_groonga/tasks/groonga.rake +162 -0
- data/lib/active_groonga/test_case.rb +21 -0
- data/lib/active_groonga/test_help.rb +21 -0
- data/lib/active_groonga/timestamp.rb +30 -0
- data/lib/active_groonga/validations.rb +26 -0
- data/lib/active_groonga/version.rb +24 -0
- data/license/LGPL +504 -0
- data/rails/README +28 -0
- data/rails/init.rb +70 -0
- data/rails_generators/model_groonga/USAGE +28 -0
- data/rails_generators/model_groonga/model_groonga_generator.rb +45 -0
- data/rails_generators/model_groonga/templates/fixtures.yml +17 -0
- data/rails_generators/model_groonga/templates/migration.rb +16 -0
- data/rails_generators/model_groonga/templates/model.rb +2 -0
- data/rails_generators/model_groonga/templates/unit_test.rb +8 -0
- data/test-unit/Rakefile +35 -0
- data/test-unit/TODO +5 -0
- data/test-unit/bin/testrb +5 -0
- data/test-unit/html/classic.html +15 -0
- data/test-unit/html/index.html +25 -0
- data/test-unit/html/index.html.ja +27 -0
- data/test-unit/lib/test/unit.rb +342 -0
- data/test-unit/lib/test/unit/assertionfailederror.rb +14 -0
- data/test-unit/lib/test/unit/assertions.rb +1149 -0
- data/test-unit/lib/test/unit/attribute.rb +125 -0
- data/test-unit/lib/test/unit/autorunner.rb +306 -0
- data/test-unit/lib/test/unit/collector.rb +43 -0
- data/test-unit/lib/test/unit/collector/descendant.rb +23 -0
- data/test-unit/lib/test/unit/collector/dir.rb +108 -0
- data/test-unit/lib/test/unit/collector/load.rb +135 -0
- data/test-unit/lib/test/unit/collector/objectspace.rb +34 -0
- data/test-unit/lib/test/unit/color-scheme.rb +86 -0
- data/test-unit/lib/test/unit/color.rb +96 -0
- data/test-unit/lib/test/unit/diff.rb +538 -0
- data/test-unit/lib/test/unit/error.rb +124 -0
- data/test-unit/lib/test/unit/exceptionhandler.rb +39 -0
- data/test-unit/lib/test/unit/failure.rb +110 -0
- data/test-unit/lib/test/unit/fixture.rb +176 -0
- data/test-unit/lib/test/unit/notification.rb +125 -0
- data/test-unit/lib/test/unit/omission.rb +143 -0
- data/test-unit/lib/test/unit/pending.rb +146 -0
- data/test-unit/lib/test/unit/priority.rb +161 -0
- data/test-unit/lib/test/unit/runner/console.rb +52 -0
- data/test-unit/lib/test/unit/runner/emacs.rb +8 -0
- data/test-unit/lib/test/unit/testcase.rb +360 -0
- data/test-unit/lib/test/unit/testresult.rb +89 -0
- data/test-unit/lib/test/unit/testsuite.rb +110 -0
- data/test-unit/lib/test/unit/ui/console/outputlevel.rb +14 -0
- data/test-unit/lib/test/unit/ui/console/testrunner.rb +220 -0
- data/test-unit/lib/test/unit/ui/emacs/testrunner.rb +49 -0
- data/test-unit/lib/test/unit/ui/testrunner.rb +20 -0
- data/test-unit/lib/test/unit/ui/testrunnermediator.rb +77 -0
- data/test-unit/lib/test/unit/ui/testrunnerutilities.rb +41 -0
- data/test-unit/lib/test/unit/util/backtracefilter.rb +41 -0
- data/test-unit/lib/test/unit/util/method-owner-finder.rb +28 -0
- data/test-unit/lib/test/unit/util/observable.rb +90 -0
- data/test-unit/lib/test/unit/util/procwrapper.rb +48 -0
- data/test-unit/lib/test/unit/version.rb +7 -0
- data/test-unit/sample/adder.rb +13 -0
- data/test-unit/sample/subtracter.rb +12 -0
- data/test-unit/sample/tc_adder.rb +18 -0
- data/test-unit/sample/tc_subtracter.rb +18 -0
- data/test-unit/sample/test_user.rb +22 -0
- data/test-unit/sample/ts_examples.rb +7 -0
- data/test-unit/test/collector/test-descendant.rb +135 -0
- data/test-unit/test/collector/test-load.rb +333 -0
- data/test-unit/test/collector/test_dir.rb +406 -0
- data/test-unit/test/collector/test_objectspace.rb +98 -0
- data/test-unit/test/run-test.rb +13 -0
- data/test-unit/test/test-attribute.rb +86 -0
- data/test-unit/test/test-color-scheme.rb +56 -0
- data/test-unit/test/test-color.rb +47 -0
- data/test-unit/test/test-diff.rb +477 -0
- data/test-unit/test/test-emacs-runner.rb +60 -0
- data/test-unit/test/test-fixture.rb +287 -0
- data/test-unit/test/test-notification.rb +33 -0
- data/test-unit/test/test-omission.rb +81 -0
- data/test-unit/test/test-pending.rb +70 -0
- data/test-unit/test/test-priority.rb +119 -0
- data/test-unit/test/test_assertions.rb +1082 -0
- data/test-unit/test/test_error.rb +26 -0
- data/test-unit/test/test_failure.rb +33 -0
- data/test-unit/test/test_testcase.rb +478 -0
- data/test-unit/test/test_testresult.rb +113 -0
- data/test-unit/test/test_testsuite.rb +129 -0
- data/test-unit/test/testunit-test-util.rb +14 -0
- data/test-unit/test/ui/test_testrunmediator.rb +20 -0
- data/test-unit/test/util/test-method-owner-finder.rb +38 -0
- data/test-unit/test/util/test_backtracefilter.rb +41 -0
- data/test-unit/test/util/test_observable.rb +102 -0
- data/test-unit/test/util/test_procwrapper.rb +36 -0
- data/test/active-groonga-test-utils.rb +234 -0
- data/test/fixtures/bookmark.rb +2 -0
- data/test/fixtures/task.rb +2 -0
- data/test/fixtures/user.rb +2 -0
- data/test/run-test.rb +51 -0
- data/test/test-associations.rb +24 -0
- data/test/test-base.rb +194 -0
- data/test/test-schema.rb +49 -0
- metadata +192 -0
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
#--
|
|
2
|
+
#
|
|
3
|
+
# Author:: Nathaniel Talbott.
|
|
4
|
+
# Copyright:: Copyright (c) 2000-2002 Nathaniel Talbott. All rights reserved.
|
|
5
|
+
# License:: Ruby license.
|
|
6
|
+
|
|
7
|
+
module Test
|
|
8
|
+
module Unit
|
|
9
|
+
module UI
|
|
10
|
+
|
|
11
|
+
# Provides some utilities common to most, if not all,
|
|
12
|
+
# TestRunners.
|
|
13
|
+
#
|
|
14
|
+
#--
|
|
15
|
+
#
|
|
16
|
+
# Perhaps there ought to be a TestRunner superclass? There
|
|
17
|
+
# seems to be a decent amount of shared code between test
|
|
18
|
+
# runners.
|
|
19
|
+
|
|
20
|
+
module TestRunnerUtilities
|
|
21
|
+
|
|
22
|
+
# Creates a new TestRunner and runs the suite.
|
|
23
|
+
def run(suite, options={})
|
|
24
|
+
return new(suite, options).start
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
# Takes care of the ARGV parsing and suite
|
|
28
|
+
# determination necessary for running one of the
|
|
29
|
+
# TestRunners from the command line.
|
|
30
|
+
def start_command_line_test
|
|
31
|
+
if ARGV.empty?
|
|
32
|
+
puts "You should supply the name of a test suite file to the runner"
|
|
33
|
+
exit
|
|
34
|
+
end
|
|
35
|
+
require ARGV[0].gsub(/.+::/, '')
|
|
36
|
+
new(eval(ARGV[0])).start
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
module Test
|
|
2
|
+
module Unit
|
|
3
|
+
module Util
|
|
4
|
+
module BacktraceFilter
|
|
5
|
+
TESTUNIT_FILE_SEPARATORS = %r{[\\/:]}
|
|
6
|
+
TESTUNIT_PREFIX = __FILE__.split(TESTUNIT_FILE_SEPARATORS)[0..-3]
|
|
7
|
+
TESTUNIT_RB_FILE = /\.rb\Z/
|
|
8
|
+
|
|
9
|
+
module_function
|
|
10
|
+
def filter_backtrace(backtrace, prefix=nil)
|
|
11
|
+
return ["No backtrace"] unless(backtrace)
|
|
12
|
+
split_p = if(prefix)
|
|
13
|
+
prefix.split(TESTUNIT_FILE_SEPARATORS)
|
|
14
|
+
else
|
|
15
|
+
TESTUNIT_PREFIX
|
|
16
|
+
end
|
|
17
|
+
match = proc do |e|
|
|
18
|
+
split_e = e.split(TESTUNIT_FILE_SEPARATORS)[0, split_p.size]
|
|
19
|
+
next false unless(split_e[0..-2] == split_p[0..-2])
|
|
20
|
+
split_e[-1].sub(TESTUNIT_RB_FILE, '') == split_p[-1]
|
|
21
|
+
end
|
|
22
|
+
return backtrace unless(backtrace.detect(&match))
|
|
23
|
+
found_prefix = false
|
|
24
|
+
new_backtrace = backtrace.reverse.reject do |e|
|
|
25
|
+
if(match[e])
|
|
26
|
+
found_prefix = true
|
|
27
|
+
true
|
|
28
|
+
elsif(found_prefix)
|
|
29
|
+
false
|
|
30
|
+
else
|
|
31
|
+
true
|
|
32
|
+
end
|
|
33
|
+
end.reverse
|
|
34
|
+
new_backtrace = (new_backtrace.empty? ? backtrace : new_backtrace)
|
|
35
|
+
new_backtrace = new_backtrace.reject(&match)
|
|
36
|
+
new_backtrace.empty? ? backtrace : new_backtrace
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
module Test
|
|
2
|
+
module Unit
|
|
3
|
+
module Util
|
|
4
|
+
module MethodOwnerFinder
|
|
5
|
+
module_function
|
|
6
|
+
def find(object, method_name)
|
|
7
|
+
method = object.method(method_name)
|
|
8
|
+
return method.owner if method.respond_to?(:owner)
|
|
9
|
+
|
|
10
|
+
if /\((.+?)\)\#/ =~ method.to_s
|
|
11
|
+
owner_name = $1
|
|
12
|
+
if /\A#</ =~ owner_name
|
|
13
|
+
ObjectSpace.each_object(Module) do |mod|
|
|
14
|
+
return mod if mod.to_s == owner_name
|
|
15
|
+
end
|
|
16
|
+
else
|
|
17
|
+
owner_name.split(/::/).inject(Object) do |parent, name|
|
|
18
|
+
parent.const_get(name)
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
else
|
|
22
|
+
object.class
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
#--
|
|
2
|
+
#
|
|
3
|
+
# Author:: Nathaniel Talbott.
|
|
4
|
+
# Copyright:: Copyright (c) 2000-2002 Nathaniel Talbott. All rights reserved.
|
|
5
|
+
# License:: Ruby license.
|
|
6
|
+
|
|
7
|
+
require 'test/unit/util/procwrapper'
|
|
8
|
+
|
|
9
|
+
module Test
|
|
10
|
+
module Unit
|
|
11
|
+
module Util
|
|
12
|
+
|
|
13
|
+
# This is a utility class that allows anything mixing
|
|
14
|
+
# it in to notify a set of listeners about interesting
|
|
15
|
+
# events.
|
|
16
|
+
module Observable
|
|
17
|
+
# We use this for defaults since nil might mean something
|
|
18
|
+
NOTHING = "NOTHING/#{__id__}"
|
|
19
|
+
|
|
20
|
+
# Adds the passed proc as a listener on the
|
|
21
|
+
# channel indicated by channel_name. listener_key
|
|
22
|
+
# is used to remove the listener later; if none is
|
|
23
|
+
# specified, the proc itself is used.
|
|
24
|
+
#
|
|
25
|
+
# Whatever is used as the listener_key is
|
|
26
|
+
# returned, making it very easy to use the proc
|
|
27
|
+
# itself as the listener_key:
|
|
28
|
+
#
|
|
29
|
+
# listener = add_listener("Channel") { ... }
|
|
30
|
+
# remove_listener("Channel", listener)
|
|
31
|
+
def add_listener(channel_name, listener_key=NOTHING, &listener) # :yields: value
|
|
32
|
+
unless(block_given?)
|
|
33
|
+
raise ArgumentError.new("No callback was passed as a listener")
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
key = listener_key
|
|
37
|
+
if (listener_key == NOTHING)
|
|
38
|
+
listener_key = listener
|
|
39
|
+
key = ProcWrapper.new(listener)
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
channels[channel_name] ||= {}
|
|
43
|
+
channels[channel_name][key] = listener
|
|
44
|
+
return listener_key
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
# Removes the listener indicated by listener_key
|
|
48
|
+
# from the channel indicated by
|
|
49
|
+
# channel_name. Returns the registered proc, or
|
|
50
|
+
# nil if none was found.
|
|
51
|
+
def remove_listener(channel_name, listener_key)
|
|
52
|
+
channel = channels[channel_name]
|
|
53
|
+
return nil unless (channel)
|
|
54
|
+
key = listener_key
|
|
55
|
+
if (listener_key.instance_of?(Proc))
|
|
56
|
+
key = ProcWrapper.new(listener_key)
|
|
57
|
+
end
|
|
58
|
+
if (channel.has_key?(key))
|
|
59
|
+
return channel.delete(key)
|
|
60
|
+
end
|
|
61
|
+
return nil
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
# Calls all the procs registered on the channel
|
|
65
|
+
# indicated by channel_name. If value is
|
|
66
|
+
# specified, it is passed in to the procs,
|
|
67
|
+
# otherwise they are called with no arguments.
|
|
68
|
+
#
|
|
69
|
+
#--
|
|
70
|
+
#
|
|
71
|
+
# Perhaps this should be private? Would it ever
|
|
72
|
+
# make sense for an external class to call this
|
|
73
|
+
# method directly?
|
|
74
|
+
def notify_listeners(channel_name, *arguments)
|
|
75
|
+
channel = channels[channel_name]
|
|
76
|
+
return 0 unless (channel)
|
|
77
|
+
listeners = channel.values
|
|
78
|
+
listeners.each { |listener| listener.call(*arguments) }
|
|
79
|
+
return listeners.size
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
private
|
|
83
|
+
def channels
|
|
84
|
+
@channels ||= {}
|
|
85
|
+
return @channels
|
|
86
|
+
end
|
|
87
|
+
end
|
|
88
|
+
end
|
|
89
|
+
end
|
|
90
|
+
end
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
#--
|
|
2
|
+
#
|
|
3
|
+
# Author:: Nathaniel Talbott.
|
|
4
|
+
# Copyright:: Copyright (c) 2000-2002 Nathaniel Talbott. All rights reserved.
|
|
5
|
+
# License:: Ruby license.
|
|
6
|
+
|
|
7
|
+
module Test
|
|
8
|
+
module Unit
|
|
9
|
+
module Util
|
|
10
|
+
|
|
11
|
+
# Allows the storage of a Proc passed through '&' in a
|
|
12
|
+
# hash.
|
|
13
|
+
#
|
|
14
|
+
# Note: this may be inefficient, since the hash being
|
|
15
|
+
# used is not necessarily very good. In Observable,
|
|
16
|
+
# efficiency is not too important, since the hash is
|
|
17
|
+
# only accessed when adding and removing listeners,
|
|
18
|
+
# not when notifying.
|
|
19
|
+
|
|
20
|
+
class ProcWrapper
|
|
21
|
+
|
|
22
|
+
# Creates a new wrapper for a_proc.
|
|
23
|
+
def initialize(a_proc)
|
|
24
|
+
@a_proc = a_proc
|
|
25
|
+
@hash = a_proc.inspect.sub(/^(#<#{a_proc.class}:)/){''}.sub(/(>)$/){''}.hex
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def hash
|
|
29
|
+
return @hash
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def ==(other)
|
|
33
|
+
case(other)
|
|
34
|
+
when ProcWrapper
|
|
35
|
+
return @a_proc == other.to_proc
|
|
36
|
+
else
|
|
37
|
+
return super
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
alias :eql? :==
|
|
41
|
+
|
|
42
|
+
def to_proc
|
|
43
|
+
return @a_proc
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
end
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# Author:: Nathaniel Talbott.
|
|
2
|
+
# Copyright:: Copyright (c) 2000-2002 Nathaniel Talbott. All rights reserved.
|
|
3
|
+
# License:: Ruby license.
|
|
4
|
+
|
|
5
|
+
class Adder
|
|
6
|
+
def initialize(number)
|
|
7
|
+
@number = number
|
|
8
|
+
end
|
|
9
|
+
def add(number)
|
|
10
|
+
return @number + number
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
# Author:: Nathaniel Talbott.
|
|
2
|
+
# Copyright:: Copyright (c) 2000-2002 Nathaniel Talbott. All rights reserved.
|
|
3
|
+
# License:: Ruby license.
|
|
4
|
+
|
|
5
|
+
class Subtracter
|
|
6
|
+
def initialize(number)
|
|
7
|
+
@number = number
|
|
8
|
+
end
|
|
9
|
+
def subtract(number)
|
|
10
|
+
return @number - number
|
|
11
|
+
end
|
|
12
|
+
end
|
|
@@ -0,0 +1,18 @@
|
|
|
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
|
+
require 'adder'
|
|
7
|
+
|
|
8
|
+
class TC_Adder < Test::Unit::TestCase
|
|
9
|
+
def setup
|
|
10
|
+
@adder = Adder.new(5)
|
|
11
|
+
end
|
|
12
|
+
def test_add
|
|
13
|
+
assert_equal(7, @adder.add(2), "Should have added correctly")
|
|
14
|
+
end
|
|
15
|
+
def teardown
|
|
16
|
+
@adder = nil
|
|
17
|
+
end
|
|
18
|
+
end
|
|
@@ -0,0 +1,18 @@
|
|
|
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
|
+
require 'subtracter'
|
|
7
|
+
|
|
8
|
+
class TC_Subtracter < Test::Unit::TestCase
|
|
9
|
+
def setup
|
|
10
|
+
@subtracter = Subtracter.new(5)
|
|
11
|
+
end
|
|
12
|
+
def test_subtract
|
|
13
|
+
assert_equal(3, @subtracter.subtract(2), "Should have subtracted correctly")
|
|
14
|
+
end
|
|
15
|
+
def teardown
|
|
16
|
+
@subtracter = nil
|
|
17
|
+
end
|
|
18
|
+
end
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# nested test case example.
|
|
2
|
+
|
|
3
|
+
class UserTest < Test::Unit::TestCase
|
|
4
|
+
def setup
|
|
5
|
+
@user = "me"
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
def test_full_name
|
|
9
|
+
assert_equal("me", @user)
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
class ProfileTest < UserTest
|
|
13
|
+
setup
|
|
14
|
+
def setup_profile
|
|
15
|
+
@user += ": profile"
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def test_has_profile
|
|
19
|
+
assert_match(/: profile/, @user)
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
require 'test/unit'
|
|
2
|
+
require 'test/unit/collector/descendant'
|
|
3
|
+
|
|
4
|
+
class TestUnitCollectorDescendant < Test::Unit::TestCase
|
|
5
|
+
def setup
|
|
6
|
+
@previous_descendants = Test::Unit::TestCase::DESCENDANTS.dup
|
|
7
|
+
Test::Unit::TestCase::DESCENDANTS.clear
|
|
8
|
+
|
|
9
|
+
@test_case1 = Class.new(Test::Unit::TestCase) do
|
|
10
|
+
def self.name
|
|
11
|
+
"test-case1"
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def test_1
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def test_2
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
@test_case2 = Class.new(Test::Unit::TestCase) do
|
|
22
|
+
def self.name
|
|
23
|
+
"test-case2"
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def test_0
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
@no_test_case = Class.new do
|
|
31
|
+
def self.name
|
|
32
|
+
"no-test-case"
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def test_4
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def teardown
|
|
41
|
+
Test::Unit::TestCase::DESCENDANTS.replace(@previous_descendants)
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def test_basic_collection
|
|
45
|
+
assert_collect(full_suite("name"), "name")
|
|
46
|
+
|
|
47
|
+
assert_collect(full_suite("name"), "name") do |collector|
|
|
48
|
+
collector.filter = []
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def test_filtered_collection
|
|
53
|
+
assert_collect(empty_suite) do |collector|
|
|
54
|
+
collector.filter = Proc.new {false}
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
assert_collect(full_suite) do |collector|
|
|
58
|
+
collector.filter = Proc.new {true}
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
assert_collect(full_suite) do |collector|
|
|
62
|
+
collector.filter = Proc.new {nil}
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
assert_collect(empty_suite) do |collector|
|
|
66
|
+
collector.filter = [Proc.new {false}, Proc.new {true}]
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
assert_collect(full_suite) do |collector|
|
|
70
|
+
collector.filter = [Proc.new {true}, Proc.new {false}]
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
assert_collect(empty_suite) do |collector|
|
|
74
|
+
collector.filter = [Proc.new {nil}, Proc.new {false}]
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
assert_collect(full_suite) do |collector|
|
|
78
|
+
collector.filter = [Proc.new {nil}, Proc.new {true}]
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
expected = empty_suite
|
|
82
|
+
suite1 = Test::Unit::TestSuite.new(@test_case1.name)
|
|
83
|
+
suite1 << @test_case1.new("test_1")
|
|
84
|
+
suite2 = Test::Unit::TestSuite.new(@test_case2.name)
|
|
85
|
+
suite2 << @test_case2.new("test_0")
|
|
86
|
+
expected << suite1 << suite2
|
|
87
|
+
assert_collect(expected) do |collector|
|
|
88
|
+
collector.filter = Proc.new do |test|
|
|
89
|
+
['test_1', 'test_0'].include?(test.method_name)
|
|
90
|
+
end
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
expected = empty_suite
|
|
94
|
+
suite1 = Test::Unit::TestSuite.new(@test_case1.name)
|
|
95
|
+
suite1 << @test_case1.new("test_1")
|
|
96
|
+
suite2 = Test::Unit::TestSuite.new(@test_case2.name)
|
|
97
|
+
suite2 << @test_case2.new("test_0")
|
|
98
|
+
expected << suite1 << suite2
|
|
99
|
+
assert_collect(expected) do |collector|
|
|
100
|
+
filters = [Proc.new {|test| test.method_name == 'test_1' ? true : nil},
|
|
101
|
+
Proc.new {|test| test.method_name == 'test_0' ? true : nil},
|
|
102
|
+
Proc.new {false}]
|
|
103
|
+
collector.filter = filters
|
|
104
|
+
end
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
private
|
|
108
|
+
def assert_collect(expected, *collect_args)
|
|
109
|
+
collector = Test::Unit::Collector::Descendant.new
|
|
110
|
+
yield(collector) if block_given?
|
|
111
|
+
assert_equal(expected, collector.send(:collect, *collect_args))
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
def default_name
|
|
115
|
+
Test::Unit::Collector::Descendant::NAME
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
def empty_suite(name=nil)
|
|
119
|
+
Test::Unit::TestSuite.new(name || default_name)
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
def full_suite(name=nil)
|
|
123
|
+
sub_suite1 = Test::Unit::TestSuite.new(@test_case1.name)
|
|
124
|
+
sub_suite1 << @test_case1.new('test_1')
|
|
125
|
+
sub_suite1 << @test_case1.new('test_2')
|
|
126
|
+
|
|
127
|
+
sub_suite2 = Test::Unit::TestSuite.new(@test_case2.name)
|
|
128
|
+
sub_suite2 << @test_case2.new('test_0')
|
|
129
|
+
|
|
130
|
+
suite = empty_suite(name)
|
|
131
|
+
suite << sub_suite1
|
|
132
|
+
suite << sub_suite2
|
|
133
|
+
suite
|
|
134
|
+
end
|
|
135
|
+
end
|