activeldap 1.0.1 → 1.0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (147) hide show
  1. data/CHANGES +34 -0
  2. data/README +13 -0
  3. data/Rakefile +2 -1
  4. data/TODO +6 -0
  5. data/benchmark/bench-al.rb +68 -17
  6. data/examples/al-admin/app/helpers/application_helper.rb +3 -5
  7. data/examples/al-admin/app/views/layouts/_footer.html.erb +2 -0
  8. data/examples/al-admin/config/boot.rb +7 -7
  9. data/examples/al-admin/config/environment.rb +27 -12
  10. data/examples/al-admin/config/environments/development.rb +0 -1
  11. data/examples/al-admin/config/environments/production.rb +6 -1
  12. data/examples/al-admin/config/environments/test.rb +1 -1
  13. data/examples/al-admin/config/initializers/gettext.rb +15 -1
  14. data/examples/al-admin/po/en/al-admin.po +1 -1
  15. data/examples/al-admin/po/ja/al-admin.po +1 -1
  16. data/examples/al-admin/po/nl/al-admin.po +1 -1
  17. data/examples/al-admin/public/dispatch.cgi +0 -0
  18. data/examples/al-admin/public/dispatch.fcgi +0 -0
  19. data/examples/al-admin/public/dispatch.rb +0 -0
  20. data/examples/al-admin/public/javascripts/controls.js +73 -73
  21. data/examples/al-admin/public/javascripts/dragdrop.js +166 -165
  22. data/examples/al-admin/public/javascripts/effects.js +174 -166
  23. data/examples/al-admin/public/javascripts/prototype.js +362 -267
  24. data/examples/al-admin/script/about +0 -0
  25. data/examples/al-admin/script/console +0 -0
  26. data/examples/al-admin/script/dbconsole +3 -0
  27. data/examples/al-admin/script/destroy +0 -0
  28. data/examples/al-admin/script/generate +0 -0
  29. data/examples/al-admin/script/performance/benchmarker +0 -0
  30. data/examples/al-admin/script/performance/profiler +0 -0
  31. data/examples/al-admin/script/performance/request +0 -0
  32. data/examples/al-admin/script/plugin +0 -0
  33. data/examples/al-admin/script/process/inspector +0 -0
  34. data/examples/al-admin/script/process/reaper +0 -0
  35. data/examples/al-admin/script/process/spawner +0 -0
  36. data/examples/al-admin/script/runner +0 -0
  37. data/examples/al-admin/script/server +0 -0
  38. data/examples/al-admin/test/run-test.sh +0 -0
  39. data/examples/groupadd +0 -0
  40. data/examples/groupdel +0 -0
  41. data/examples/groupls +0 -0
  42. data/examples/groupmod +0 -0
  43. data/examples/lpasswd +0 -0
  44. data/examples/ouadd +0 -0
  45. data/examples/useradd +0 -0
  46. data/examples/useradd-binary +0 -0
  47. data/examples/userdel +0 -0
  48. data/examples/userls +0 -0
  49. data/examples/usermod +0 -0
  50. data/examples/usermod-binary-add +0 -0
  51. data/examples/usermod-binary-add-time +0 -0
  52. data/examples/usermod-binary-del +0 -0
  53. data/examples/usermod-lang-add +0 -0
  54. data/lib/active_ldap.rb +10 -4
  55. data/lib/active_ldap/action_controller/ldap_benchmarking.rb +28 -9
  56. data/lib/active_ldap/adapter/base.rb +30 -17
  57. data/lib/active_ldap/adapter/jndi.rb +5 -1
  58. data/lib/active_ldap/adapter/ldap.rb +5 -1
  59. data/lib/active_ldap/association/has_many_utils.rb +7 -1
  60. data/lib/active_ldap/associations.rb +10 -5
  61. data/lib/active_ldap/attributes.rb +6 -1
  62. data/lib/active_ldap/base.rb +154 -52
  63. data/lib/active_ldap/configuration.rb +1 -1
  64. data/lib/active_ldap/connection.rb +7 -4
  65. data/lib/active_ldap/get_text.rb +11 -3
  66. data/lib/active_ldap/ldif.rb +16 -4
  67. data/lib/active_ldap/operations.rb +13 -5
  68. data/lib/active_ldap/schema.rb +6 -2
  69. data/lib/active_ldap/schema/syntaxes.rb +15 -3
  70. data/lib/active_ldap/user_password.rb +4 -4
  71. data/lib/active_ldap/validations.rb +32 -44
  72. data/lib/active_ldap/xml.rb +125 -0
  73. data/po/en/active-ldap.po +740 -85
  74. data/po/ja/active-ldap.po +748 -547
  75. data/rails/README +54 -0
  76. data/rails/init.rb +33 -0
  77. data/rails/plugin/active_ldap/generators/README +2 -0
  78. data/rails/plugin/active_ldap/generators/model_active_ldap/model_active_ldap_generator.rb +1 -1
  79. data/rails/plugin/active_ldap/init.rb +3 -0
  80. data/rails_generators/model_active_ldap/USAGE +17 -0
  81. data/rails_generators/model_active_ldap/model_active_ldap_generator.rb +69 -0
  82. data/rails_generators/model_active_ldap/templates/model_active_ldap.rb +3 -0
  83. data/rails_generators/model_active_ldap/templates/unit_test.rb +8 -0
  84. data/rails_generators/scaffold_active_ldap/scaffold_active_ldap_generator.rb +7 -0
  85. data/rails_generators/scaffold_active_ldap/templates/ldap.yml +18 -0
  86. data/rails_generators/scaffold_al/scaffold_al_generator.rb +20 -0
  87. data/test-unit/History.txt +50 -1
  88. data/test-unit/Manifest.txt +22 -12
  89. data/test-unit/README.txt +31 -12
  90. data/test-unit/Rakefile +14 -1
  91. data/test-unit/TODO +5 -0
  92. data/test-unit/bin/testrb +0 -0
  93. data/test-unit/lib/test/unit.rb +62 -0
  94. data/test-unit/lib/test/unit/assertions.rb +419 -75
  95. data/test-unit/lib/test/unit/autorunner.rb +70 -13
  96. data/test-unit/lib/test/unit/collector.rb +1 -1
  97. data/test-unit/lib/test/unit/collector/load.rb +1 -1
  98. data/test-unit/lib/test/unit/color-scheme.rb +86 -0
  99. data/test-unit/lib/test/unit/color.rb +40 -5
  100. data/test-unit/lib/test/unit/diff.rb +14 -0
  101. data/test-unit/lib/test/unit/fixture.rb +7 -16
  102. data/test-unit/lib/test/unit/notification.rb +9 -0
  103. data/test-unit/lib/test/unit/omission.rb +14 -0
  104. data/test-unit/lib/test/unit/pending.rb +16 -0
  105. data/test-unit/lib/test/unit/priority.rb +17 -2
  106. data/test-unit/lib/test/unit/runner/console.rb +8 -2
  107. data/test-unit/lib/test/unit/testcase.rb +188 -2
  108. data/test-unit/lib/test/unit/ui/console/testrunner.rb +51 -26
  109. data/test-unit/lib/test/unit/util/method-owner-finder.rb +28 -0
  110. data/test-unit/lib/test/unit/version.rb +1 -1
  111. data/test-unit/sample/test_user.rb +22 -0
  112. data/test-unit/test/collector/{test_descendant.rb → test-descendant.rb} +0 -0
  113. data/test-unit/test/collector/{test_load.rb → test-load.rb} +1 -1
  114. data/test-unit/test/run-test.rb +0 -0
  115. data/test-unit/test/{test_attribute.rb → test-attribute.rb} +0 -0
  116. data/test-unit/test/test-color-scheme.rb +56 -0
  117. data/test-unit/test/{test_color.rb → test-color.rb} +10 -0
  118. data/test-unit/test/{test_diff.rb → test-diff.rb} +0 -0
  119. data/test-unit/test/{test_emacs_runner.rb → test-emacs-runner.rb} +0 -0
  120. data/test-unit/test/test-fixture.rb +287 -0
  121. data/test-unit/test/{test_notification.rb → test-notification.rb} +4 -4
  122. data/test-unit/test/{test_omission.rb → test-omission.rb} +6 -6
  123. data/test-unit/test/{test_pending.rb → test-pending.rb} +12 -6
  124. data/test-unit/test/{test_priority.rb → test-priority.rb} +30 -0
  125. data/test-unit/test/test_assertions.rb +411 -69
  126. data/test-unit/test/test_testcase.rb +70 -3
  127. data/test-unit/test/{testunit_test_util.rb → testunit-test-util.rb} +4 -2
  128. data/test-unit/test/ui/test_testrunmediator.rb +1 -1
  129. data/test-unit/test/util/test-method-owner-finder.rb +38 -0
  130. data/test/run-test.rb +0 -0
  131. data/test/test_adapter.rb +3 -0
  132. data/test/test_associations.rb +50 -7
  133. data/test/test_base.rb +193 -11
  134. data/test/test_connection_per_dn.rb +1 -1
  135. data/test/test_ldif.rb +86 -0
  136. data/test/test_load.rb +7 -0
  137. data/test/test_schema.rb +31 -1
  138. data/test/test_syntax.rb +20 -0
  139. data/test/test_user_password.rb +22 -14
  140. data/test/test_validation.rb +70 -29
  141. metadata +99 -77
  142. data/data/locale/en/LC_MESSAGES/active-ldap.mo +0 -0
  143. data/data/locale/ja/LC_MESSAGES/active-ldap.mo +0 -0
  144. data/examples/al-admin/config/initializers/ralative_url_support.rb +0 -1
  145. data/examples/al-admin/lib/accept_http_rails_relative_url_root.rb +0 -9
  146. data/test-unit-ext/misc/rd2html.rb +0 -42
  147. data/test-unit/test/test_fixture.rb +0 -275
@@ -1,5 +1,5 @@
1
1
  require 'test/unit'
2
- require 'testunit_test_util'
2
+ require 'testunit-test-util'
3
3
 
4
4
  class TestUnitOmission < Test::Unit::TestCase
5
5
  include TestUnitTestUtil
@@ -43,7 +43,7 @@ class TestUnitOmission < Test::Unit::TestCase
43
43
  end
44
44
 
45
45
  def test_omit
46
- result = run_test("test_omit")
46
+ result = _run_test("test_omit")
47
47
  assert_equal("1 tests, 0 assertions, 0 failures, 0 errors, 0 pendings, " \
48
48
  "1 omissions, 0 notifications",
49
49
  result.to_s)
@@ -51,7 +51,7 @@ class TestUnitOmission < Test::Unit::TestCase
51
51
  end
52
52
 
53
53
  def test_omit_with_condition
54
- result = run_test("test_omit_with_condition")
54
+ result = _run_test("test_omit_with_condition")
55
55
  assert_equal("1 tests, 0 assertions, 0 failures, 0 errors, 0 pendings, " \
56
56
  "1 omissions, 0 notifications",
57
57
  result.to_s)
@@ -59,7 +59,7 @@ class TestUnitOmission < Test::Unit::TestCase
59
59
  end
60
60
 
61
61
  def test_omit_with_block
62
- result = run_test("test_omit_with_block")
62
+ result = _run_test("test_omit_with_block")
63
63
  assert_equal("1 tests, 1 assertions, 0 failures, 0 errors, 0 pendings, " \
64
64
  "1 omissions, 0 notifications",
65
65
  result.to_s)
@@ -67,7 +67,7 @@ class TestUnitOmission < Test::Unit::TestCase
67
67
  end
68
68
 
69
69
  def test_omit_with_condition_and_block
70
- result = run_test("test_omit_with_block_and_condition")
70
+ result = _run_test("test_omit_with_block_and_condition")
71
71
  assert_equal("1 tests, 1 assertions, 0 failures, 0 errors, 0 pendings, " \
72
72
  "1 omissions, 0 notifications",
73
73
  result.to_s)
@@ -75,7 +75,7 @@ class TestUnitOmission < Test::Unit::TestCase
75
75
  end
76
76
 
77
77
  private
78
- def run_test(name)
78
+ def _run_test(name)
79
79
  super(TestCase, name)
80
80
  end
81
81
  end
@@ -1,5 +1,5 @@
1
1
  require 'test/unit'
2
- require 'testunit_test_util'
2
+ require 'testunit-test-util'
3
3
 
4
4
  class TestUnitPending < Test::Unit::TestCase
5
5
  include TestUnitTestUtil
@@ -33,32 +33,38 @@ class TestUnitPending < Test::Unit::TestCase
33
33
  end
34
34
 
35
35
  def test_pend
36
- result = run_test("test_pend")
36
+ test = nil
37
+ result = _run_test("test_pend") {|t| test = t}
37
38
  assert_equal("1 tests, 0 assertions, 0 failures, 0 errors, 1 pendings, " \
38
39
  "0 omissions, 0 notifications",
39
40
  result.to_s)
40
41
  assert_fault_messages(["1st pend"], result.pendings)
42
+ assert_true(test.interrupted?)
41
43
  end
42
44
 
43
45
  def test_pend_with_failure_in_block
44
- result = run_test("test_pend_with_failure_in_block")
46
+ test = nil
47
+ result = _run_test("test_pend_with_failure_in_block") {|t| test = t}
45
48
  assert_equal("1 tests, 1 assertions, 0 failures, 0 errors, 1 pendings, " \
46
49
  "0 omissions, 0 notifications",
47
50
  result.to_s)
48
51
  assert_fault_messages(["Wait a minute"], result.pendings)
52
+ assert_false(test.interrupted?)
49
53
  end
50
54
 
51
55
  def test_pend_with_no_failure_in_block
52
- result = run_test("test_pend_with_no_failure_in_block")
56
+ test = nil
57
+ result = _run_test("test_pend_with_no_failure_in_block") {|t| test = t}
53
58
  assert_equal("1 tests, 1 assertions, 1 failures, 0 errors, 0 pendings, " \
54
59
  "0 omissions, 0 notifications",
55
60
  result.to_s)
56
61
  assert_fault_messages(["Pending block should not be passed: Wait a minute."],
57
62
  result.failures)
63
+ assert_true(test.interrupted?)
58
64
  end
59
65
 
60
66
  private
61
- def run_test(name)
62
- super(TestCase, name)
67
+ def _run_test(name, &block)
68
+ super(TestCase, name, &block)
63
69
  end
64
70
  end
@@ -86,4 +86,34 @@ class TestUnitPriority < Test::Unit::TestCase
86
86
  end
87
87
  assert_in_delta(expected, n_need_to_run.to_f / n, delta)
88
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
89
119
  end
@@ -1,5 +1,6 @@
1
1
  # Author:: Nathaniel Talbott.
2
2
  # Copyright:: Copyright (c) 2000-2002 Nathaniel Talbott. All rights reserved.
3
+ # Copyright (c) 2009 Kouhei Sutou.
3
4
  # License:: Ruby license.
4
5
 
5
6
  require 'test/unit'
@@ -7,6 +8,10 @@ require 'test/unit'
7
8
  module Test
8
9
  module Unit
9
10
  class TC_Assertions < TestCase
11
+ backtrace_pre = "---Backtrace---"
12
+ backtrace_post = "---------------"
13
+ BACKTRACE_RE = /#{backtrace_pre}\n.+\n#{backtrace_post}/m
14
+
10
15
  def check(value, message="")
11
16
  add_assertion
12
17
  raise AssertionFailedError.new(message) unless value
@@ -116,9 +121,6 @@ module Test
116
121
  check_nothing_fails {
117
122
  assert_equal("string1", "string1")
118
123
  }
119
- check_nothing_fails {
120
- assert_equal( "string1", "string1", "successful assert_equal")
121
- }
122
124
  check_nothing_fails {
123
125
  assert_equal("string1", "string1", "successful assert_equal")
124
126
  }
@@ -166,6 +168,47 @@ EOM
166
168
  end
167
169
  end
168
170
 
171
+ def test_assert_equal_with_long_line
172
+ expected = ["0123456789",
173
+ "1123456789",
174
+ "2123456789",
175
+ "3123456789",
176
+ "4123456789",
177
+ "5123456789",
178
+ "6123456789",
179
+ "7123456789",
180
+ "8123456789"].join
181
+ actual = ["0000000000",
182
+ "1123456789",
183
+ "2123456789",
184
+ "3123456789",
185
+ "4123456789",
186
+ "5123456789",
187
+ "6123456789",
188
+ "7123456789",
189
+ "8123456789"].join
190
+ message = <<-EOM.chomp
191
+ <"#{expected}"> expected but was
192
+ <"#{actual}">.
193
+
194
+ diff:
195
+ - #{expected}
196
+ ? ^^^^^^^^^
197
+ + #{actual}
198
+ ? ^^^^^^^^^
199
+
200
+ folded diff:
201
+ - 012345678911234567892123456789312345678941234567895123456789612345678971234567
202
+ ? ^^^^^^^^^
203
+ + 000000000011234567892123456789312345678941234567895123456789612345678971234567
204
+ ? ^^^^^^^^^
205
+ 898123456789
206
+ EOM
207
+ check_fails(message) do
208
+ assert_equal(expected, actual)
209
+ end
210
+ end
211
+
169
212
  def test_assert_equal_for_too_small_difference
170
213
  message = <<-EOM.chomp
171
214
  <1> expected but was
@@ -203,85 +246,191 @@ EOM
203
246
  end
204
247
  end
205
248
 
206
- def test_assert_raise
249
+ def test_assert_raise_success
207
250
  return_value = nil
208
- check_nothing_fails(true) {
209
- return_value = assert_raise(RuntimeError) {
251
+ check_nothing_fails(true) do
252
+ return_value = assert_raise(RuntimeError) do
210
253
  raise "Error"
211
- }
212
- }
213
- check(return_value.kind_of?(Exception), "Should have returned the exception from a successful assert_raise")
214
- check(return_value.message == "Error", "Should have returned the correct exception from a successful assert_raise")
215
- check_nothing_fails(true) {
216
- assert_raise(ArgumentError, "successful assert_raise") {
254
+ end
255
+ end
256
+ check(return_value.kind_of?(Exception),
257
+ "Should have returned the exception " +
258
+ "from a successful assert_raise")
259
+ check(return_value.message == "Error",
260
+ "Should have returned the correct exception " +
261
+ "from a successful assert_raise")
262
+
263
+ check_nothing_fails(true) do
264
+ assert_raise(ArgumentError, "successful assert_raise") do
217
265
  raise ArgumentError.new("Error")
218
- }
219
- }
220
- check_nothing_fails(true) {
221
- assert_raise(RuntimeError) {
266
+ end
267
+ end
268
+
269
+ check_nothing_fails(true) do
270
+ assert_raise(RuntimeError) do
222
271
  raise "Error"
223
- }
224
- }
225
- check_nothing_fails(true) {
226
- assert_raise(RuntimeError, "successful assert_raise") {
272
+ end
273
+ end
274
+
275
+ check_nothing_fails(true) do
276
+ assert_raise(RuntimeError, "successful assert_raise") do
227
277
  raise "Error"
228
- }
229
- }
230
- check_fails("<RuntimeError> exception expected but none was thrown.") {
231
- assert_raise(RuntimeError) {
278
+ end
279
+ end
280
+
281
+ check_nothing_fails(true) do
282
+ assert_raise do
283
+ raise Exception, "Any exception"
284
+ end
285
+ end
286
+ end
287
+
288
+ def test_assert_raise_fail
289
+ check_fails("<RuntimeError> exception expected but none was thrown.") do
290
+ assert_raise(RuntimeError) do
232
291
  1 + 1
233
- }
234
- }
235
- check_fails(%r{\Afailed assert_raise.\n<ArgumentError> exception expected but was\nClass: <RuntimeError>\nMessage: <"Error">\n---Backtrace---\n.+\n---------------\Z}m) {
236
- assert_raise(ArgumentError, "failed assert_raise") {
292
+ end
293
+ end
294
+
295
+ message = <<-EOM
296
+ failed assert_raise.
297
+ <ArgumentError> exception expected but was
298
+ Class: <RuntimeError>
299
+ Message: <"Error">
300
+ EOM
301
+ check_fails(/\A#{message}#{BACKTRACE_RE}\Z/m) do
302
+ assert_raise(ArgumentError, "failed assert_raise") do
237
303
  raise "Error"
238
- }
239
- }
240
- check_fails("Should expect a class of exception, Object.\n<false> is not true.") {
241
- assert_nothing_raised(Object) {
304
+ end
305
+ end
306
+
307
+ message = <<-EOM
308
+ Should expect a class of exception, Object.
309
+ <false> is not true.
310
+ EOM
311
+ check_fails(message.chomp) do
312
+ assert_nothing_raised(Object) do
242
313
  1 + 1
243
- }
244
- }
314
+ end
315
+ end
316
+ end
245
317
 
318
+ def test_assert_raise_module
246
319
  exceptions = [ArgumentError, TypeError]
247
320
  modules = [Math, Comparable]
248
321
  rescues = exceptions + modules
322
+
249
323
  exceptions.each do |exc|
250
- check_nothing_fails(true) {
251
- return_value = assert_raise(*rescues) {
324
+ return_value = nil
325
+ check_nothing_fails(true) do
326
+ return_value = assert_raise(*rescues) do
252
327
  raise exc, "Error"
253
- }
254
- }
255
- check(return_value.instance_of?(exc), "Should have returned #{exc} but was #{return_value.class}")
256
- check(return_value.message == "Error", "Should have returned the correct exception from a successful assert_raise")
328
+ end
329
+ end
330
+ check(return_value.instance_of?(exc),
331
+ "Should have returned #{exc} but was #{return_value.class}")
332
+ check(return_value.message == "Error",
333
+ "Should have returned the correct exception " +
334
+ "from a successful assert_raise")
257
335
  end
336
+
258
337
  modules.each do |mod|
259
- check_nothing_fails(true) {
260
- return_value = assert_raise(*rescues) {
338
+ return_value = nil
339
+ check_nothing_fails(true) do
340
+ return_value = assert_raise(*rescues) do
261
341
  raise Exception.new("Error").extend(mod)
262
- }
263
- }
264
- check(mod === return_value, "Should have returned #{mod}")
265
- check(return_value.message == "Error", "Should have returned the correct exception from a successful assert_raise")
342
+ end
343
+ end
344
+ check(mod === return_value,
345
+ "Should have returned #{mod}")
346
+ check(return_value.message == "Error",
347
+ "Should have returned the correct exception " +
348
+ "from a successful assert_raise")
266
349
  end
267
- check_fails("<[ArgumentError, TypeError, Math, Comparable]> exception expected but none was thrown.") {
268
- assert_raise(*rescues) {
350
+
351
+ check_fails("<[ArgumentError, TypeError, Math, Comparable]> exception " +
352
+ "expected but none was thrown.") do
353
+ assert_raise(*rescues) do
269
354
  1 + 1
270
- }
271
- }
272
- check_fails(%r{\Afailed assert_raise.
273
- <\[ArgumentError, TypeError\]> exception expected but was
355
+ end
356
+ end
357
+
358
+ message = <<-EOM
359
+ failed assert_raise.
360
+ <[ArgumentError, TypeError]> exception expected but was
274
361
  Class: <RuntimeError>
275
362
  Message: <"Error">
276
- ---Backtrace---
277
- .+
278
- ---------------\Z}m) {
279
- assert_raise(ArgumentError, TypeError, "failed assert_raise") {
363
+ EOM
364
+ message = Regexp.escape(message)
365
+ check_fails(/\A#{message}#{BACKTRACE_RE}\z/m) do
366
+ assert_raise(ArgumentError, TypeError, "failed assert_raise") do
280
367
  raise "Error"
281
- }
282
- }
368
+ end
369
+ end
283
370
  end
284
-
371
+
372
+ def test_assert_raise_instance
373
+ return_value = nil
374
+ check_nothing_fails(true) do
375
+ return_value = assert_raise(RuntimeError.new("Error")) do
376
+ raise "Error"
377
+ end
378
+ end
379
+ check(return_value.kind_of?(Exception),
380
+ "Should have returned the exception " +
381
+ "from a successful assert_raise")
382
+ check(return_value.message == "Error",
383
+ "Should have returned the correct exception " +
384
+ "from a successful assert_raise")
385
+
386
+ message = <<-EOM
387
+ <RuntimeError("XXX")> exception expected but was
388
+ Class: <RuntimeError>
389
+ Message: <"Error">
390
+ EOM
391
+ message = Regexp.escape(message)
392
+ check_fails(/\A#{message}#{BACKTRACE_RE}\z/) do
393
+ return_value = assert_raise(RuntimeError.new("XXX")) do
394
+ raise "Error"
395
+ end
396
+ end
397
+
398
+ different_error_class = Class.new(StandardError)
399
+ message = <<-EOM
400
+ <\#<Class:0x[a-f\\d]+>\\("Error"\\)> exception expected but was
401
+ Class: <RuntimeError>
402
+ Message: <"Error">
403
+ EOM
404
+ check_fails(/\A#{message}#{BACKTRACE_RE}\z/) do
405
+ assert_raise(different_error_class.new("Error")) do
406
+ raise "Error"
407
+ end
408
+ end
409
+
410
+ different_error = different_error_class.new("Error")
411
+ def different_error.inspect
412
+ "DifferentError: \"Error\""
413
+ end
414
+ message = <<-EOM
415
+ <\DifferentError: \\"Error\\"> exception expected but was
416
+ Class: <RuntimeError>
417
+ Message: <"Error">
418
+ EOM
419
+ check_fails(/\A#{message}#{BACKTRACE_RE}\z/) do
420
+ assert_raise(different_error) do
421
+ raise "Error"
422
+ end
423
+ end
424
+
425
+ check_nothing_fails(true) do
426
+ assert_raise(different_error_class.new("Error"),
427
+ RuntimeError.new("Error"),
428
+ RuntimeError.new("XXX")) do
429
+ raise "Error"
430
+ end
431
+ end
432
+ end
433
+
285
434
  def test_assert_instance_of
286
435
  check_nothing_fails {
287
436
  assert_instance_of(String, "string")
@@ -496,9 +645,9 @@ Message: <"Error">
496
645
  end
497
646
  end
498
647
 
499
- def test_assert_throws
648
+ def test_assert_throw
500
649
  check_nothing_fails do
501
- assert_throws(:thing, "message") do
650
+ assert_throw(:thing, "message") do
502
651
  throw :thing
503
652
  end
504
653
  end
@@ -507,13 +656,13 @@ Message: <"Error">
507
656
  check_fails("message.\n" +
508
657
  "<:thing> expected to be thrown but\n" +
509
658
  "<#{inspect_tag(tag)}> was thrown.") do
510
- assert_throws(:thing, "message") do
659
+ assert_throw(:thing, "message") do
511
660
  throw :thing2
512
661
  end
513
662
  end
514
663
  check_fails("message.\n" +
515
664
  "<:thing> should have been thrown.") do
516
- assert_throws(:thing, "message") do
665
+ assert_throw(:thing, "message") do
517
666
  1 + 1
518
667
  end
519
668
  end
@@ -555,10 +704,13 @@ Message: <"Error">
555
704
  check_nothing_fails {
556
705
  assert_respond_to("thing", "to_s", "message")
557
706
  }
558
- check_fails("<0.15>\ngiven as the method name argument to #assert_respond_to must be a Symbol or #respond_to?(:to_str).") {
707
+ check_fails("<0.15>.kind_of?(Symbol) or\n" +
708
+ "<0.15>.respond_to?(:to_str) expected") {
559
709
  assert_respond_to("thing", 0.15)
560
710
  }
561
- check_fails("message.\n<:symbol>\nof type <Symbol>\nexpected to respond_to?<:non_existent>.") {
711
+ check_fails("message.\n" +
712
+ "<:symbol>.respond_to?(:non_existent) expected\n" +
713
+ "(Class: <Symbol>)") {
562
714
  assert_respond_to(:symbol, :non_existent, "message")
563
715
  }
564
716
  end
@@ -580,10 +732,15 @@ Message: <"Error">
580
732
  check_fails("message.\n<0.5> and\n<0.4> expected to be within\n<0.05> of each other.") {
581
733
  assert_in_delta(0.5, 0.4, 0.05, "message")
582
734
  }
583
- check_fails(%r{The arguments must respond to to_f; the first float did not\.\n<.+>\nof type <Object>\nexpected to respond_to\?<:to_f>.}) {
584
- assert_in_delta(Object.new, 0.4, 0.1)
585
- }
586
- check_fails("The delta should not be negative.\n<-0.1> expected to be\n>=\n<0.0>.") {
735
+ object = Object.new
736
+ check_fails("The arguments must respond to to_f; " +
737
+ "the first float did not.\n" +
738
+ "<#{object.inspect}>.respond_to?(:to_f) expected\n" +
739
+ "(Class: <Object>)") {
740
+ assert_in_delta(object, 0.4, 0.1)
741
+ }
742
+ check_fails("The delta should not be negative.\n" +
743
+ "<-0.1> expected to be\n>=\n<0.0>.") {
587
744
  assert_in_delta(0.5, 0.4, -0.1, "message")
588
745
  }
589
746
  end
@@ -675,6 +832,190 @@ Message: <"Error">
675
832
  end
676
833
  end
677
834
 
835
+ def test_assert_compare
836
+ check_nothing_fails do
837
+ assert_compare(1.4, "<", 10.0)
838
+ end
839
+
840
+ check_nothing_fails do
841
+ assert_compare(2, "<=", 2)
842
+ end
843
+
844
+ check_nothing_fails do
845
+ assert_compare(14, ">=", 10.0)
846
+ end
847
+
848
+ check_nothing_fails do
849
+ assert_compare(14, ">", 13.9)
850
+ end
851
+
852
+ expected_message = <<-EOM
853
+ <15> < <10> should be true
854
+ <15> expected less than
855
+ <10>.
856
+ EOM
857
+ check_fails(expected_message.chomp) do
858
+ assert_compare(15, "<", 10)
859
+ end
860
+
861
+ expected_message = <<-EOM
862
+ <15> <= <10> should be true
863
+ <15> expected less than or equal to
864
+ <10>.
865
+ EOM
866
+ check_fails(expected_message.chomp) do
867
+ assert_compare(15, "<=", 10)
868
+ end
869
+
870
+ expected_message = <<-EOM
871
+ <10> > <15> should be true
872
+ <10> expected greater than
873
+ <15>.
874
+ EOM
875
+ check_fails(expected_message.chomp) do
876
+ assert_compare(10, ">", 15)
877
+ end
878
+
879
+ expected_message = <<-EOM
880
+ <10> >= <15> should be true
881
+ <10> expected greater than or equal to
882
+ <15>.
883
+ EOM
884
+ check_fails(expected_message.chomp) do
885
+ assert_compare(10, ">=", 15)
886
+ end
887
+ end
888
+
889
+ def test_assert_fail_assertion
890
+ check_nothing_fails do
891
+ assert_fail_assertion do
892
+ flunk
893
+ end
894
+ end
895
+
896
+ check_fails("Failed assertion was expected.") do
897
+ assert_fail_assertion do
898
+ end
899
+ end
900
+ end
901
+
902
+ def test_assert_raise_message
903
+ check_nothing_fails do
904
+ assert_raise_message("Raise!") do
905
+ raise "Raise!"
906
+ end
907
+ end
908
+
909
+ check_nothing_fails do
910
+ assert_raise_message("Raise!") do
911
+ raise Exception, "Raise!"
912
+ end
913
+ end
914
+
915
+ check_nothing_fails do
916
+ assert_raise_message(/raise/i) do
917
+ raise "Raise!"
918
+ end
919
+ end
920
+
921
+ expected_message = <<-EOM
922
+ <"Expected message"> exception message expected but was
923
+ <"Actual message">.
924
+ EOM
925
+ check_fails(expected_message.chomp) do
926
+ assert_raise_message("Expected message") do
927
+ raise "Actual message"
928
+ end
929
+ end
930
+
931
+ expected_message = <<-EOM
932
+ <"Expected message"> exception message expected but none was thrown.
933
+ EOM
934
+ check_fails(expected_message.chomp) do
935
+ assert_raise_message("Expected message") do
936
+ end
937
+ end
938
+ end
939
+
940
+ def test_assert_raise_kind_of
941
+ check_nothing_fails(true) do
942
+ assert_raise_kind_of(SystemCallError) do
943
+ raise Errno::EACCES
944
+ end
945
+ end
946
+
947
+ expected_message = <<-EOM
948
+ <SystemCallError> family exception expected but was
949
+ Class: <RuntimeError>
950
+ Message: <"XXX">
951
+ ---Backtrace---
952
+ EOM
953
+ check_fails(/\A#{Regexp.escape(expected_message)}(?m).+\z/) do
954
+ assert_raise_kind_of(SystemCallError) do
955
+ raise RuntimeError, "XXX"
956
+ end
957
+ end
958
+ end
959
+
960
+ def test_assert_const_defined
961
+ check_nothing_fails do
962
+ assert_const_defined(Test, :Unit)
963
+ end
964
+
965
+ check_nothing_fails do
966
+ assert_const_defined(Test, "Unit")
967
+ end
968
+
969
+ check_fails("<Test>.const_defined?(<:Nonexistence>) expected.") do
970
+ assert_const_defined(Test, :Nonexistence)
971
+ end
972
+ end
973
+
974
+ def test_assert_not_const_defined
975
+ check_nothing_fails do
976
+ assert_not_const_defined(Test, :Nonexistence)
977
+ end
978
+
979
+ check_fails("!<Test>.const_defined?(<:Unit>) expected.") do
980
+ assert_not_const_defined(Test, :Unit)
981
+ end
982
+
983
+ check_fails("!<Test>.const_defined?(<\"Unit\">) expected.") do
984
+ assert_not_const_defined(Test, "Unit")
985
+ end
986
+ end
987
+
988
+ def test_assert_predicate
989
+ check_nothing_fails do
990
+ assert_predicate([], :empty?)
991
+ end
992
+
993
+ check_fails("<[1]>.empty? is true value expected but was\n<false>") do
994
+ assert_predicate([1], :empty?)
995
+ end
996
+
997
+ check_fails("<[1]>.respond_to?(:nonexistent?) expected\n" +
998
+ "(Class: <Array>)") do
999
+ assert_predicate([1], :nonexistent?)
1000
+ end
1001
+ end
1002
+
1003
+ def test_assert_not_predicate
1004
+ check_nothing_fails do
1005
+ assert_not_predicate([1], :empty?)
1006
+ end
1007
+
1008
+ check_fails("<[]>.empty? is false value expected but was\n<true>") do
1009
+ assert_not_predicate([], :empty?)
1010
+ end
1011
+
1012
+ check_fails("<[]>.respond_to?(:nonexistent?) expected\n" +
1013
+ "(Class: <Array>)") do
1014
+ assert_not_predicate([], :nonexistent?)
1015
+ end
1016
+ end
1017
+
1018
+ private
678
1019
  def add_failure(message, location=caller)
679
1020
  unless @catch_assertions
680
1021
  super
@@ -691,3 +1032,4 @@ Message: <"Error">
691
1032
  end
692
1033
  end
693
1034
  end
1035
+ p