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,70 @@
1
+ require 'test/unit'
2
+ require 'testunit-test-util'
3
+
4
+ class TestUnitPending < Test::Unit::TestCase
5
+ include TestUnitTestUtil
6
+
7
+ class TestCase < Test::Unit::TestCase
8
+ class << self
9
+ def suite
10
+ Test::Unit::TestSuite.new(name)
11
+ end
12
+ end
13
+
14
+ def test_pend
15
+ pend("1st pend")
16
+ pend("2nd pend. Should not be reached here.")
17
+ assert(true, "Should not be reached here too.")
18
+ end
19
+
20
+ def test_pend_with_failure_in_block
21
+ pend("Wait a minute") do
22
+ raise "Not implemented yet"
23
+ end
24
+ assert(true, "Reached here.")
25
+ end
26
+
27
+ def test_pend_with_no_failure_in_block
28
+ pend("Wait a minute") do
29
+ "Nothing raised"
30
+ end
31
+ assert(true, "Not reached here.")
32
+ end
33
+ end
34
+
35
+ def test_pend
36
+ test = nil
37
+ result = _run_test("test_pend") {|t| test = t}
38
+ assert_equal("1 tests, 0 assertions, 0 failures, 0 errors, 1 pendings, " \
39
+ "0 omissions, 0 notifications",
40
+ result.to_s)
41
+ assert_fault_messages(["1st pend"], result.pendings)
42
+ assert_true(test.interrupted?)
43
+ end
44
+
45
+ def test_pend_with_failure_in_block
46
+ test = nil
47
+ result = _run_test("test_pend_with_failure_in_block") {|t| test = t}
48
+ assert_equal("1 tests, 1 assertions, 0 failures, 0 errors, 1 pendings, " \
49
+ "0 omissions, 0 notifications",
50
+ result.to_s)
51
+ assert_fault_messages(["Wait a minute"], result.pendings)
52
+ assert_false(test.interrupted?)
53
+ end
54
+
55
+ def test_pend_with_no_failure_in_block
56
+ test = nil
57
+ result = _run_test("test_pend_with_no_failure_in_block") {|t| test = t}
58
+ assert_equal("1 tests, 1 assertions, 1 failures, 0 errors, 0 pendings, " \
59
+ "0 omissions, 0 notifications",
60
+ result.to_s)
61
+ assert_fault_messages(["Pending block should not be passed: Wait a minute."],
62
+ result.failures)
63
+ assert_true(test.interrupted?)
64
+ end
65
+
66
+ private
67
+ def _run_test(name, &block)
68
+ super(TestCase, name, &block)
69
+ end
70
+ end
@@ -0,0 +1,119 @@
1
+ require 'test/unit'
2
+
3
+ class TestUnitPriority < Test::Unit::TestCase
4
+ class TestCase < Test::Unit::TestCase
5
+ class << self
6
+ def suite
7
+ Test::Unit::TestSuite.new(name)
8
+ end
9
+ end
10
+
11
+ priority :must
12
+ def test_must
13
+ assert(true)
14
+ end
15
+
16
+ def test_must_inherited
17
+ assert(true)
18
+ end
19
+
20
+ priority :important
21
+ def test_important
22
+ assert(true)
23
+ end
24
+
25
+ def test_important_inherited
26
+ assert(true)
27
+ end
28
+
29
+ priority :high
30
+ def test_high
31
+ assert(true)
32
+ end
33
+
34
+ def test_high_inherited
35
+ assert(true)
36
+ end
37
+
38
+ priority :normal
39
+ def test_normal
40
+ assert(true)
41
+ end
42
+
43
+ def test_normal_inherited
44
+ assert(true)
45
+ end
46
+
47
+ priority :low
48
+ def test_low
49
+ assert(true)
50
+ end
51
+
52
+ def test_low_inherited
53
+ assert(true)
54
+ end
55
+
56
+ priority :never
57
+ def test_never
58
+ assert(true)
59
+ end
60
+
61
+ def test_never_inherited
62
+ assert(true)
63
+ end
64
+ end
65
+
66
+ def test_priority
67
+ assert_priority("must", 1.0, 0.0001)
68
+ assert_priority("important", 0.9, 0.09)
69
+ assert_priority("high", 0.70, 0.1)
70
+ assert_priority("normal", 0.5, 0.1)
71
+ assert_priority("low", 0.25, 0.1)
72
+ assert_priority("never", 0.0, 0.0001)
73
+ end
74
+
75
+ def assert_priority(priority, expected, delta)
76
+ assert_need_to_run("test_#{priority}", expected, delta)
77
+ assert_need_to_run("test_#{priority}_inherited", expected, delta)
78
+ end
79
+
80
+ def assert_need_to_run(test_name, expected, delta)
81
+ test = TestCase.new(test_name)
82
+ n = 1000
83
+ n_need_to_run = 0
84
+ n.times do |i|
85
+ n_need_to_run +=1 if Test::Unit::Priority::Checker.need_to_run?(test)
86
+ end
87
+ assert_in_delta(expected, n_need_to_run.to_f / n, delta)
88
+ end
89
+
90
+ class SpecialNameTestCase < Test::Unit::TestCase
91
+ class << self
92
+ def suite
93
+ Test::Unit::TestSuite.new(name)
94
+ end
95
+ end
96
+
97
+ def test_question?
98
+ end
99
+
100
+ def test_exclamation!
101
+ end
102
+
103
+ def test_equal=
104
+ end
105
+ end
106
+
107
+ def test_escaped?
108
+ assert_escaped_name("test_question.predicate", "test_question?")
109
+ assert_escaped_name("test_exclamation.destructive", "test_exclamation!")
110
+ assert_escaped_name("test_equal.equal", "test_equal=")
111
+ end
112
+
113
+ def assert_escaped_name(expected, test_method_name)
114
+ checker = Checker.new(SpecialNameTestCase.new(test_method_name))
115
+ passed_file = checker.send(:passed_file)
116
+ method_name_component = File.basename(File.dirname(passed_file))
117
+ assert_equal(expected, method_name_component)
118
+ end
119
+ end
@@ -0,0 +1,544 @@
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 TestTestCase < TestCase
10
+ self.test_order = :random
11
+ def test_creation
12
+ tc = Class.new(TestCase) do
13
+ def test_with_arguments(arg1, arg2)
14
+ end
15
+ end
16
+
17
+ caught = true
18
+ catch(:invalid_test) do
19
+ tc.new(:test_with_arguments)
20
+ caught = false
21
+ end
22
+ check("Should have caught an invalid test when there are arguments", caught)
23
+
24
+ caught = true
25
+ catch(:invalid_test) do
26
+ tc.new(:non_existent_test)
27
+ caught = false
28
+ end
29
+ check("Should have caught an invalid test when the method does not exist", caught)
30
+ end
31
+
32
+ def setup
33
+ @tc_failure_error = Class.new(TestCase) do
34
+ def test_failure
35
+ assert_block("failure") { false }
36
+ end
37
+ def test_error
38
+ 1 / 0
39
+ end
40
+ def test_nested_failure
41
+ nested
42
+ end
43
+ def nested
44
+ assert_block("nested"){false}
45
+ end
46
+ def return_passed?
47
+ return passed?
48
+ end
49
+ end
50
+
51
+ def @tc_failure_error.name
52
+ "TC_FailureError"
53
+ end
54
+ end
55
+
56
+ def test_add_failed_assertion
57
+ test_case = @tc_failure_error.new(:test_failure)
58
+ check("passed? should start out true", test_case.return_passed?)
59
+ result = TestResult.new
60
+ called = false
61
+ result.add_listener(TestResult::FAULT) {
62
+ | fault |
63
+ check("Should have a Failure", fault.instance_of?(Failure))
64
+ check("The Failure should have the correct message", "failure" == fault.message)
65
+ check("The Failure should have the correct test_name (was <#{fault.test_name}>)", fault.test_name == "test_failure(TC_FailureError)")
66
+ r = /\A.*#{Regexp.escape(File.basename(__FILE__))}:\d+:in `test_failure'\Z/
67
+
68
+ location = fault.location
69
+ check("The location should be an array", location.kind_of?(Array))
70
+ check("The location should have two lines (was: <#{location.inspect}>)", location.size == 2)
71
+ check("The Failure should have the correct location (was <#{location[0].inspect}>, expected <#{r.inspect}>)", r =~ location[0])
72
+ called = true
73
+ }
74
+ progress = []
75
+ test_case.run(result) { |*arguments| progress << arguments }
76
+ check("The failure should have triggered the listener", called)
77
+ check("The failure should have set passed?", !test_case.return_passed?)
78
+ check("The progress block should have been updated correctly", [[TestCase::STARTED, test_case.name], [TestCase::FINISHED, test_case.name]] == progress)
79
+ end
80
+
81
+ def test_add_failure_nested
82
+ test_case = @tc_failure_error.new(:test_nested_failure)
83
+ check("passed? should start out true", test_case.return_passed?)
84
+
85
+ result = TestResult.new
86
+ called = false
87
+ result.add_listener(TestResult::FAULT) {
88
+ | fault |
89
+ check("Should have a Failure", fault.instance_of?(Failure))
90
+ check("The Failure should have the correct message", "nested" == fault.message)
91
+ check("The Failure should have the correct test_name (was <#{fault.test_name}>)", fault.test_name == "test_nested_failure(TC_FailureError)")
92
+ r =
93
+
94
+ location = fault.location
95
+ check("The location should be an array", location.kind_of?(Array))
96
+ check("The location should have the correct number of lines (was: <#{location.inspect}>)", location.size == 3)
97
+ check("The Failure should have the correct location (was <#{location[0].inspect}>)", /\A.*#{Regexp.escape(File.basename(__FILE__))}:\d+:in `nested'\Z/ =~ location[0])
98
+ 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])
99
+ called = true
100
+ }
101
+ test_case.run(result){}
102
+ check("The failure should have triggered the listener", called)
103
+ end
104
+
105
+ def test_add_error
106
+ test_case = @tc_failure_error.new(:test_error)
107
+ check("passed? should start out true", test_case.return_passed?)
108
+ result = TestResult.new
109
+ called = false
110
+ result.add_listener(TestResult::FAULT) {
111
+ | fault |
112
+ check("Should have a TestError", fault.instance_of?(Error))
113
+ check("The Error should have the correct message", "ZeroDivisionError: divided by 0" == fault.message)
114
+ check("The Error should have the correct test_name", "test_error(TC_FailureError)" == fault.test_name)
115
+ check("The Error should have the correct exception", fault.exception.instance_of?(ZeroDivisionError))
116
+ called = true
117
+ }
118
+ test_case.run(result) {}
119
+ check("The error should have triggered the listener", called)
120
+ check("The error should have set passed?", !test_case.return_passed?)
121
+ end
122
+
123
+ def test_no_tests
124
+ suite = TestCase.suite
125
+ check("Should have a test suite", suite.instance_of?(TestSuite))
126
+ check("Should have one test", suite.size == 1)
127
+ check("Should have the default test", suite.tests.first.name == "default_test(Test::Unit::TestCase)")
128
+
129
+ result = TestResult.new
130
+ suite.run(result) {}
131
+ check("Should have had one test run", result.run_count == 1)
132
+ check("Should have had one test failure", result.failure_count == 1)
133
+ check("Should have had no errors", result.error_count == 0)
134
+ end
135
+
136
+ def test_suite
137
+ tc = Class.new(TestCase) do
138
+ def test_succeed
139
+ assert_block {true}
140
+ end
141
+ def test_fail
142
+ assert_block {false}
143
+ end
144
+ def test_error
145
+ 1/0
146
+ end
147
+ def dont_run
148
+ assert_block {true}
149
+ end
150
+ def test_dont_run(argument)
151
+ assert_block {true}
152
+ end
153
+ def test
154
+ assert_block {true}
155
+ end
156
+ end
157
+
158
+ suite = tc.suite
159
+ check("Should have a test suite", suite.instance_of?(TestSuite))
160
+ check("Should have three tests", suite.size == 3)
161
+
162
+ result = TestResult.new
163
+ suite.run(result) {}
164
+ check("Should have had three test runs", result.run_count == 3)
165
+ check("Should have had one test failure", result.failure_count == 1)
166
+ check("Should have had one test error", result.error_count == 1)
167
+ end
168
+
169
+
170
+ def test_setup_teardown
171
+ tc = Class.new(TestCase) do
172
+ attr_reader(:setup_called, :teardown_called)
173
+ def initialize(test)
174
+ super(test)
175
+ @setup_called = false
176
+ @teardown_called = false
177
+ end
178
+ def setup
179
+ @setup_called = true
180
+ end
181
+ def teardown
182
+ @teardown_called = true
183
+ end
184
+ def test_succeed
185
+ assert_block {true}
186
+ end
187
+ def test_fail
188
+ assert_block {false}
189
+ end
190
+ def test_error
191
+ raise "Error!"
192
+ end
193
+ end
194
+ result = TestResult.new
195
+
196
+ test = tc.new(:test_succeed)
197
+ test.run(result) {}
198
+ check("Should have called setup the correct number of times", test.setup_called)
199
+ check("Should have called teardown the correct number of times", test.teardown_called)
200
+
201
+ test = tc.new(:test_fail)
202
+ test.run(result) {}
203
+ check("Should have called setup the correct number of times", test.setup_called)
204
+ check("Should have called teardown the correct number of times", test.teardown_called)
205
+
206
+ test = tc.new(:test_error)
207
+ test.run(result) {}
208
+ check("Should have called setup the correct number of times", test.setup_called)
209
+ check("Should have called teardown the correct number of times", test.teardown_called)
210
+
211
+ check("Should have had two test runs", result.run_count == 3)
212
+ check("Should have had a test failure", result.failure_count == 1)
213
+ check("Should have had a test error", result.error_count == 1)
214
+ end
215
+
216
+ def test_assertion_failed_not_called
217
+ tc = Class.new(TestCase) do
218
+ def test_thing
219
+ raise AssertionFailedError.new
220
+ end
221
+ end
222
+
223
+ suite = tc.suite
224
+ check("Should have one test", suite.size == 1)
225
+ result = TestResult.new
226
+ suite.run(result) {}
227
+ check("Should have had one test run", result.run_count == 1)
228
+ check("Should have had one assertion failure", result.failure_count == 1)
229
+ check("Should not have any assertion errors but had #{result.error_count}", result.error_count == 0)
230
+ end
231
+
232
+ def test_equality
233
+ tc1 = Class.new(TestCase) do
234
+ def test_1
235
+ end
236
+ def test_2
237
+ end
238
+ end
239
+
240
+ tc2 = Class.new(TestCase) do
241
+ def test_1
242
+ end
243
+ end
244
+
245
+ test1 = tc1.new('test_1')
246
+ test2 = tc1.new('test_1')
247
+ check("Should be equal", test1 == test2)
248
+ check("Should be equal", test2 == test1)
249
+
250
+ test1 = tc1.new('test_2')
251
+ check("Should not be equal", test1 != test2)
252
+ check("Should not be equal", test2 != test1)
253
+
254
+ test2 = tc1.new('test_2')
255
+ check("Should be equal", test1 == test2)
256
+ check("Should be equal", test2 == test1)
257
+
258
+ test1 = tc1.new('test_1')
259
+ test2 = tc2.new('test_1')
260
+ check("Should not be equal", test1 != test2)
261
+ check("Should not be equal", test2 != test1)
262
+
263
+
264
+ check("Should not be equal", test1 != Object.new)
265
+ check("Should not be equal", Object.new != test1)
266
+ end
267
+
268
+ def test_re_raise_exception
269
+ test_case = Class.new(TestCase) do
270
+ def test_raise_interrupt
271
+ raise Interrupt, "from test"
272
+ end
273
+ end
274
+
275
+ test = test_case.new("test_raise_interrupt")
276
+ begin
277
+ test.run(TestResult.new) {}
278
+ check("Should not be reached", false)
279
+ rescue Exception
280
+ check("Interrupt exception should be re-raised", $!.class == Interrupt)
281
+ end
282
+ end
283
+
284
+ def test_startup_shutdown
285
+ called = []
286
+ test_case = Class.new(TestCase) do
287
+ @@called = called
288
+ class << self
289
+ def startup
290
+ @@called << :startup
291
+ end
292
+
293
+ def shutdown
294
+ @@called << :shutdown
295
+ end
296
+ end
297
+
298
+ def setup
299
+ @@called << :setup
300
+ end
301
+
302
+ def teardown
303
+ @@called << :teardown
304
+ end
305
+
306
+ def test1
307
+ end
308
+
309
+ def test2
310
+ end
311
+ end
312
+
313
+ test_suite = test_case.suite
314
+ test_suite.run(TestResult.new) {}
315
+ check("startup/shutdown should be called once per test case" +
316
+ ": #{called.inspect}",
317
+ called == [:startup,
318
+ :setup, :teardown,
319
+ :setup, :teardown,
320
+ :shutdown])
321
+ end
322
+
323
+ def test_error_on_startup
324
+ test_case = Class.new(TestCase) do
325
+ class << self
326
+ def startup
327
+ raise "from startup"
328
+ end
329
+ end
330
+
331
+ def test_nothing
332
+ end
333
+ end
334
+
335
+ test_suite = test_case.suite
336
+ result = TestResult.new
337
+ test_suite.run(result) {}
338
+ check("Should record an error on startup: #{result}",
339
+ result.error_count == 1)
340
+ end
341
+
342
+ def test_pass_through_error_on_startup
343
+ test_case = Class.new(TestCase) do
344
+ class << self
345
+ def startup
346
+ raise Interrupt, "from startup"
347
+ end
348
+ end
349
+
350
+ def test_nothing
351
+ end
352
+ end
353
+
354
+ test_suite = test_case.suite
355
+ begin
356
+ test_suite.run(TestResult.new) {}
357
+ check("Should not be reached", false)
358
+ rescue Exception
359
+ check("Interrupt should be passed through: #{$!}",
360
+ Interrupt === $!)
361
+ end
362
+ end
363
+
364
+ def test_error_on_shutdown
365
+ test_case = Class.new(TestCase) do
366
+ class << self
367
+ def shutdown
368
+ raise "from shutdown"
369
+ end
370
+ end
371
+
372
+ def test_nothing
373
+ end
374
+ end
375
+
376
+ test_suite = test_case.suite
377
+ result = TestResult.new
378
+ test_suite.run(result) {}
379
+ check("Should record an error on shutdown: #{result}",
380
+ result.error_count == 1)
381
+ end
382
+
383
+ def test_pass_through_error_on_shutdown
384
+ test_case = Class.new(TestCase) do
385
+ class << self
386
+ def shutdown
387
+ raise Interrupt, "from shutdown"
388
+ end
389
+ end
390
+
391
+ def test_nothing
392
+ end
393
+ end
394
+
395
+ test_suite = test_case.suite
396
+ begin
397
+ test_suite.run(TestResult.new) {}
398
+ check("Should not be reached", false)
399
+ rescue Exception
400
+ check("Interrupt should be passed through: #{$!}",
401
+ Interrupt === $!)
402
+ end
403
+ end
404
+
405
+ def test_interrupted
406
+ test_case = Class.new(TestCase) do
407
+ def test_fail
408
+ flunk
409
+ end
410
+
411
+ def test_nothing
412
+ end
413
+ end
414
+
415
+ failed_test = test_case.new(:test_fail)
416
+ failed_test.run(TestResult.new) {}
417
+ check("Should be interrupted", failed_test.interrupted?)
418
+
419
+ success_test = test_case.new(:test_nothing)
420
+ success_test.run(TestResult.new) {}
421
+ check("Should not be interrupted", !success_test.interrupted?)
422
+ end
423
+
424
+ def test_inherited_test_should_be_ignored
425
+ test_case = Class.new(TestCase) do
426
+ def test_nothing
427
+ end
428
+ end
429
+
430
+ sub_test_case = Class.new(test_case) do
431
+ def test_fail
432
+ flunk
433
+ end
434
+ end
435
+
436
+ assert_nothing_thrown do
437
+ test_case.new("test_nothing")
438
+ end
439
+
440
+ assert_nothing_thrown do
441
+ sub_test_case.new("test_fail")
442
+ end
443
+
444
+ assert_throw(:invalid_test) do
445
+ sub_test_case.new("test_nothing")
446
+ end
447
+ end
448
+
449
+ def test_mixin_test_should_not_be_ignored
450
+ test_module = Module.new do
451
+ def test_nothing
452
+ end
453
+ end
454
+
455
+ test_case = Class.new(Test::Unit::TestCase) do
456
+ include test_module
457
+
458
+ def test_fail
459
+ flunk
460
+ end
461
+ end
462
+
463
+ assert_nothing_thrown do
464
+ test_case.new("test_nothing")
465
+ end
466
+
467
+ assert_nothing_thrown do
468
+ test_case.new("test_fail")
469
+ end
470
+ end
471
+
472
+ def test_defined_order
473
+ test_case = Class.new(Test::Unit::TestCase) do
474
+ def test_z
475
+ end
476
+
477
+ def test_1
478
+ end
479
+
480
+ def test_a
481
+ end
482
+ end
483
+
484
+ assert_equal(["test_1", "test_a", "test_z"],
485
+ test_case.suite.tests.collect {|test| test.method_name})
486
+
487
+ test_case.test_order = :defined
488
+ assert_equal(["test_z", "test_1", "test_a"],
489
+ test_case.suite.tests.collect {|test| test.method_name})
490
+ end
491
+
492
+ def test_declarative_style
493
+ test_case = Class.new(Test::Unit::TestCase) do
494
+ test "declarative style test definition" do
495
+ end
496
+
497
+ test "include parenthesis" do
498
+ end
499
+
500
+ test "1 + 2 = 3" do
501
+ end
502
+ end
503
+
504
+ test_case.test_order = :defined
505
+
506
+ assert_equal(["test_declarative_style_test_definition",
507
+ "test_include_parenthesis",
508
+ "test_1_2_3"],
509
+ test_case.suite.tests.collect {|test| test.method_name})
510
+
511
+ assert_equal(["declarative style test definition",
512
+ "include parenthesis",
513
+ "1 + 2 = 3"],
514
+ test_case.suite.tests.collect {|test| test.description})
515
+ end
516
+
517
+ def test_redefine_method
518
+ test_case = Class.new(Test::Unit::TestCase) do
519
+ def test_name
520
+ end
521
+ alias_method :test_name2, :test_name
522
+
523
+ def test_name
524
+ end
525
+ end
526
+
527
+ suite = test_case.suite
528
+ assert_equal(["test_name", "test_name2"],
529
+ suite.tests.collect {|test| test.method_name})
530
+ result = TestResult.new
531
+ suite.run(result) {}
532
+ assert_equal("2 tests, 0 assertions, 0 failures, " +
533
+ "0 errors, 0 pendings, 0 omissions, 1 notifications",
534
+ result.summary)
535
+ end
536
+
537
+ private
538
+ def check(message, passed)
539
+ add_assertion
540
+ raise AssertionFailedError.new(message) unless passed
541
+ end
542
+ end
543
+ end
544
+ end