activeldap 1.0.0 → 1.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/CHANGES +10 -0
- data/README +3 -2
- data/data/locale/en/LC_MESSAGES/active-ldap.mo +0 -0
- data/data/locale/ja/LC_MESSAGES/active-ldap.mo +0 -0
- data/examples/al-admin/po/en/al-admin.po +1 -1
- data/examples/al-admin/po/ja/al-admin.po +1 -1
- data/examples/al-admin/po/nl/al-admin.po +1 -1
- data/examples/al-admin/vendor/plugins/exception_notification/lib/exception_notifier.rb +7 -8
- data/examples/al-admin/vendor/plugins/exception_notification/lib/exception_notifier_helper.rb +2 -1
- data/examples/al-admin/vendor/plugins/exception_notification/views/exception_notifier/_environment.rhtml +1 -1
- data/examples/al-admin/vendor/plugins/exception_notification/views/exception_notifier/_request.rhtml +2 -1
- data/lib/active_ldap.rb +9 -3
- data/lib/active_ldap/action_controller/ldap_benchmarking.rb +36 -0
- data/lib/active_ldap/adapter/jndi.rb +1 -1
- data/lib/active_ldap/adapter/jndi_connection.rb +2 -1
- data/lib/active_ldap/association/belongs_to_many.rb +10 -2
- data/lib/active_ldap/association/collection.rb +10 -0
- data/lib/active_ldap/association/has_many_utils.rb +13 -9
- data/lib/active_ldap/association/has_many_wrap.rb +10 -2
- data/lib/active_ldap/associations.rb +3 -3
- data/lib/active_ldap/base.rb +95 -32
- data/lib/active_ldap/connection.rb +1 -1
- data/lib/active_ldap/distinguished_name.rb +3 -0
- data/lib/active_ldap/entry_attribute.rb +2 -2
- data/lib/active_ldap/ldif.rb +2 -2
- data/lib/active_ldap/operations.rb +7 -3
- data/lib/active_ldap/user_password.rb +0 -1
- data/lib/active_ldap/validations.rb +2 -0
- data/po/en/active-ldap.po +1 -1
- data/po/ja/active-ldap.po +1 -1
- data/rails/plugin/active_ldap/init.rb +3 -34
- data/test-unit/History.txt +32 -0
- data/test-unit/Manifest.txt +70 -0
- data/test-unit/README.txt +32 -0
- data/test-unit/Rakefile +22 -0
- data/test-unit/bin/testrb +5 -0
- data/test-unit/lib/test/unit.rb +280 -0
- data/test-unit/lib/test/unit/assertionfailederror.rb +14 -0
- data/test-unit/lib/test/unit/assertions.rb +722 -0
- data/test-unit/lib/test/unit/attribute.rb +125 -0
- data/test-unit/lib/test/unit/autorunner.rb +250 -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.rb +61 -0
- data/test-unit/lib/test/unit/diff.rb +524 -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 +185 -0
- data/test-unit/lib/test/unit/notification.rb +116 -0
- data/test-unit/lib/test/unit/omission.rb +129 -0
- data/test-unit/lib/test/unit/pending.rb +130 -0
- data/test-unit/lib/test/unit/priority.rb +146 -0
- data/test-unit/lib/test/unit/runner/console.rb +46 -0
- data/test-unit/lib/test/unit/runner/emacs.rb +8 -0
- data/test-unit/lib/test/unit/testcase.rb +174 -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 +195 -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/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/ts_examples.rb +7 -0
- data/test-unit/test/collector/test_descendant.rb +135 -0
- data/test-unit/test/collector/test_dir.rb +406 -0
- data/test-unit/test/collector/test_load.rb +333 -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_assertions.rb +693 -0
- data/test-unit/test/test_attribute.rb +86 -0
- data/{test-unit-ext → test-unit}/test/test_color.rb +3 -5
- data/{test-unit-ext → test-unit}/test/test_diff.rb +18 -16
- data/test-unit/test/test_emacs_runner.rb +60 -0
- data/test-unit/test/test_error.rb +26 -0
- data/test-unit/test/test_failure.rb +33 -0
- data/test-unit/test/test_fixture.rb +275 -0
- data/{test-unit-ext → test-unit}/test/test_notification.rb +7 -6
- data/test-unit/test/test_omission.rb +81 -0
- data/{test-unit-ext → test-unit}/test/test_pending.rb +15 -15
- data/{test-unit-ext → test-unit}/test/test_priority.rb +4 -3
- data/test-unit/test/test_testcase.rb +411 -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 +12 -0
- data/test-unit/test/ui/test_testrunmediator.rb +20 -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/al-test-utils.rb +4 -4
- data/test/command.rb +1 -1
- data/test/run-test.rb +5 -4
- data/test/test_associations.rb +143 -9
- data/test/test_base.rb +25 -1
- data/test/test_dn.rb +2 -0
- data/test/test_find.rb +8 -1
- data/test/test_ldif.rb +51 -114
- data/test/test_reflection.rb +4 -8
- data/test/test_usermod-lang-add.rb +2 -1
- data/test/test_validation.rb +4 -3
- metadata +76 -31
- data/test-unit-ext/NEWS.en +0 -28
- data/test-unit-ext/NEWS.ja +0 -28
- data/test-unit-ext/README.en +0 -247
- data/test-unit-ext/README.ja +0 -246
- data/test-unit-ext/Rakefile +0 -111
- data/test-unit-ext/lib/test-unit-ext.rb +0 -16
- data/test-unit-ext/lib/test-unit-ext/always-show-result.rb +0 -28
- data/test-unit-ext/lib/test-unit-ext/assertions.rb +0 -40
- data/test-unit-ext/lib/test-unit-ext/attributes.rb +0 -129
- data/test-unit-ext/lib/test-unit-ext/backtrace-filter.rb +0 -17
- data/test-unit-ext/lib/test-unit-ext/color.rb +0 -59
- data/test-unit-ext/lib/test-unit-ext/colorized-runner.rb +0 -111
- data/test-unit-ext/lib/test-unit-ext/diff.rb +0 -516
- data/test-unit-ext/lib/test-unit-ext/long-display-for-emacs.rb +0 -25
- data/test-unit-ext/lib/test-unit-ext/notification.rb +0 -79
- data/test-unit-ext/lib/test-unit-ext/omission.rb +0 -96
- data/test-unit-ext/lib/test-unit-ext/pending.rb +0 -97
- data/test-unit-ext/lib/test-unit-ext/priority.rb +0 -158
- data/test-unit-ext/lib/test-unit-ext/version.rb +0 -3
- data/test-unit-ext/lib/test-unit-ext/xml-report.rb +0 -224
- data/test-unit-ext/test/run-test.rb +0 -14
- data/test-unit-ext/test/test_attributes.rb +0 -139
- data/test-unit-ext/test/test_omission.rb +0 -64
- data/test-unit-ext/test/test_xml_report.rb +0 -161
|
@@ -1,6 +1,9 @@
|
|
|
1
|
-
require 'test
|
|
1
|
+
require 'test/unit'
|
|
2
|
+
require 'testunit_test_util'
|
|
2
3
|
|
|
3
4
|
class TestNotification < Test::Unit::TestCase
|
|
5
|
+
include TestUnitTestUtil
|
|
6
|
+
|
|
4
7
|
class TestCase < Test::Unit::TestCase
|
|
5
8
|
class << self
|
|
6
9
|
def suite
|
|
@@ -19,14 +22,12 @@ class TestNotification < Test::Unit::TestCase
|
|
|
19
22
|
assert_equal("1 tests, 0 assertions, 0 failures, 0 errors, 0 pendings, " \
|
|
20
23
|
"0 omissions, 2 notifications",
|
|
21
24
|
result.to_s)
|
|
22
|
-
|
|
23
|
-
|
|
25
|
+
assert_fault_messages(["1st notify", "2nd notify. Reach here."],
|
|
26
|
+
result.notifications)
|
|
24
27
|
end
|
|
25
28
|
|
|
26
29
|
private
|
|
27
30
|
def run_test(name)
|
|
28
|
-
|
|
29
|
-
TestCase.new(name).run(result) {}
|
|
30
|
-
result
|
|
31
|
+
super(TestCase, name)
|
|
31
32
|
end
|
|
32
33
|
end
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
require 'test/unit'
|
|
2
|
+
require 'testunit_test_util'
|
|
3
|
+
|
|
4
|
+
class TestUnitOmission < 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_omit
|
|
15
|
+
omit("1st omit")
|
|
16
|
+
omit("2nd omit. Should not be reached here.")
|
|
17
|
+
assert(true, "Should not be reached here too.")
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def test_omit_with_condition
|
|
21
|
+
omit_if(false, "Never omit.")
|
|
22
|
+
omit_unless(true, "Never omit too.")
|
|
23
|
+
omit_if(true, "Should omit.")
|
|
24
|
+
omit("The last omit. Should not be reached here.")
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def test_omit_with_block
|
|
28
|
+
omit("Omit block") do
|
|
29
|
+
flunk("Should not be reached here.")
|
|
30
|
+
end
|
|
31
|
+
assert(true, "Should be reached here.")
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def test_omit_with_block_and_condition
|
|
35
|
+
omit_if(false, "Never omit.") do
|
|
36
|
+
assert(true, "Should be reached here.")
|
|
37
|
+
end
|
|
38
|
+
omit_if(true, "Should omit.") do
|
|
39
|
+
flunk("Never reached here.")
|
|
40
|
+
end
|
|
41
|
+
assert(true, "Should be reached here too.")
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def test_omit
|
|
46
|
+
result = run_test("test_omit")
|
|
47
|
+
assert_equal("1 tests, 0 assertions, 0 failures, 0 errors, 0 pendings, " \
|
|
48
|
+
"1 omissions, 0 notifications",
|
|
49
|
+
result.to_s)
|
|
50
|
+
assert_fault_messages(["1st omit"], result.omissions)
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def test_omit_with_condition
|
|
54
|
+
result = run_test("test_omit_with_condition")
|
|
55
|
+
assert_equal("1 tests, 0 assertions, 0 failures, 0 errors, 0 pendings, " \
|
|
56
|
+
"1 omissions, 0 notifications",
|
|
57
|
+
result.to_s)
|
|
58
|
+
assert_fault_messages(["Should omit."], result.omissions)
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
def test_omit_with_block
|
|
62
|
+
result = run_test("test_omit_with_block")
|
|
63
|
+
assert_equal("1 tests, 1 assertions, 0 failures, 0 errors, 0 pendings, " \
|
|
64
|
+
"1 omissions, 0 notifications",
|
|
65
|
+
result.to_s)
|
|
66
|
+
assert_fault_messages(["Omit block"], result.omissions)
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
def test_omit_with_condition_and_block
|
|
70
|
+
result = run_test("test_omit_with_block_and_condition")
|
|
71
|
+
assert_equal("1 tests, 1 assertions, 0 failures, 0 errors, 0 pendings, " \
|
|
72
|
+
"1 omissions, 0 notifications",
|
|
73
|
+
result.to_s)
|
|
74
|
+
assert_fault_messages(["Should omit."], result.omissions)
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
private
|
|
78
|
+
def run_test(name)
|
|
79
|
+
super(TestCase, name)
|
|
80
|
+
end
|
|
81
|
+
end
|
|
@@ -1,6 +1,9 @@
|
|
|
1
|
-
require 'test
|
|
1
|
+
require 'test/unit'
|
|
2
|
+
require 'testunit_test_util'
|
|
3
|
+
|
|
4
|
+
class TestUnitPending < Test::Unit::TestCase
|
|
5
|
+
include TestUnitTestUtil
|
|
2
6
|
|
|
3
|
-
class TestPending < Test::Unit::TestCase
|
|
4
7
|
class TestCase < Test::Unit::TestCase
|
|
5
8
|
class << self
|
|
6
9
|
def suite
|
|
@@ -10,21 +13,22 @@ class TestPending < Test::Unit::TestCase
|
|
|
10
13
|
|
|
11
14
|
def test_pend
|
|
12
15
|
pend("1st pend")
|
|
13
|
-
pend("2nd pend.
|
|
16
|
+
pend("2nd pend. Should not be reached here.")
|
|
17
|
+
assert(true, "Should not be reached here too.")
|
|
14
18
|
end
|
|
15
19
|
|
|
16
20
|
def test_pend_with_failure_in_block
|
|
17
21
|
pend("Wait a minute") do
|
|
18
22
|
raise "Not implemented yet"
|
|
19
23
|
end
|
|
20
|
-
assert(true, "
|
|
24
|
+
assert(true, "Reached here.")
|
|
21
25
|
end
|
|
22
26
|
|
|
23
27
|
def test_pend_with_no_failure_in_block
|
|
24
28
|
pend("Wait a minute") do
|
|
25
29
|
"Nothing raised"
|
|
26
30
|
end
|
|
27
|
-
assert(true, "
|
|
31
|
+
assert(true, "Not reached here.")
|
|
28
32
|
end
|
|
29
33
|
end
|
|
30
34
|
|
|
@@ -33,17 +37,15 @@ class TestPending < Test::Unit::TestCase
|
|
|
33
37
|
assert_equal("1 tests, 0 assertions, 0 failures, 0 errors, 1 pendings, " \
|
|
34
38
|
"0 omissions, 0 notifications",
|
|
35
39
|
result.to_s)
|
|
36
|
-
|
|
37
|
-
result.pendings.collect {|pending| pending.message})
|
|
40
|
+
assert_fault_messages(["1st pend"], result.pendings)
|
|
38
41
|
end
|
|
39
42
|
|
|
40
43
|
def test_pend_with_failure_in_block
|
|
41
44
|
result = run_test("test_pend_with_failure_in_block")
|
|
42
|
-
assert_equal("1 tests,
|
|
45
|
+
assert_equal("1 tests, 1 assertions, 0 failures, 0 errors, 1 pendings, " \
|
|
43
46
|
"0 omissions, 0 notifications",
|
|
44
47
|
result.to_s)
|
|
45
|
-
|
|
46
|
-
result.pendings.collect {|pending| pending.message})
|
|
48
|
+
assert_fault_messages(["Wait a minute"], result.pendings)
|
|
47
49
|
end
|
|
48
50
|
|
|
49
51
|
def test_pend_with_no_failure_in_block
|
|
@@ -51,14 +53,12 @@ class TestPending < Test::Unit::TestCase
|
|
|
51
53
|
assert_equal("1 tests, 1 assertions, 1 failures, 0 errors, 0 pendings, " \
|
|
52
54
|
"0 omissions, 0 notifications",
|
|
53
55
|
result.to_s)
|
|
54
|
-
|
|
55
|
-
|
|
56
|
+
assert_fault_messages(["Pending block should not be passed: Wait a minute."],
|
|
57
|
+
result.failures)
|
|
56
58
|
end
|
|
57
59
|
|
|
58
60
|
private
|
|
59
61
|
def run_test(name)
|
|
60
|
-
|
|
61
|
-
TestCase.new(name).run(result) {}
|
|
62
|
-
result
|
|
62
|
+
super(TestCase, name)
|
|
63
63
|
end
|
|
64
64
|
end
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
require 'test
|
|
1
|
+
require 'test/unit'
|
|
2
2
|
|
|
3
|
-
class
|
|
3
|
+
class TestUnitPriority < Test::Unit::TestCase
|
|
4
4
|
class TestCase < Test::Unit::TestCase
|
|
5
5
|
class << self
|
|
6
6
|
def suite
|
|
@@ -78,10 +78,11 @@ class TestPriority < Test::Unit::TestCase
|
|
|
78
78
|
end
|
|
79
79
|
|
|
80
80
|
def assert_need_to_run(test_name, expected, delta)
|
|
81
|
+
test = TestCase.new(test_name)
|
|
81
82
|
n = 1000
|
|
82
83
|
n_need_to_run = 0
|
|
83
84
|
n.times do |i|
|
|
84
|
-
n_need_to_run +=1 if
|
|
85
|
+
n_need_to_run +=1 if Test::Unit::Priority::Checker.need_to_run?(test)
|
|
85
86
|
end
|
|
86
87
|
assert_in_delta(expected, n_need_to_run.to_f / n, delta)
|
|
87
88
|
end
|
|
@@ -0,0 +1,411 @@
|
|
|
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 TC_TestCase < TestCase
|
|
10
|
+
def test_creation
|
|
11
|
+
tc = Class.new(TestCase) do
|
|
12
|
+
def test_with_arguments(arg1, arg2)
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
caught = true
|
|
17
|
+
catch(:invalid_test) do
|
|
18
|
+
tc.new(:test_with_arguments)
|
|
19
|
+
caught = false
|
|
20
|
+
end
|
|
21
|
+
check("Should have caught an invalid test when there are arguments", caught)
|
|
22
|
+
|
|
23
|
+
caught = true
|
|
24
|
+
catch(:invalid_test) do
|
|
25
|
+
tc.new(:non_existent_test)
|
|
26
|
+
caught = false
|
|
27
|
+
end
|
|
28
|
+
check("Should have caught an invalid test when the method does not exist", caught)
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def setup
|
|
32
|
+
@tc_failure_error = Class.new(TestCase) do
|
|
33
|
+
def test_failure
|
|
34
|
+
assert_block("failure") { false }
|
|
35
|
+
end
|
|
36
|
+
def test_error
|
|
37
|
+
1 / 0
|
|
38
|
+
end
|
|
39
|
+
def test_nested_failure
|
|
40
|
+
nested
|
|
41
|
+
end
|
|
42
|
+
def nested
|
|
43
|
+
assert_block("nested"){false}
|
|
44
|
+
end
|
|
45
|
+
def return_passed?
|
|
46
|
+
return passed?
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def @tc_failure_error.name
|
|
51
|
+
"TC_FailureError"
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
def test_add_failed_assertion
|
|
56
|
+
test_case = @tc_failure_error.new(:test_failure)
|
|
57
|
+
check("passed? should start out true", test_case.return_passed?)
|
|
58
|
+
result = TestResult.new
|
|
59
|
+
called = false
|
|
60
|
+
result.add_listener(TestResult::FAULT) {
|
|
61
|
+
| fault |
|
|
62
|
+
check("Should have a Failure", fault.instance_of?(Failure))
|
|
63
|
+
check("The Failure should have the correct message", "failure" == fault.message)
|
|
64
|
+
check("The Failure should have the correct test_name (was <#{fault.test_name}>)", fault.test_name == "test_failure(TC_FailureError)")
|
|
65
|
+
r = /\A.*#{Regexp.escape(File.basename(__FILE__))}:\d+:in `test_failure'\Z/
|
|
66
|
+
|
|
67
|
+
location = fault.location
|
|
68
|
+
check("The location should be an array", location.kind_of?(Array))
|
|
69
|
+
check("The location should have two lines (was: <#{location.inspect}>)", location.size == 2)
|
|
70
|
+
check("The Failure should have the correct location (was <#{location[0].inspect}>, expected <#{r.inspect}>)", r =~ location[0])
|
|
71
|
+
called = true
|
|
72
|
+
}
|
|
73
|
+
progress = []
|
|
74
|
+
test_case.run(result) { |*arguments| progress << arguments }
|
|
75
|
+
check("The failure should have triggered the listener", called)
|
|
76
|
+
check("The failure should have set passed?", !test_case.return_passed?)
|
|
77
|
+
check("The progress block should have been updated correctly", [[TestCase::STARTED, test_case.name], [TestCase::FINISHED, test_case.name]] == progress)
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
def test_add_failure_nested
|
|
81
|
+
test_case = @tc_failure_error.new(:test_nested_failure)
|
|
82
|
+
check("passed? should start out true", test_case.return_passed?)
|
|
83
|
+
|
|
84
|
+
result = TestResult.new
|
|
85
|
+
called = false
|
|
86
|
+
result.add_listener(TestResult::FAULT) {
|
|
87
|
+
| fault |
|
|
88
|
+
check("Should have a Failure", fault.instance_of?(Failure))
|
|
89
|
+
check("The Failure should have the correct message", "nested" == fault.message)
|
|
90
|
+
check("The Failure should have the correct test_name (was <#{fault.test_name}>)", fault.test_name == "test_nested_failure(TC_FailureError)")
|
|
91
|
+
r =
|
|
92
|
+
|
|
93
|
+
location = fault.location
|
|
94
|
+
check("The location should be an array", location.kind_of?(Array))
|
|
95
|
+
check("The location should have the correct number of lines (was: <#{location.inspect}>)", location.size == 3)
|
|
96
|
+
check("The Failure should have the correct location (was <#{location[0].inspect}>)", /\A.*#{Regexp.escape(File.basename(__FILE__))}:\d+:in `nested'\Z/ =~ location[0])
|
|
97
|
+
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])
|
|
98
|
+
called = true
|
|
99
|
+
}
|
|
100
|
+
test_case.run(result){}
|
|
101
|
+
check("The failure should have triggered the listener", called)
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
def test_add_error
|
|
105
|
+
test_case = @tc_failure_error.new(:test_error)
|
|
106
|
+
check("passed? should start out true", test_case.return_passed?)
|
|
107
|
+
result = TestResult.new
|
|
108
|
+
called = false
|
|
109
|
+
result.add_listener(TestResult::FAULT) {
|
|
110
|
+
| fault |
|
|
111
|
+
check("Should have a TestError", fault.instance_of?(Error))
|
|
112
|
+
check("The Error should have the correct message", "ZeroDivisionError: divided by 0" == fault.message)
|
|
113
|
+
check("The Error should have the correct test_name", "test_error(TC_FailureError)" == fault.test_name)
|
|
114
|
+
check("The Error should have the correct exception", fault.exception.instance_of?(ZeroDivisionError))
|
|
115
|
+
called = true
|
|
116
|
+
}
|
|
117
|
+
test_case.run(result) {}
|
|
118
|
+
check("The error should have triggered the listener", called)
|
|
119
|
+
check("The error should have set passed?", !test_case.return_passed?)
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
def test_no_tests
|
|
123
|
+
suite = TestCase.suite
|
|
124
|
+
check("Should have a test suite", suite.instance_of?(TestSuite))
|
|
125
|
+
check("Should have one test", suite.size == 1)
|
|
126
|
+
check("Should have the default test", suite.tests.first.name == "default_test(Test::Unit::TestCase)")
|
|
127
|
+
|
|
128
|
+
result = TestResult.new
|
|
129
|
+
suite.run(result) {}
|
|
130
|
+
check("Should have had one test run", result.run_count == 1)
|
|
131
|
+
check("Should have had one test failure", result.failure_count == 1)
|
|
132
|
+
check("Should have had no errors", result.error_count == 0)
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
def test_suite
|
|
136
|
+
tc = Class.new(TestCase) do
|
|
137
|
+
def test_succeed
|
|
138
|
+
assert_block {true}
|
|
139
|
+
end
|
|
140
|
+
def test_fail
|
|
141
|
+
assert_block {false}
|
|
142
|
+
end
|
|
143
|
+
def test_error
|
|
144
|
+
1/0
|
|
145
|
+
end
|
|
146
|
+
def dont_run
|
|
147
|
+
assert_block {true}
|
|
148
|
+
end
|
|
149
|
+
def test_dont_run(argument)
|
|
150
|
+
assert_block {true}
|
|
151
|
+
end
|
|
152
|
+
def test
|
|
153
|
+
assert_block {true}
|
|
154
|
+
end
|
|
155
|
+
end
|
|
156
|
+
|
|
157
|
+
suite = tc.suite
|
|
158
|
+
check("Should have a test suite", suite.instance_of?(TestSuite))
|
|
159
|
+
check("Should have three tests", suite.size == 3)
|
|
160
|
+
|
|
161
|
+
result = TestResult.new
|
|
162
|
+
suite.run(result) {}
|
|
163
|
+
check("Should have had three test runs", result.run_count == 3)
|
|
164
|
+
check("Should have had one test failure", result.failure_count == 1)
|
|
165
|
+
check("Should have had one test error", result.error_count == 1)
|
|
166
|
+
end
|
|
167
|
+
|
|
168
|
+
|
|
169
|
+
def test_setup_teardown
|
|
170
|
+
tc = Class.new(TestCase) do
|
|
171
|
+
attr_reader(:setup_called, :teardown_called)
|
|
172
|
+
def initialize(test)
|
|
173
|
+
super(test)
|
|
174
|
+
@setup_called = false
|
|
175
|
+
@teardown_called = false
|
|
176
|
+
end
|
|
177
|
+
def setup
|
|
178
|
+
@setup_called = true
|
|
179
|
+
end
|
|
180
|
+
def teardown
|
|
181
|
+
@teardown_called = true
|
|
182
|
+
end
|
|
183
|
+
def test_succeed
|
|
184
|
+
assert_block {true}
|
|
185
|
+
end
|
|
186
|
+
def test_fail
|
|
187
|
+
assert_block {false}
|
|
188
|
+
end
|
|
189
|
+
def test_error
|
|
190
|
+
raise "Error!"
|
|
191
|
+
end
|
|
192
|
+
end
|
|
193
|
+
result = TestResult.new
|
|
194
|
+
|
|
195
|
+
test = tc.new(:test_succeed)
|
|
196
|
+
test.run(result) {}
|
|
197
|
+
check("Should have called setup the correct number of times", test.setup_called)
|
|
198
|
+
check("Should have called teardown the correct number of times", test.teardown_called)
|
|
199
|
+
|
|
200
|
+
test = tc.new(:test_fail)
|
|
201
|
+
test.run(result) {}
|
|
202
|
+
check("Should have called setup the correct number of times", test.setup_called)
|
|
203
|
+
check("Should have called teardown the correct number of times", test.teardown_called)
|
|
204
|
+
|
|
205
|
+
test = tc.new(:test_error)
|
|
206
|
+
test.run(result) {}
|
|
207
|
+
check("Should have called setup the correct number of times", test.setup_called)
|
|
208
|
+
check("Should have called teardown the correct number of times", test.teardown_called)
|
|
209
|
+
|
|
210
|
+
check("Should have had two test runs", result.run_count == 3)
|
|
211
|
+
check("Should have had a test failure", result.failure_count == 1)
|
|
212
|
+
check("Should have had a test error", result.error_count == 1)
|
|
213
|
+
end
|
|
214
|
+
|
|
215
|
+
def test_assertion_failed_not_called
|
|
216
|
+
tc = Class.new(TestCase) do
|
|
217
|
+
def test_thing
|
|
218
|
+
raise AssertionFailedError.new
|
|
219
|
+
end
|
|
220
|
+
end
|
|
221
|
+
|
|
222
|
+
suite = tc.suite
|
|
223
|
+
check("Should have one test", suite.size == 1)
|
|
224
|
+
result = TestResult.new
|
|
225
|
+
suite.run(result) {}
|
|
226
|
+
check("Should have had one test run", result.run_count == 1)
|
|
227
|
+
check("Should have had one assertion failure", result.failure_count == 1)
|
|
228
|
+
check("Should not have any assertion errors but had #{result.error_count}", result.error_count == 0)
|
|
229
|
+
end
|
|
230
|
+
|
|
231
|
+
def test_equality
|
|
232
|
+
tc1 = Class.new(TestCase) do
|
|
233
|
+
def test_1
|
|
234
|
+
end
|
|
235
|
+
def test_2
|
|
236
|
+
end
|
|
237
|
+
end
|
|
238
|
+
|
|
239
|
+
tc2 = Class.new(TestCase) do
|
|
240
|
+
def test_1
|
|
241
|
+
end
|
|
242
|
+
end
|
|
243
|
+
|
|
244
|
+
test1 = tc1.new('test_1')
|
|
245
|
+
test2 = tc1.new('test_1')
|
|
246
|
+
check("Should be equal", test1 == test2)
|
|
247
|
+
check("Should be equal", test2 == test1)
|
|
248
|
+
|
|
249
|
+
test1 = tc1.new('test_2')
|
|
250
|
+
check("Should not be equal", test1 != test2)
|
|
251
|
+
check("Should not be equal", test2 != test1)
|
|
252
|
+
|
|
253
|
+
test2 = tc1.new('test_2')
|
|
254
|
+
check("Should be equal", test1 == test2)
|
|
255
|
+
check("Should be equal", test2 == test1)
|
|
256
|
+
|
|
257
|
+
test1 = tc1.new('test_1')
|
|
258
|
+
test2 = tc2.new('test_1')
|
|
259
|
+
check("Should not be equal", test1 != test2)
|
|
260
|
+
check("Should not be equal", test2 != test1)
|
|
261
|
+
|
|
262
|
+
|
|
263
|
+
check("Should not be equal", test1 != Object.new)
|
|
264
|
+
check("Should not be equal", Object.new != test1)
|
|
265
|
+
end
|
|
266
|
+
|
|
267
|
+
def test_re_raise_exception
|
|
268
|
+
test_case = Class.new(TestCase) do
|
|
269
|
+
def test_raise_interrupt
|
|
270
|
+
raise Interrupt
|
|
271
|
+
end
|
|
272
|
+
end
|
|
273
|
+
|
|
274
|
+
test = test_case.new("test_raise_interrupt")
|
|
275
|
+
begin
|
|
276
|
+
test.run(TestResult.new) {}
|
|
277
|
+
check("Should not be reached", false)
|
|
278
|
+
rescue Exception
|
|
279
|
+
check("Interrupt exception should be re-raised", $!.class == Interrupt)
|
|
280
|
+
end
|
|
281
|
+
end
|
|
282
|
+
|
|
283
|
+
def test_startup_shutdown
|
|
284
|
+
called = []
|
|
285
|
+
test_case = Class.new(TestCase) do
|
|
286
|
+
@@called = called
|
|
287
|
+
class << self
|
|
288
|
+
def startup
|
|
289
|
+
@@called << :startup
|
|
290
|
+
end
|
|
291
|
+
|
|
292
|
+
def shutdown
|
|
293
|
+
@@called << :shutdown
|
|
294
|
+
end
|
|
295
|
+
end
|
|
296
|
+
|
|
297
|
+
def setup
|
|
298
|
+
@@called << :setup
|
|
299
|
+
end
|
|
300
|
+
|
|
301
|
+
def teardown
|
|
302
|
+
@@called << :teardown
|
|
303
|
+
end
|
|
304
|
+
|
|
305
|
+
def test1
|
|
306
|
+
end
|
|
307
|
+
|
|
308
|
+
def test2
|
|
309
|
+
end
|
|
310
|
+
end
|
|
311
|
+
|
|
312
|
+
test_suite = test_case.suite
|
|
313
|
+
test_suite.run(TestResult.new) {}
|
|
314
|
+
check("startup/shutdown should be called once per test case" +
|
|
315
|
+
": #{called.inspect}",
|
|
316
|
+
called == [:startup,
|
|
317
|
+
:setup, :teardown,
|
|
318
|
+
:setup, :teardown,
|
|
319
|
+
:shutdown])
|
|
320
|
+
end
|
|
321
|
+
|
|
322
|
+
def test_error_on_startup
|
|
323
|
+
test_case = Class.new(TestCase) do
|
|
324
|
+
class << self
|
|
325
|
+
def startup
|
|
326
|
+
raise "from startup"
|
|
327
|
+
end
|
|
328
|
+
end
|
|
329
|
+
|
|
330
|
+
def test_nothing
|
|
331
|
+
end
|
|
332
|
+
end
|
|
333
|
+
|
|
334
|
+
test_suite = test_case.suite
|
|
335
|
+
result = TestResult.new
|
|
336
|
+
test_suite.run(result) {}
|
|
337
|
+
check("Should record an error on startup: #{result}",
|
|
338
|
+
result.error_count == 1)
|
|
339
|
+
end
|
|
340
|
+
|
|
341
|
+
def test_pass_through_error_on_startup
|
|
342
|
+
test_case = Class.new(TestCase) do
|
|
343
|
+
class << self
|
|
344
|
+
def startup
|
|
345
|
+
raise Interrupt
|
|
346
|
+
end
|
|
347
|
+
end
|
|
348
|
+
|
|
349
|
+
def test_nothing
|
|
350
|
+
end
|
|
351
|
+
end
|
|
352
|
+
|
|
353
|
+
test_suite = test_case.suite
|
|
354
|
+
begin
|
|
355
|
+
test_suite.run(TestResult.new) {}
|
|
356
|
+
check("Should not be reached", false)
|
|
357
|
+
rescue Exception
|
|
358
|
+
check("Interrupt should be passed through: #{$!}",
|
|
359
|
+
Interrupt === $!)
|
|
360
|
+
end
|
|
361
|
+
end
|
|
362
|
+
|
|
363
|
+
def test_error_on_shutdown
|
|
364
|
+
test_case = Class.new(TestCase) do
|
|
365
|
+
class << self
|
|
366
|
+
def shutdown
|
|
367
|
+
raise "from shutdown"
|
|
368
|
+
end
|
|
369
|
+
end
|
|
370
|
+
|
|
371
|
+
def test_nothing
|
|
372
|
+
end
|
|
373
|
+
end
|
|
374
|
+
|
|
375
|
+
test_suite = test_case.suite
|
|
376
|
+
result = TestResult.new
|
|
377
|
+
test_suite.run(result) {}
|
|
378
|
+
check("Should record an error on shutdown: #{result}",
|
|
379
|
+
result.error_count == 1)
|
|
380
|
+
end
|
|
381
|
+
|
|
382
|
+
def test_pass_through_error_on_shutdown
|
|
383
|
+
test_case = Class.new(TestCase) do
|
|
384
|
+
class << self
|
|
385
|
+
def shutdown
|
|
386
|
+
raise Interrupt
|
|
387
|
+
end
|
|
388
|
+
end
|
|
389
|
+
|
|
390
|
+
def test_nothing
|
|
391
|
+
end
|
|
392
|
+
end
|
|
393
|
+
|
|
394
|
+
test_suite = test_case.suite
|
|
395
|
+
begin
|
|
396
|
+
test_suite.run(TestResult.new) {}
|
|
397
|
+
check("Should not be reached", false)
|
|
398
|
+
rescue Exception
|
|
399
|
+
check("Interrupt should be passed through: #{$!}",
|
|
400
|
+
Interrupt === $!)
|
|
401
|
+
end
|
|
402
|
+
end
|
|
403
|
+
|
|
404
|
+
private
|
|
405
|
+
def check(message, passed)
|
|
406
|
+
add_assertion
|
|
407
|
+
raise AssertionFailedError.new(message) unless passed
|
|
408
|
+
end
|
|
409
|
+
end
|
|
410
|
+
end
|
|
411
|
+
end
|