rroonga 0.9.4-x86-mingw32 → 0.9.5-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.
Files changed (153) hide show
  1. data/NEWS.ja.rdoc +29 -0
  2. data/NEWS.rdoc +29 -0
  3. data/Rakefile +6 -6
  4. data/ext/groonga/rb-grn-array.c +1 -1
  5. data/ext/groonga/rb-grn-context.c +15 -28
  6. data/ext/groonga/rb-grn-exception.c +46 -1
  7. data/ext/groonga/rb-grn-expression.c +22 -13
  8. data/ext/groonga/rb-grn-fix-size-column.c +2 -8
  9. data/ext/groonga/rb-grn-hash.c +8 -1
  10. data/ext/groonga/rb-grn-object.c +1 -1
  11. data/ext/groonga/rb-grn-patricia-trie.c +23 -1
  12. data/ext/groonga/rb-grn-table-key-support.c +22 -0
  13. data/ext/groonga/rb-grn-table.c +37 -5
  14. data/ext/groonga/rb-grn-utils.c +20 -2
  15. data/ext/groonga/rb-grn.h +1 -1
  16. data/ext/groonga/rb-groonga.c +76 -38
  17. data/extconf.rb +17 -1
  18. data/html/developer.html +32 -7
  19. data/html/footer.html.erb +5 -0
  20. data/html/heading-mark.svg +393 -0
  21. data/html/index.html +33 -3
  22. data/lib/1.8/groonga.so +0 -0
  23. data/lib/1.9/groonga.so +0 -0
  24. data/lib/groonga.rb +3 -7
  25. data/lib/groonga/context.rb +2 -13
  26. data/lib/groonga/expression-builder.rb +273 -67
  27. data/lib/groonga/pagination.rb +143 -0
  28. data/lib/groonga/record.rb +2 -0
  29. data/lib/groonga/schema.rb +140 -29
  30. data/pkg/rroonga-0.9.5/NEWS.ja.rdoc +156 -0
  31. data/pkg/rroonga-0.9.5/NEWS.rdoc +158 -0
  32. data/pkg/rroonga-0.9.5/README.ja.rdoc +65 -0
  33. data/pkg/rroonga-0.9.5/README.rdoc +66 -0
  34. data/pkg/rroonga-0.9.5/text/TUTORIAL.ja.rdoc +394 -0
  35. data/pkg/rroonga-0.9.5/text/expression.rdoc +285 -0
  36. data/rroonga-build.rb +2 -2
  37. data/test-unit/Rakefile +40 -0
  38. data/test-unit/TODO +5 -0
  39. data/test-unit/bin/testrb +5 -0
  40. data/test-unit/html/classic.html +15 -0
  41. data/test-unit/html/index.html +25 -0
  42. data/test-unit/html/index.html.ja +27 -0
  43. data/test-unit/lib/test/unit.rb +323 -0
  44. data/test-unit/lib/test/unit/assertionfailederror.rb +25 -0
  45. data/test-unit/lib/test/unit/assertions.rb +1230 -0
  46. data/test-unit/lib/test/unit/attribute.rb +125 -0
  47. data/test-unit/lib/test/unit/autorunner.rb +360 -0
  48. data/test-unit/lib/test/unit/collector.rb +36 -0
  49. data/test-unit/lib/test/unit/collector/descendant.rb +23 -0
  50. data/test-unit/lib/test/unit/collector/dir.rb +108 -0
  51. data/test-unit/lib/test/unit/collector/load.rb +144 -0
  52. data/test-unit/lib/test/unit/collector/objectspace.rb +34 -0
  53. data/test-unit/lib/test/unit/color-scheme.rb +102 -0
  54. data/test-unit/lib/test/unit/color.rb +96 -0
  55. data/test-unit/lib/test/unit/diff.rb +724 -0
  56. data/test-unit/lib/test/unit/error.rb +130 -0
  57. data/test-unit/lib/test/unit/exceptionhandler.rb +39 -0
  58. data/test-unit/lib/test/unit/failure.rb +136 -0
  59. data/test-unit/lib/test/unit/fixture.rb +176 -0
  60. data/test-unit/lib/test/unit/notification.rb +129 -0
  61. data/test-unit/lib/test/unit/omission.rb +191 -0
  62. data/test-unit/lib/test/unit/pending.rb +150 -0
  63. data/test-unit/lib/test/unit/priority.rb +180 -0
  64. data/test-unit/lib/test/unit/runner/console.rb +52 -0
  65. data/test-unit/lib/test/unit/runner/emacs.rb +8 -0
  66. data/test-unit/lib/test/unit/runner/tap.rb +8 -0
  67. data/test-unit/lib/test/unit/testcase.rb +476 -0
  68. data/test-unit/lib/test/unit/testresult.rb +89 -0
  69. data/test-unit/lib/test/unit/testsuite.rb +110 -0
  70. data/test-unit/lib/test/unit/ui/console/outputlevel.rb +14 -0
  71. data/test-unit/lib/test/unit/ui/console/testrunner.rb +466 -0
  72. data/test-unit/lib/test/unit/ui/emacs/testrunner.rb +63 -0
  73. data/test-unit/lib/test/unit/ui/tap/testrunner.rb +92 -0
  74. data/test-unit/lib/test/unit/ui/testrunner.rb +28 -0
  75. data/test-unit/lib/test/unit/ui/testrunnermediator.rb +77 -0
  76. data/test-unit/lib/test/unit/ui/testrunnerutilities.rb +41 -0
  77. data/test-unit/lib/test/unit/util/backtracefilter.rb +41 -0
  78. data/test-unit/lib/test/unit/util/method-owner-finder.rb +28 -0
  79. data/test-unit/lib/test/unit/util/observable.rb +90 -0
  80. data/test-unit/lib/test/unit/util/procwrapper.rb +48 -0
  81. data/test-unit/lib/test/unit/version.rb +7 -0
  82. data/test-unit/sample/adder.rb +13 -0
  83. data/test-unit/sample/subtracter.rb +12 -0
  84. data/test-unit/sample/test_adder.rb +20 -0
  85. data/test-unit/sample/test_subtracter.rb +20 -0
  86. data/test-unit/sample/test_user.rb +23 -0
  87. data/test-unit/test/collector/test-descendant.rb +133 -0
  88. data/test-unit/test/collector/test-load.rb +442 -0
  89. data/test-unit/test/collector/test_dir.rb +406 -0
  90. data/test-unit/test/collector/test_objectspace.rb +100 -0
  91. data/test-unit/test/run-test.rb +15 -0
  92. data/test-unit/test/test-attribute.rb +86 -0
  93. data/test-unit/test/test-color-scheme.rb +67 -0
  94. data/test-unit/test/test-color.rb +47 -0
  95. data/test-unit/test/test-diff.rb +518 -0
  96. data/test-unit/test/test-emacs-runner.rb +60 -0
  97. data/test-unit/test/test-fixture.rb +287 -0
  98. data/test-unit/test/test-notification.rb +33 -0
  99. data/test-unit/test/test-omission.rb +81 -0
  100. data/test-unit/test/test-pending.rb +70 -0
  101. data/test-unit/test/test-priority.rb +119 -0
  102. data/test-unit/test/test-testcase.rb +544 -0
  103. data/test-unit/test/test_assertions.rb +1151 -0
  104. data/test-unit/test/test_error.rb +26 -0
  105. data/test-unit/test/test_failure.rb +33 -0
  106. data/test-unit/test/test_testresult.rb +113 -0
  107. data/test-unit/test/test_testsuite.rb +129 -0
  108. data/test-unit/test/testunit-test-util.rb +14 -0
  109. data/test-unit/test/ui/test_testrunmediator.rb +20 -0
  110. data/test-unit/test/util/test-method-owner-finder.rb +38 -0
  111. data/test-unit/test/util/test_backtracefilter.rb +41 -0
  112. data/test-unit/test/util/test_observable.rb +102 -0
  113. data/test-unit/test/util/test_procwrapper.rb +36 -0
  114. data/test/groonga-test-utils.rb +3 -2
  115. data/test/run-test.rb +14 -2
  116. data/test/test-column.rb +7 -7
  117. data/test/test-context-select.rb +34 -11
  118. data/test/test-exception.rb +3 -0
  119. data/test/test-expression-builder.rb +11 -0
  120. data/test/test-expression.rb +3 -6
  121. data/test/test-gqtp.rb +3 -5
  122. data/test/test-pagination.rb +249 -0
  123. data/test/test-record.rb +36 -8
  124. data/test/test-remote.rb +11 -4
  125. data/test/test-schema-create-table.rb +251 -0
  126. data/test/test-schema.rb +4 -24
  127. data/test/test-table-offset-and-limit.rb +3 -5
  128. data/test/test-table-select-mecab.rb +80 -0
  129. data/test/test-table-select-weight.rb +104 -0
  130. data/test/test-table.rb +22 -4
  131. data/test/test-version.rb +1 -1
  132. data/text/TUTORIAL.ja.rdoc +2 -0
  133. data/text/expression.rdoc +1 -0
  134. data/vendor/local/bin/grntest.exe +0 -0
  135. data/vendor/local/bin/groonga.exe +0 -0
  136. data/vendor/local/bin/libgroonga-0.dll +0 -0
  137. data/vendor/local/include/{groonga.h → groonga/groonga.h} +93 -32
  138. data/vendor/local/lib/groonga/modules/functions/cast.dll +0 -0
  139. data/vendor/local/lib/groonga/modules/functions/cast.la +41 -0
  140. data/vendor/local/lib/pkgconfig/groonga.pc +12 -0
  141. data/vendor/local/share/groonga/admin_html/css/admin.css +104 -0
  142. data/vendor/local/share/groonga/admin_html/css/ui-lightness/jquery-ui-1.8.1.custom.css +486 -0
  143. data/vendor/local/share/groonga/admin_html/index.html +1355 -0
  144. data/vendor/local/share/groonga/admin_html/js/jquery-1.4.2.min.js +154 -0
  145. data/vendor/local/share/groonga/admin_html/js/jquery-ui-1.8.1.custom.min.js +756 -0
  146. data/vendor/local/share/groonga/munin/plugins/groonga_cpu_load +47 -0
  147. data/vendor/local/share/groonga/munin/plugins/groonga_cpu_time +57 -0
  148. data/vendor/local/share/groonga/munin/plugins/groonga_disk +162 -0
  149. data/vendor/local/share/groonga/munin/plugins/groonga_memory +51 -0
  150. data/vendor/local/share/groonga/munin/plugins/groonga_n_records +110 -0
  151. data/vendor/local/share/groonga/munin/plugins/groonga_query_performance +133 -0
  152. data/vendor/local/share/groonga/munin/plugins/groonga_status +84 -0
  153. metadata +126 -36
@@ -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,7 @@
1
+
2
+ # HACK: quick and dirty to get integrated into the new project - ryan
3
+ module Test
4
+ module Unit
5
+ VERSION = '2.0.8'
6
+ end
7
+ 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,20 @@
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 TestAdder < Test::Unit::TestCase
9
+ def setup
10
+ @adder = Adder.new(5)
11
+ end
12
+
13
+ def test_add
14
+ assert_equal(7, @adder.add(2), "Should have added correctly")
15
+ end
16
+
17
+ def teardown
18
+ @adder = nil
19
+ end
20
+ end
@@ -0,0 +1,20 @@
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 TestSubtracter < Test::Unit::TestCase
9
+ def setup
10
+ @subtracter = Subtracter.new(5)
11
+ end
12
+
13
+ def test_subtract
14
+ assert_equal(3, @subtracter.subtract(2), "Should have subtracted correctly")
15
+ end
16
+
17
+ def teardown
18
+ @subtracter = nil
19
+ end
20
+ end
@@ -0,0 +1,23 @@
1
+ # nested test case example.
2
+ require 'test/unit'
3
+
4
+ class UserTest < Test::Unit::TestCase
5
+ def setup
6
+ @user = "me"
7
+ end
8
+
9
+ def test_full_name
10
+ assert_equal("me", @user)
11
+ end
12
+
13
+ class ProfileTest < UserTest
14
+ setup
15
+ def setup_profile
16
+ @user += ": profile"
17
+ end
18
+
19
+ def test_has_profile
20
+ assert_match(/: profile/, @user)
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,133 @@
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(empty_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
+ suite1 = Test::Unit::TestSuite.new(@test_case1.name)
94
+ suite1 << @test_case1.new("test_1")
95
+ suite2 = Test::Unit::TestSuite.new(@test_case2.name)
96
+ suite2 << @test_case2.new("test_0")
97
+ assert_collect(empty_suite) do |collector|
98
+ filters = [Proc.new {|test| test.method_name == 'test_1' ? true : nil},
99
+ Proc.new {|test| test.method_name == 'test_0' ? true : nil},
100
+ Proc.new {false}]
101
+ collector.filter = filters
102
+ end
103
+ end
104
+
105
+ private
106
+ def assert_collect(expected, *collect_args)
107
+ collector = Test::Unit::Collector::Descendant.new
108
+ yield(collector) if block_given?
109
+ assert_equal(expected, collector.send(:collect, *collect_args))
110
+ end
111
+
112
+ def default_name
113
+ Test::Unit::Collector::Descendant::NAME
114
+ end
115
+
116
+ def empty_suite(name=nil)
117
+ Test::Unit::TestSuite.new(name || default_name)
118
+ end
119
+
120
+ def full_suite(name=nil)
121
+ sub_suite1 = Test::Unit::TestSuite.new(@test_case1.name)
122
+ sub_suite1 << @test_case1.new('test_1')
123
+ sub_suite1 << @test_case1.new('test_2')
124
+
125
+ sub_suite2 = Test::Unit::TestSuite.new(@test_case2.name)
126
+ sub_suite2 << @test_case2.new('test_0')
127
+
128
+ suite = empty_suite(name)
129
+ suite << sub_suite1
130
+ suite << sub_suite2
131
+ suite
132
+ end
133
+ end
@@ -0,0 +1,442 @@
1
+ require 'tmpdir'
2
+ require 'pathname'
3
+
4
+ require 'test/unit'
5
+ require 'test/unit/collector/load'
6
+
7
+ class TestUnitCollectorLoad < Test::Unit::TestCase
8
+ def setup
9
+ @previous_descendants = Test::Unit::TestCase::DESCENDANTS.dup
10
+ Test::Unit::TestCase::DESCENDANTS.clear
11
+
12
+ @temporary_test_cases_module_name = "TempTestCases"
13
+ ::Object.const_set(@temporary_test_cases_module_name, Module.new)
14
+
15
+ @test_dir = Pathname(Dir.tmpdir) + "test-unit"
16
+ @extra_test_dir = Pathname(Dir.tmpdir) + "test-unit-extra"
17
+ ensure_clean_directory(@test_dir)
18
+ ensure_clean_directory(@extra_test_dir)
19
+ end
20
+
21
+ setup
22
+ def setup_top_level_test_cases
23
+ @test_case1 = @test_dir + "test_case1.rb"
24
+ @test_case2 = @test_dir + "test_case2.rb"
25
+ @no_load_test_case3 = @test_dir + "case3.rb"
26
+
27
+ @test_case1.open("w") do |test_case|
28
+ test_case.puts(<<-EOT)
29
+ module #{@temporary_test_cases_module_name}
30
+ class TestCase1 < Test::Unit::TestCase
31
+ def test1_1
32
+ end
33
+
34
+ def test1_2
35
+ end
36
+ end
37
+ end
38
+ EOT
39
+ end
40
+
41
+ @test_case2.open("w") do |test_case|
42
+ test_case.puts(<<-EOT)
43
+ module #{@temporary_test_cases_module_name}
44
+ class TestCase2 < Test::Unit::TestCase
45
+ def test2
46
+ end
47
+ end
48
+ end
49
+ EOT
50
+ end
51
+
52
+ @no_load_test_case3.open("w") do |test_case|
53
+ test_case.puts(<<-EOT)
54
+ module #{@temporary_test_cases_module_name}
55
+ class NoLoadTestCase3 < Test::Unit::TestCase
56
+ def test3
57
+ end
58
+ end
59
+ end
60
+ EOT
61
+ end
62
+ end
63
+
64
+ setup
65
+ def setup_sub_level_test_cases
66
+ @sub_test_dir = @test_dir + "sub"
67
+ @sub_test_dir.mkpath
68
+
69
+ @sub_test_case4 = @sub_test_dir + "test_case4.rb"
70
+ @no_load_sub_test_case5 = @sub_test_dir + "case5.rb"
71
+ @sub_test_case6 = @sub_test_dir + "test_case6.rb"
72
+
73
+ @sub_test_case4.open("w") do |test_case|
74
+ test_case.puts(<<-EOT)
75
+ module #{@temporary_test_cases_module_name}
76
+ class SubTestCase4 < Test::Unit::TestCase
77
+ def test4_1
78
+ end
79
+
80
+ def test4_2
81
+ end
82
+ end
83
+ end
84
+ EOT
85
+ end
86
+
87
+ @no_load_sub_test_case5.open("w") do |test_case|
88
+ test_case.puts(<<-EOT)
89
+ module #{@temporary_test_cases_module_name}
90
+ class NoLoadSubTestCase5 < Test::Unit::TestCase
91
+ def test5_1
92
+ end
93
+
94
+ def test5_2
95
+ end
96
+ end
97
+ end
98
+ EOT
99
+ end
100
+
101
+ @sub_test_case6.open("w") do |test_case|
102
+ test_case.puts(<<-EOT)
103
+ module #{@temporary_test_cases_module_name}
104
+ class SubTestCase6 < Test::Unit::TestCase
105
+ def test6
106
+ end
107
+ end
108
+ end
109
+ EOT
110
+ end
111
+ end
112
+
113
+ setup
114
+ def setup_sub_level_test_cases2
115
+ @sub2_test_dir = @test_dir + "sub2"
116
+ @sub2_test_dir.mkpath
117
+
118
+ @no_load_sub2_test_case7 = @sub2_test_dir + "case7.rb"
119
+ @sub2_test_case8 = @sub2_test_dir + "test_case8.rb"
120
+ @sub2_test_case9 = @sub2_test_dir + "test_case9.rb"
121
+
122
+ @no_load_sub2_test_case7.open("w") do |test_case|
123
+ test_case.puts(<<-EOT)
124
+ module #{@temporary_test_cases_module_name}
125
+ class NoLoadSub2TestCase7 < Test::Unit::TestCase
126
+ def test7_1
127
+ end
128
+
129
+ def test7_2
130
+ end
131
+ end
132
+ end
133
+ EOT
134
+ end
135
+
136
+ @sub2_test_case8.open("w") do |test_case|
137
+ test_case.puts(<<-EOT)
138
+ module #{@temporary_test_cases_module_name}
139
+ class Sub2TestCase8 < Test::Unit::TestCase
140
+ def test8_1
141
+ end
142
+
143
+ def test8_2
144
+ end
145
+ end
146
+ end
147
+ EOT
148
+ end
149
+
150
+ @sub2_test_case9.open("w") do |test_case|
151
+ test_case.puts(<<-EOT)
152
+ module #{@temporary_test_cases_module_name}
153
+ class Sub2TestCase9 < Test::Unit::TestCase
154
+ def test9
155
+ end
156
+ end
157
+ end
158
+ EOT
159
+ end
160
+ end
161
+
162
+ setup
163
+ def setup_svn_test_cases
164
+ @svn_test_dir = @test_dir + ".svn"
165
+ @svn_test_dir.mkpath
166
+
167
+ @svn_test_case10 = @svn_test_dir + "test_case10.rb"
168
+
169
+ @svn_test_case10.open("w") do |test_case|
170
+ test_case.puts(<<-EOT)
171
+ module #{@temporary_test_cases_module_name}
172
+ class SvnTestCase10 < Test::Unit::TestCase
173
+ def test7
174
+ end
175
+ end
176
+ end
177
+ EOT
178
+ end
179
+ end
180
+
181
+ setup
182
+ def setup_sub_cvs_test_cases
183
+ @sub_cvs_test_dir = @sub_test_dir + "CVS"
184
+ @sub_cvs_test_dir.mkpath
185
+
186
+ @sub_cvs_test_case11 = @sub_cvs_test_dir + "test_case11.rb"
187
+
188
+ @sub_cvs_test_case11.open("w") do |test_case|
189
+ test_case.puts(<<-EOT)
190
+ module #{@temporary_test_cases_module_name}
191
+ class SubCVSTestCase11 < Test::Unit::TestCase
192
+ def test11
193
+ end
194
+ end
195
+ end
196
+ EOT
197
+ end
198
+ end
199
+
200
+ setup
201
+ def setup_sub_git_test_cases
202
+ @sub_git_test_dir = @sub_test_dir + ".git"
203
+ @sub_git_test_dir.mkpath
204
+
205
+ @sub_git_test_case11 = @sub_git_test_dir + "test_case11.rb"
206
+
207
+ @sub_git_test_case11.open("w") do |test_case|
208
+ test_case.puts(<<-EOT)
209
+ module #{@temporary_test_cases_module_name}
210
+ class SubGitTestCase11 < Test::Unit::TestCase
211
+ def test11
212
+ end
213
+ end
214
+ end
215
+ EOT
216
+ end
217
+ end
218
+
219
+ setup
220
+ def setup_extra_top_level_test_cases
221
+ @test_cases12 = @extra_test_dir + "test_cases12.rb"
222
+ @test_cases12.open("w") do |test_case|
223
+ test_case.puts(<<-EOT)
224
+ module #{@temporary_test_cases_module_name}
225
+ class TestCase121 < Test::Unit::TestCase
226
+ def test121_1
227
+ end
228
+
229
+ def test121_2
230
+ end
231
+ end
232
+
233
+ class TestCase122 < Test::Unit::TestCase
234
+ def test122_1
235
+ end
236
+
237
+ def test122_2
238
+ end
239
+ end
240
+ end
241
+ EOT
242
+ end
243
+ end
244
+
245
+ setup
246
+ def setup_sub_level_extra_test_cases
247
+ @sub_extra_test_dir = @extra_test_dir + "sub"
248
+ @sub_extra_test_dir.mkpath
249
+
250
+ @cases13_test = @sub_extra_test_dir + "13cases_test.rb"
251
+ @cases13_test.open("w") do |test_case|
252
+ test_case.puts(<<-EOT)
253
+ module #{@temporary_test_cases_module_name}
254
+ class SubTestCase13 < Test::Unit::TestCase
255
+ def test13_1
256
+ end
257
+
258
+ def test13_2
259
+ end
260
+ end
261
+ end
262
+ EOT
263
+ end
264
+ end
265
+
266
+ def teardown
267
+ @test_dir.rmtree if @test_dir.exist?
268
+ ::Object.send(:remove_const, @temporary_test_cases_module_name)
269
+ Test::Unit::TestCase::DESCENDANTS.replace(@previous_descendants)
270
+ end
271
+
272
+ def test_simple_collect
273
+ assert_collect([:suite, {:name => @sub_test_dir.basename.to_s},
274
+ [:suite, {:name => _test_case_name("SubTestCase4")},
275
+ [:test, {:name => "test4_1"}],
276
+ [:test, {:name => "test4_2"}]],
277
+ [:suite, {:name => _test_case_name("SubTestCase6")},
278
+ [:test, {:name => "test6"}]]],
279
+ @sub_test_dir.to_s)
280
+ end
281
+
282
+ def test_simple_collect_test_suffix
283
+ assert_collect([:suite, {:name => @extra_test_dir.basename.to_s},
284
+ [:suite, {:name => _test_case_name("TestCase121")},
285
+ [:test, {:name => "test121_1"}],
286
+ [:test, {:name => "test121_2"}]],
287
+ [:suite, {:name => _test_case_name("TestCase122")},
288
+ [:test, {:name => "test122_1"}],
289
+ [:test, {:name => "test122_2"}]],
290
+ [:suite, {:name => @sub_extra_test_dir.basename.to_s},
291
+ [:suite, {:name => _test_case_name("SubTestCase13")},
292
+ [:test, {:name => "test13_1"}],
293
+ [:test, {:name => "test13_2"}]]]],
294
+ @extra_test_dir.to_s)
295
+ end
296
+
297
+ def test_multilevel_collect
298
+ assert_collect([:suite, {:name => "."},
299
+ [:suite, {:name => _test_case_name("TestCase1")},
300
+ [:test, {:name => "test1_1"}],
301
+ [:test, {:name => "test1_2"}]],
302
+ [:suite, {:name => _test_case_name("TestCase2")},
303
+ [:test, {:name => "test2"}]],
304
+ [:suite, {:name => @sub_test_dir.basename.to_s},
305
+ [:suite, {:name => _test_case_name("SubTestCase4")},
306
+ [:test, {:name => "test4_1"}],
307
+ [:test, {:name => "test4_2"}]],
308
+ [:suite, {:name => _test_case_name("SubTestCase6")},
309
+ [:test, {:name => "test6"}]]],
310
+ [:suite, {:name => @sub2_test_dir.basename.to_s},
311
+ [:suite, {:name => _test_case_name("Sub2TestCase8")},
312
+ [:test, {:name => "test8_1"}],
313
+ [:test, {:name => "test8_2"}]],
314
+ [:suite, {:name => _test_case_name("Sub2TestCase9")},
315
+ [:test, {:name => "test9"}]]]])
316
+ end
317
+
318
+ def test_collect_file
319
+ assert_collect([:suite, {:name => _test_case_name("TestCase1")},
320
+ [:test, {:name => "test1_1"}],
321
+ [:test, {:name => "test1_2"}]],
322
+ @test_case1.to_s)
323
+ end
324
+
325
+ def test_collect_file_no_pattern_match_file_name
326
+ assert_collect([:suite, {:name => _test_case_name("NoLoadSubTestCase5")},
327
+ [:test, {:name => "test5_1"}],
328
+ [:test, {:name => "test5_2"}]],
329
+ @no_load_sub_test_case5.to_s)
330
+ end
331
+
332
+ def test_collect_file_test_cases
333
+ assert_collect([:suite, {:name => "[#{@test_cases12}]"},
334
+ [:suite, {:name => _test_case_name("TestCase121")},
335
+ [:test, {:name => "test121_1"}],
336
+ [:test, {:name => "test121_2"}]],
337
+ [:suite, {:name => _test_case_name("TestCase122")},
338
+ [:test, {:name => "test122_1"}],
339
+ [:test, {:name => "test122_2"}]]],
340
+ @test_cases12.to_s)
341
+ end
342
+
343
+ def test_collect_files
344
+ assert_collect([:suite,
345
+ {:name => "[#{@test_case1}, #{@test_case2}]"},
346
+ [:suite, {:name => _test_case_name("TestCase1")},
347
+ [:test, {:name => "test1_1"}],
348
+ [:test, {:name => "test1_2"}]],
349
+ [:suite, {:name => _test_case_name("TestCase2")},
350
+ [:test, {:name => "test2"}]]],
351
+ @test_case1.to_s, @test_case2.to_s)
352
+ end
353
+
354
+ def test_nil_pattern
355
+ assert_collect([:suite, {:name => @sub_test_dir.basename.to_s},
356
+ [:suite, {:name => _test_case_name("NoLoadSubTestCase5")},
357
+ [:test, {:name => "test5_1"}],
358
+ [:test, {:name => "test5_2"}]],
359
+ [:suite, {:name => _test_case_name("SubTestCase4")},
360
+ [:test, {:name => "test4_1"}],
361
+ [:test, {:name => "test4_2"}]],
362
+ [:suite, {:name => _test_case_name("SubTestCase6")},
363
+ [:test, {:name => "test6"}]]],
364
+ @sub_test_dir.to_s) do |collector|
365
+ collector.patterns.clear
366
+ end
367
+ end
368
+
369
+ def test_filtering
370
+ assert_collect([:suite, {:name => "."},
371
+ [:suite, {:name => _test_case_name("TestCase1")},
372
+ [:test, {:name => "test1_1"}],
373
+ [:test, {:name => "test1_2"}]]]) do |collector|
374
+ collector.filter = Proc.new do |test|
375
+ !/\Atest1/.match(test.method_name).nil?
376
+ end
377
+ end
378
+ end
379
+
380
+ def test_collect_multi
381
+ test_dirs = [@sub_test_dir.to_s, @sub2_test_dir.to_s]
382
+ assert_collect([:suite, {:name => "[#{test_dirs.join(', ')}]"},
383
+ [:suite, {:name => @sub_test_dir.basename.to_s},
384
+ [:suite, {:name => _test_case_name("SubTestCase4")},
385
+ [:test, {:name => "test4_1"}],
386
+ [:test, {:name => "test4_2"}]],
387
+ [:suite, {:name => _test_case_name("SubTestCase6")},
388
+ [:test, {:name => "test6"}]]],
389
+ [:suite, {:name => @sub2_test_dir.basename.to_s},
390
+ [:suite, {:name => _test_case_name("Sub2TestCase8")},
391
+ [:test, {:name => "test8_1"}],
392
+ [:test, {:name => "test8_2"}]],
393
+ [:suite, {:name => _test_case_name("Sub2TestCase9")},
394
+ [:test, {:name => "test9"}]]]],
395
+ *test_dirs)
396
+ end
397
+
398
+ private
399
+ def assert_collect(expected, *collect_args)
400
+ keep_required_files do
401
+ Dir.chdir(@test_dir.to_s) do
402
+ collector = Test::Unit::Collector::Load.new
403
+ yield(collector) if block_given?
404
+ actual = inspect_test_object(collector.send(:collect, *collect_args))
405
+ assert_equal(expected, actual)
406
+ end
407
+ end
408
+ end
409
+
410
+ def ensure_clean_directory(directory)
411
+ directory.rmtree if directory.exist?
412
+ directory.mkpath
413
+ end
414
+
415
+ def keep_required_files
416
+ required_files = $".dup
417
+ yield
418
+ ensure
419
+ $".replace(required_files)
420
+ end
421
+
422
+ def _test_case_name(test_case_class_name)
423
+ "#{@temporary_test_cases_module_name}::#{test_case_class_name}"
424
+ end
425
+
426
+ def inspect_test_object(test_object)
427
+ return nil if test_object.nil?
428
+ case test_object
429
+ when Test::Unit::TestSuite
430
+ sub_tests = test_object.tests.collect do |test|
431
+ inspect_test_object(test)
432
+ end.sort_by do |type, attributes, *children|
433
+ attributes[:name]
434
+ end
435
+ [:suite, {:name => test_object.name}, *sub_tests]
436
+ when Test::Unit::TestCase
437
+ [:test, {:name => test_object.method_name}]
438
+ else
439
+ raise "unexpected test object: #{test_object.inspect}"
440
+ end
441
+ end
442
+ end