ActiveSambaLdap 0.0.7

Sign up to get free protection for your applications and to get access to all the features.
Files changed (180) hide show
  1. data/NEWS.en +40 -0
  2. data/NEWS.ja +44 -0
  3. data/README.en +366 -0
  4. data/README.ja +361 -0
  5. data/Rakefile +168 -0
  6. data/bin/asl-groupadd +73 -0
  7. data/bin/asl-groupadd.help +1 -0
  8. data/bin/asl-groupdel +61 -0
  9. data/bin/asl-groupdel.help +1 -0
  10. data/bin/asl-groupmod +137 -0
  11. data/bin/asl-groupmod.help +1 -0
  12. data/bin/asl-groupshow +33 -0
  13. data/bin/asl-groupshow.help +1 -0
  14. data/bin/asl-passwd +90 -0
  15. data/bin/asl-passwd.help +1 -0
  16. data/bin/asl-populate +101 -0
  17. data/bin/asl-populate.help +1 -0
  18. data/bin/asl-purge +26 -0
  19. data/bin/asl-purge.help +1 -0
  20. data/bin/asl-samba-computeradd +96 -0
  21. data/bin/asl-samba-computeradd.help +1 -0
  22. data/bin/asl-samba-groupadd +57 -0
  23. data/bin/asl-samba-groupadd.help +1 -0
  24. data/bin/asl-samba-groupdel +55 -0
  25. data/bin/asl-samba-groupdel.help +1 -0
  26. data/bin/asl-samba-groupmod +99 -0
  27. data/bin/asl-samba-groupmod.help +1 -0
  28. data/bin/asl-samba-useradd +100 -0
  29. data/bin/asl-samba-useradd.help +1 -0
  30. data/bin/asl-samba-userdel +49 -0
  31. data/bin/asl-samba-userdel.help +1 -0
  32. data/bin/asl-samba-usermod +94 -0
  33. data/bin/asl-samba-usermod.help +1 -0
  34. data/bin/asl-useradd +264 -0
  35. data/bin/asl-useradd.help +1 -0
  36. data/bin/asl-userdel +84 -0
  37. data/bin/asl-userdel.help +1 -0
  38. data/bin/asl-usermod +335 -0
  39. data/bin/asl-usermod.help +1 -0
  40. data/bin/asl-usershow +33 -0
  41. data/bin/asl-usershow.help +1 -0
  42. data/lib/active_samba_ldap.rb +42 -0
  43. data/lib/active_samba_ldap/account_entry.rb +208 -0
  44. data/lib/active_samba_ldap/base.rb +137 -0
  45. data/lib/active_samba_ldap/command.rb +100 -0
  46. data/lib/active_samba_ldap/computer.rb +24 -0
  47. data/lib/active_samba_ldap/computer_account_entry.rb +34 -0
  48. data/lib/active_samba_ldap/configuration.rb +333 -0
  49. data/lib/active_samba_ldap/dc.rb +19 -0
  50. data/lib/active_samba_ldap/entry.rb +81 -0
  51. data/lib/active_samba_ldap/get_text_support.rb +12 -0
  52. data/lib/active_samba_ldap/group.rb +17 -0
  53. data/lib/active_samba_ldap/group_entry.rb +187 -0
  54. data/lib/active_samba_ldap/idmap.rb +19 -0
  55. data/lib/active_samba_ldap/ou.rb +20 -0
  56. data/lib/active_samba_ldap/populate.rb +257 -0
  57. data/lib/active_samba_ldap/reloadable.rb +15 -0
  58. data/lib/active_samba_ldap/samba_account_entry.rb +225 -0
  59. data/lib/active_samba_ldap/samba_entry.rb +26 -0
  60. data/lib/active_samba_ldap/samba_group_entry.rb +143 -0
  61. data/lib/active_samba_ldap/unix_id_pool.rb +43 -0
  62. data/lib/active_samba_ldap/user.rb +44 -0
  63. data/lib/active_samba_ldap/user_account_entry.rb +30 -0
  64. data/lib/active_samba_ldap/version.rb +3 -0
  65. data/lib/samba/encrypt.rb +86 -0
  66. data/misc/rd2html.rb +42 -0
  67. data/po/ja/active-samba-ldap.po +465 -0
  68. data/rails/README +30 -0
  69. data/rails/init.rb +33 -0
  70. data/rails_generators/scaffold_active_samba_ldap/scaffold_active_samba_ldap_generator.rb +27 -0
  71. data/rails_generators/scaffold_active_samba_ldap/templates/computer.rb +3 -0
  72. data/rails_generators/scaffold_active_samba_ldap/templates/dc.rb +3 -0
  73. data/rails_generators/scaffold_active_samba_ldap/templates/group.rb +3 -0
  74. data/rails_generators/scaffold_active_samba_ldap/templates/idmap.rb +3 -0
  75. data/rails_generators/scaffold_active_samba_ldap/templates/ldap.yml +24 -0
  76. data/rails_generators/scaffold_active_samba_ldap/templates/ou.rb +3 -0
  77. data/rails_generators/scaffold_active_samba_ldap/templates/samba_controller.rb +12 -0
  78. data/rails_generators/scaffold_active_samba_ldap/templates/samba_helper.rb +2 -0
  79. data/rails_generators/scaffold_active_samba_ldap/templates/samba_index.rhtml +17 -0
  80. data/rails_generators/scaffold_active_samba_ldap/templates/samba_populate.rhtml +15 -0
  81. data/rails_generators/scaffold_active_samba_ldap/templates/samba_purge.rhtml +10 -0
  82. data/rails_generators/scaffold_active_samba_ldap/templates/unix_id_pool.rb +3 -0
  83. data/rails_generators/scaffold_active_samba_ldap/templates/user.rb +3 -0
  84. data/setup.rb +1585 -0
  85. data/test-unit/History.txt +107 -0
  86. data/test-unit/README.txt +52 -0
  87. data/test-unit/Rakefile +40 -0
  88. data/test-unit/TODO +5 -0
  89. data/test-unit/bin/testrb +5 -0
  90. data/test-unit/lib/test/unit.rb +342 -0
  91. data/test-unit/lib/test/unit/assertionfailederror.rb +14 -0
  92. data/test-unit/lib/test/unit/assertions.rb +1149 -0
  93. data/test-unit/lib/test/unit/attribute.rb +125 -0
  94. data/test-unit/lib/test/unit/autorunner.rb +329 -0
  95. data/test-unit/lib/test/unit/collector.rb +43 -0
  96. data/test-unit/lib/test/unit/collector/descendant.rb +23 -0
  97. data/test-unit/lib/test/unit/collector/dir.rb +108 -0
  98. data/test-unit/lib/test/unit/collector/load.rb +135 -0
  99. data/test-unit/lib/test/unit/collector/objectspace.rb +34 -0
  100. data/test-unit/lib/test/unit/color-scheme.rb +86 -0
  101. data/test-unit/lib/test/unit/color.rb +96 -0
  102. data/test-unit/lib/test/unit/diff.rb +538 -0
  103. data/test-unit/lib/test/unit/error.rb +124 -0
  104. data/test-unit/lib/test/unit/exceptionhandler.rb +39 -0
  105. data/test-unit/lib/test/unit/failure.rb +110 -0
  106. data/test-unit/lib/test/unit/fixture.rb +176 -0
  107. data/test-unit/lib/test/unit/notification.rb +125 -0
  108. data/test-unit/lib/test/unit/omission.rb +143 -0
  109. data/test-unit/lib/test/unit/pending.rb +146 -0
  110. data/test-unit/lib/test/unit/priority.rb +181 -0
  111. data/test-unit/lib/test/unit/runner/console.rb +52 -0
  112. data/test-unit/lib/test/unit/runner/emacs.rb +8 -0
  113. data/test-unit/lib/test/unit/testcase.rb +425 -0
  114. data/test-unit/lib/test/unit/testresult.rb +89 -0
  115. data/test-unit/lib/test/unit/testsuite.rb +110 -0
  116. data/test-unit/lib/test/unit/ui/console/outputlevel.rb +14 -0
  117. data/test-unit/lib/test/unit/ui/console/testrunner.rb +223 -0
  118. data/test-unit/lib/test/unit/ui/emacs/testrunner.rb +49 -0
  119. data/test-unit/lib/test/unit/ui/testrunner.rb +20 -0
  120. data/test-unit/lib/test/unit/ui/testrunnermediator.rb +77 -0
  121. data/test-unit/lib/test/unit/ui/testrunnerutilities.rb +41 -0
  122. data/test-unit/lib/test/unit/util/backtracefilter.rb +41 -0
  123. data/test-unit/lib/test/unit/util/method-owner-finder.rb +28 -0
  124. data/test-unit/lib/test/unit/util/observable.rb +90 -0
  125. data/test-unit/lib/test/unit/util/procwrapper.rb +48 -0
  126. data/test-unit/lib/test/unit/version.rb +7 -0
  127. data/test-unit/sample/adder.rb +13 -0
  128. data/test-unit/sample/subtracter.rb +12 -0
  129. data/test-unit/sample/tc_adder.rb +18 -0
  130. data/test-unit/sample/tc_subtracter.rb +18 -0
  131. data/test-unit/sample/test_user.rb +22 -0
  132. data/test-unit/sample/ts_examples.rb +7 -0
  133. data/test-unit/test/collector/test-descendant.rb +135 -0
  134. data/test-unit/test/collector/test-load.rb +333 -0
  135. data/test-unit/test/collector/test_dir.rb +406 -0
  136. data/test-unit/test/collector/test_objectspace.rb +98 -0
  137. data/test-unit/test/run-test.rb +13 -0
  138. data/test-unit/test/test-attribute.rb +86 -0
  139. data/test-unit/test/test-color-scheme.rb +56 -0
  140. data/test-unit/test/test-color.rb +47 -0
  141. data/test-unit/test/test-diff.rb +477 -0
  142. data/test-unit/test/test-emacs-runner.rb +60 -0
  143. data/test-unit/test/test-fixture.rb +287 -0
  144. data/test-unit/test/test-notification.rb +33 -0
  145. data/test-unit/test/test-omission.rb +81 -0
  146. data/test-unit/test/test-pending.rb +70 -0
  147. data/test-unit/test/test-priority.rb +119 -0
  148. data/test-unit/test/test-testcase.rb +507 -0
  149. data/test-unit/test/test_assertions.rb +1082 -0
  150. data/test-unit/test/test_error.rb +26 -0
  151. data/test-unit/test/test_failure.rb +33 -0
  152. data/test-unit/test/test_testresult.rb +113 -0
  153. data/test-unit/test/test_testsuite.rb +129 -0
  154. data/test-unit/test/testunit-test-util.rb +14 -0
  155. data/test-unit/test/ui/test_testrunmediator.rb +20 -0
  156. data/test-unit/test/util/test-method-owner-finder.rb +38 -0
  157. data/test-unit/test/util/test_backtracefilter.rb +41 -0
  158. data/test-unit/test/util/test_observable.rb +102 -0
  159. data/test-unit/test/util/test_procwrapper.rb +36 -0
  160. data/test/asl-test-utils.rb +276 -0
  161. data/test/command.rb +67 -0
  162. data/test/config.yaml.sample +17 -0
  163. data/test/run-test.rb +20 -0
  164. data/test/test_asl_groupadd.rb +69 -0
  165. data/test/test_asl_groupdel.rb +88 -0
  166. data/test/test_asl_groupmod.rb +259 -0
  167. data/test/test_asl_groupshow.rb +21 -0
  168. data/test/test_asl_passwd.rb +126 -0
  169. data/test/test_asl_populate.rb +92 -0
  170. data/test/test_asl_purge.rb +21 -0
  171. data/test/test_asl_useradd.rb +712 -0
  172. data/test/test_asl_userdel.rb +75 -0
  173. data/test/test_asl_usermod.rb +549 -0
  174. data/test/test_asl_usershow.rb +27 -0
  175. data/test/test_entry.rb +21 -0
  176. data/test/test_group.rb +21 -0
  177. data/test/test_password.rb +51 -0
  178. data/test/test_samba_encrypt.rb +35 -0
  179. data/test/test_user_home_directory.rb +43 -0
  180. metadata +314 -0
@@ -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,507 @@
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
+ 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, "from test"
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, "from startup"
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, "from shutdown"
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
+ def test_interrupted
405
+ test_case = Class.new(TestCase) do
406
+ def test_fail
407
+ flunk
408
+ end
409
+
410
+ def test_nothing
411
+ end
412
+ end
413
+
414
+ failed_test = test_case.new(:test_fail)
415
+ failed_test.run(TestResult.new) {}
416
+ check("Should be interrupted", failed_test.interrupted?)
417
+
418
+ success_test = test_case.new(:test_nothing)
419
+ success_test.run(TestResult.new) {}
420
+ check("Should not be interrupted", !success_test.interrupted?)
421
+ end
422
+
423
+ def test_inherited_test_should_be_ignored
424
+ test_case = Class.new(TestCase) do
425
+ def test_nothing
426
+ end
427
+ end
428
+
429
+ sub_test_case = Class.new(test_case) do
430
+ def test_fail
431
+ flunk
432
+ end
433
+ end
434
+
435
+ assert_nothing_thrown do
436
+ test_case.new("test_nothing")
437
+ end
438
+
439
+ assert_nothing_thrown do
440
+ sub_test_case.new("test_fail")
441
+ end
442
+
443
+ assert_throw(:invalid_test) do
444
+ sub_test_case.new("test_nothing")
445
+ end
446
+ end
447
+
448
+ def test_mixin_test_should_not_be_ignored
449
+ test_module = Module.new do
450
+ def test_nothing
451
+ end
452
+ end
453
+
454
+ test_case = Class.new(Test::Unit::TestCase) do
455
+ include test_module
456
+
457
+ def test_fail
458
+ flunk
459
+ end
460
+ end
461
+
462
+ assert_nothing_thrown do
463
+ test_case.new("test_nothing")
464
+ end
465
+
466
+ assert_nothing_thrown do
467
+ test_case.new("test_fail")
468
+ end
469
+ end
470
+
471
+ def test_defined_order
472
+ keep_test_order do
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
+ end
492
+
493
+ private
494
+ def check(message, passed)
495
+ add_assertion
496
+ raise AssertionFailedError.new(message) unless passed
497
+ end
498
+
499
+ def keep_test_order
500
+ order = TestCase.test_order
501
+ yield
502
+ ensure
503
+ TestCase.test_order = order
504
+ end
505
+ end
506
+ end
507
+ end