activesambaldap 0.0.6 → 0.0.7

Sign up to get free protection for your applications and to get access to all the features.
Files changed (107) hide show
  1. data/NEWS.en +20 -18
  2. data/NEWS.ja +23 -21
  3. data/README.en +122 -95
  4. data/README.ja +125 -98
  5. data/Rakefile +29 -64
  6. data/bin/asl-groupadd +1 -1
  7. data/bin/asl-groupadd.help +1 -0
  8. data/bin/asl-groupdel +1 -1
  9. data/bin/asl-groupdel.help +1 -0
  10. data/bin/asl-groupmod +1 -1
  11. data/bin/asl-groupmod.help +1 -0
  12. data/bin/asl-groupshow +1 -1
  13. data/bin/asl-groupshow.help +1 -0
  14. data/bin/asl-passwd +1 -1
  15. data/bin/asl-passwd.help +1 -0
  16. data/bin/asl-populate +2 -2
  17. data/bin/asl-populate.help +1 -0
  18. data/bin/asl-purge +1 -1
  19. data/bin/asl-purge.help +1 -0
  20. data/bin/asl-samba-computeradd +1 -1
  21. data/bin/asl-samba-computeradd.help +1 -0
  22. data/bin/asl-samba-groupadd +1 -1
  23. data/bin/asl-samba-groupadd.help +1 -0
  24. data/bin/asl-samba-groupdel +1 -1
  25. data/bin/asl-samba-groupdel.help +1 -0
  26. data/bin/asl-samba-groupmod +1 -1
  27. data/bin/asl-samba-groupmod.help +1 -0
  28. data/bin/asl-samba-useradd +1 -1
  29. data/bin/asl-samba-useradd.help +1 -0
  30. data/bin/asl-samba-userdel +1 -1
  31. data/bin/asl-samba-userdel.help +1 -0
  32. data/bin/asl-samba-usermod +1 -1
  33. data/bin/asl-samba-usermod.help +1 -0
  34. data/bin/asl-useradd +1 -1
  35. data/bin/asl-useradd.help +6 -4
  36. data/bin/asl-userdel +1 -1
  37. data/bin/asl-userdel.help +1 -0
  38. data/bin/asl-usermod +1 -1
  39. data/bin/asl-usermod.help +2 -0
  40. data/bin/asl-usershow +1 -1
  41. data/bin/asl-usershow.help +1 -0
  42. data/data/locale/ja/LC_MESSAGES/active-samba-ldap.mo +0 -0
  43. data/lib/active_samba_ldap/version.rb +1 -1
  44. data/lib/active_samba_ldap.rb +1 -1
  45. data/po/ja/active-samba-ldap.po +5 -5
  46. data/rails/{plugin/active_samba_ldap/README → README} +0 -0
  47. data/rails/{plugin/active_samba_ldap/init.rb → init.rb} +1 -1
  48. data/{rails/plugin/active_samba_ldap/generators → rails_generators}/scaffold_active_samba_ldap/scaffold_active_samba_ldap_generator.rb +0 -0
  49. data/{rails/plugin/active_samba_ldap/generators → rails_generators}/scaffold_active_samba_ldap/templates/computer.rb +0 -0
  50. data/{rails/plugin/active_samba_ldap/generators → rails_generators}/scaffold_active_samba_ldap/templates/dc.rb +0 -0
  51. data/{rails/plugin/active_samba_ldap/generators → rails_generators}/scaffold_active_samba_ldap/templates/group.rb +0 -0
  52. data/{rails/plugin/active_samba_ldap/generators → rails_generators}/scaffold_active_samba_ldap/templates/idmap.rb +0 -0
  53. data/{rails/plugin/active_samba_ldap/generators → rails_generators}/scaffold_active_samba_ldap/templates/ldap.yml +0 -0
  54. data/{rails/plugin/active_samba_ldap/generators → rails_generators}/scaffold_active_samba_ldap/templates/ou.rb +0 -0
  55. data/{rails/plugin/active_samba_ldap/generators → rails_generators}/scaffold_active_samba_ldap/templates/samba_controller.rb +0 -0
  56. data/{rails/plugin/active_samba_ldap/generators → rails_generators}/scaffold_active_samba_ldap/templates/samba_helper.rb +0 -0
  57. data/{rails/plugin/active_samba_ldap/generators → rails_generators}/scaffold_active_samba_ldap/templates/samba_index.rhtml +0 -0
  58. data/{rails/plugin/active_samba_ldap/generators → rails_generators}/scaffold_active_samba_ldap/templates/samba_populate.rhtml +0 -0
  59. data/{rails/plugin/active_samba_ldap/generators → rails_generators}/scaffold_active_samba_ldap/templates/samba_purge.rhtml +0 -0
  60. data/{rails/plugin/active_samba_ldap/generators → rails_generators}/scaffold_active_samba_ldap/templates/unix_id_pool.rb +0 -0
  61. data/{rails/plugin/active_samba_ldap/generators → rails_generators}/scaffold_active_samba_ldap/templates/user.rb +0 -0
  62. data/test/asl-test-utils.rb +2 -2
  63. data/test/test_asl_usershow.rb +2 -2
  64. data/test/test_password.rb +2 -2
  65. data/test/test_user_home_directory.rb +2 -2
  66. data/test-unit/History.txt +76 -1
  67. data/test-unit/README.txt +32 -12
  68. data/test-unit/Rakefile +19 -1
  69. data/test-unit/TODO +5 -0
  70. data/test-unit/lib/test/unit/assertions.rb +515 -88
  71. data/test-unit/lib/test/unit/autorunner.rb +93 -14
  72. data/test-unit/lib/test/unit/collector/load.rb +1 -1
  73. data/test-unit/lib/test/unit/collector.rb +1 -1
  74. data/test-unit/lib/test/unit/color-scheme.rb +86 -0
  75. data/test-unit/lib/test/unit/color.rb +40 -5
  76. data/test-unit/lib/test/unit/diff.rb +14 -0
  77. data/test-unit/lib/test/unit/fixture.rb +7 -16
  78. data/test-unit/lib/test/unit/notification.rb +9 -0
  79. data/test-unit/lib/test/unit/omission.rb +14 -0
  80. data/test-unit/lib/test/unit/pending.rb +16 -0
  81. data/test-unit/lib/test/unit/priority.rb +38 -3
  82. data/test-unit/lib/test/unit/runner/console.rb +8 -2
  83. data/test-unit/lib/test/unit/testcase.rb +263 -12
  84. data/test-unit/lib/test/unit/ui/console/testrunner.rb +58 -30
  85. data/test-unit/lib/test/unit/util/method-owner-finder.rb +28 -0
  86. data/test-unit/lib/test/unit/version.rb +1 -1
  87. data/test-unit/lib/test/unit.rb +62 -0
  88. data/test-unit/sample/test_user.rb +22 -0
  89. data/test-unit/test/collector/{test_descendant.rb → test-descendant.rb} +0 -0
  90. data/test-unit/test/collector/{test_load.rb → test-load.rb} +1 -1
  91. data/test-unit/test/{test_attribute.rb → test-attribute.rb} +0 -0
  92. data/test-unit/test/test-color-scheme.rb +56 -0
  93. data/test-unit/test/{test_color.rb → test-color.rb} +10 -0
  94. data/test-unit/test/{test_diff.rb → test-diff.rb} +0 -0
  95. data/test-unit/test/{test_emacs_runner.rb → test-emacs-runner.rb} +0 -0
  96. data/test-unit/test/test-fixture.rb +287 -0
  97. data/test-unit/test/{test_notification.rb → test-notification.rb} +4 -4
  98. data/test-unit/test/{test_omission.rb → test-omission.rb} +6 -6
  99. data/test-unit/test/{test_pending.rb → test-pending.rb} +12 -6
  100. data/test-unit/test/{test_priority.rb → test-priority.rb} +30 -0
  101. data/test-unit/test/{test_testcase.rb → test-testcase.rb} +100 -4
  102. data/test-unit/test/test_assertions.rb +462 -73
  103. data/test-unit/test/{testunit_test_util.rb → testunit-test-util.rb} +4 -2
  104. data/test-unit/test/ui/test_testrunmediator.rb +1 -1
  105. data/test-unit/test/util/test-method-owner-finder.rb +38 -0
  106. metadata +69 -79
  107. data/test-unit/test/test_fixture.rb +0 -275
@@ -1,7 +1,9 @@
1
1
  #--
2
2
  #
3
3
  # Author:: Nathaniel Talbott.
4
- # Copyright:: Copyright (c) 2000-2003 Nathaniel Talbott. All rights reserved.
4
+ # Copyright::
5
+ # * Copyright (c) 2000-2003 Nathaniel Talbott. All rights reserved.
6
+ # * Copyright (c) 2008-2009 Kouhei Sutou <tt><kou@clear-code.com></tt>
5
7
  # License:: Ruby license.
6
8
 
7
9
  require 'test/unit/attribute'
@@ -17,6 +19,7 @@ require 'test/unit/priority'
17
19
  require 'test/unit/testsuite'
18
20
  require 'test/unit/assertionfailederror'
19
21
  require 'test/unit/util/backtracefilter'
22
+ require 'test/unit/util/method-owner-finder'
20
23
 
21
24
  module Test
22
25
  module Unit
@@ -26,6 +29,47 @@ module Test
26
29
  # wrapping those tests into a suite. It also does the
27
30
  # nitty-gritty of actually running an individual test and
28
31
  # collecting its results into a Test::Unit::TestResult object.
32
+ #
33
+ # You can run two hooks before/after a TestCase run.
34
+ #
35
+ # Example:
36
+ # class TestMyClass < Test::Unit::TestCase
37
+ # class << self
38
+ # def startup
39
+ # ...
40
+ # end
41
+ #
42
+ # def shutdown
43
+ # ...
44
+ # end
45
+ # end
46
+ #
47
+ # def setup
48
+ # ...
49
+ # end
50
+ #
51
+ # def teardown
52
+ # ...
53
+ # end
54
+ #
55
+ # def test_my_method1
56
+ # ...
57
+ # end
58
+ #
59
+ # def test_my_method2
60
+ # ...
61
+ # end
62
+ # end
63
+ #
64
+ # Here is a call order:
65
+ # * startup
66
+ # * setup
67
+ # * test_my_method1
68
+ # * teardown
69
+ # * setup
70
+ # * test_my_method2
71
+ # * teardown
72
+ # * shutdown
29
73
  class TestCase
30
74
  include Attribute
31
75
  include Fixture
@@ -39,24 +83,29 @@ module Test
39
83
  include Assertions
40
84
  include Util::BacktraceFilter
41
85
 
42
- STARTED = name + "::STARTED"
43
- FINISHED = name + "::FINISHED"
86
+ STARTED = name + "::STARTED" # :nodoc:
87
+ FINISHED = name + "::FINISHED" # :nodoc:
44
88
 
45
- DESCENDANTS = []
89
+ DESCENDANTS = [] # :nodoc:
90
+ AVAILABLE_ORDERS = [:alphabetic, :random, :defined] # :nodoc:
46
91
 
47
92
  class << self
48
- def inherited(sub_class)
93
+ def inherited(sub_class) # :nodoc:
49
94
  DESCENDANTS << sub_class
50
95
  end
51
96
 
97
+ @@added_methods = []
98
+ def method_added(name) # :nodoc:
99
+ super
100
+ @@added_methods << name.to_s
101
+ end
102
+
52
103
  # Rolls up all of the test* methods in the fixture into
53
104
  # one suite, creating a new instance of the fixture for
54
105
  # each method.
55
106
  def suite
56
- method_names = public_instance_methods(true).collect {|name| name.to_s}
57
- tests = method_names.delete_if {|method_name| method_name !~ /^test./}
58
107
  suite = TestSuite.new(name, self)
59
- tests.sort.each do |test|
108
+ collect_test_names.each do |test|
60
109
  catch(:invalid_test) do
61
110
  suite << new(test)
62
111
  end
@@ -68,6 +117,137 @@ module Test
68
117
  end
69
118
  suite
70
119
  end
120
+
121
+ # Called before every test case runs. Can be used
122
+ # to set up fixture information used in test case
123
+ # scope.
124
+ #
125
+ # Here is an example test case:
126
+ # class TestMyClass < Test::Unit::TestCase
127
+ # class << self
128
+ # def startup
129
+ # ...
130
+ # end
131
+ # end
132
+ #
133
+ # def setup
134
+ # ...
135
+ # end
136
+ #
137
+ # def test_my_class1
138
+ # ...
139
+ # end
140
+ #
141
+ # def test_my_class2
142
+ # ...
143
+ # end
144
+ # end
145
+ #
146
+ # Here is a call order:
147
+ # * startup
148
+ # * setup
149
+ # * test_my_class1 (or test_my_class2)
150
+ # * setup
151
+ # * test_my_class2 (or test_my_class1)
152
+ #
153
+ # Note that you should not assume test order. Tests
154
+ # should be worked in any order.
155
+ def startup
156
+ end
157
+
158
+ # Called after every test case runs. Can be used to tear
159
+ # down fixture information used in test case scope.
160
+ #
161
+ # Here is an example test case:
162
+ # class TestMyClass < Test::Unit::TestCase
163
+ # class << self
164
+ # def shutdown
165
+ # ...
166
+ # end
167
+ # end
168
+ #
169
+ # def teardown
170
+ # ...
171
+ # end
172
+ #
173
+ # def test_my_class1
174
+ # ...
175
+ # end
176
+ #
177
+ # def test_my_class2
178
+ # ...
179
+ # end
180
+ # end
181
+ #
182
+ # Here is a call order:
183
+ # * test_my_class1 (or test_my_class2)
184
+ # * teardown
185
+ # * test_my_class2 (or test_my_class1)
186
+ # * teardown
187
+ # * shutdown
188
+ #
189
+ # Note that you should not assume test order. Tests
190
+ # should be worked in any order.
191
+ def shutdown
192
+ end
193
+
194
+ @@test_order = AVAILABLE_ORDERS.first
195
+
196
+ # Returns the current test order. This returns
197
+ # +:alphabetic+ by default.
198
+ def test_order
199
+ @@test_order
200
+ end
201
+
202
+ # Sets the current test order.
203
+ #
204
+ # Here are the available _order_:
205
+ # [:alphabetic]
206
+ # Default. Tests are sorted in alphabetic order.
207
+ # [:random]
208
+ # Tests are sorted in random order.
209
+ # [:defined]
210
+ # Tests are sorted in defined order.
211
+ def test_order=(order)
212
+ @@test_order = order
213
+ end
214
+
215
+ # :stopdoc:
216
+ private
217
+ def collect_test_names
218
+ method_names = public_instance_methods(true).collect do |name|
219
+ name.to_s
220
+ end
221
+ test_names = method_names.find_all do |method_name|
222
+ method_name =~ /^test./
223
+ end
224
+ send("sort_test_names_in_#{test_order}_order", test_names)
225
+ end
226
+
227
+ def sort_test_names_in_alphabetic_order(test_names)
228
+ test_names.sort
229
+ end
230
+
231
+ def sort_test_names_in_random_order(test_names)
232
+ test_names.sort_by {rand(test_names.size)}
233
+ end
234
+
235
+ def sort_test_names_in_defined_order(test_names)
236
+ test_names.sort do |test1, test2|
237
+ test1_defined_order = @@added_methods.index(test1)
238
+ test2_defined_order = @@added_methods.index(test2)
239
+ if test1_defined_order and test2_defined_order
240
+ test1_defined_order <=> test2_defined_order
241
+ elsif test1_defined_order
242
+ 1
243
+ elsif test2_defined_order
244
+ -1
245
+ else
246
+ test1 <=> test2
247
+ end
248
+ end
249
+ end
250
+ # :startdoc:
71
251
  end
72
252
 
73
253
  attr_reader :method_name
@@ -76,9 +256,15 @@ module Test
76
256
  # test represented by test_method_name.
77
257
  def initialize(test_method_name)
78
258
  throw :invalid_test unless respond_to?(test_method_name)
79
- throw :invalid_test if method(test_method_name).arity > 0
259
+ test_method = method(test_method_name)
260
+ throw :invalid_test if test_method.arity > 0
261
+ owner = Util::MethodOwnerFinder.find(self, test_method_name)
262
+ if owner.class != Module and self.class != owner
263
+ throw :invalid_test
264
+ end
80
265
  @method_name = test_method_name
81
266
  @test_passed = true
267
+ @interrupted = false
82
268
  end
83
269
 
84
270
  # Runs the individual test method represented by this
@@ -90,8 +276,9 @@ module Test
90
276
  yield(STARTED, name)
91
277
  begin
92
278
  run_setup
93
- __send__(@method_name)
279
+ run_test
94
280
  rescue Exception
281
+ @interrupted = true
95
282
  raise unless handle_exception($!)
96
283
  ensure
97
284
  begin
@@ -103,20 +290,76 @@ module Test
103
290
  result.add_run
104
291
  yield(FINISHED, name)
105
292
  ensure
106
- @_result = nil
293
+ # @_result = nil # For test-spec's after_all :<
107
294
  end
108
295
  end
109
296
 
110
297
  # Called before every test method runs. Can be used
111
298
  # to set up fixture information.
299
+ #
300
+ # You can add additional setup tasks by the following
301
+ # code:
302
+ # class TestMyClass < Test::Unit::TestCase
303
+ # def setup
304
+ # ...
305
+ # end
306
+ #
307
+ # setup
308
+ # def my_setup1
309
+ # ...
310
+ # end
311
+ #
312
+ # setup
313
+ # def my_setup2
314
+ # ...
315
+ # end
316
+ #
317
+ # def test_my_class
318
+ # ...
319
+ # end
320
+ # end
321
+ #
322
+ # Here is a call order:
323
+ # * setup
324
+ # * my_setup1
325
+ # * my_setup2
326
+ # * test_my_class
112
327
  def setup
113
328
  end
114
329
 
115
330
  # Called after every test method runs. Can be used to tear
116
331
  # down fixture information.
332
+ #
333
+ # You can add additional teardown tasks by the following
334
+ # code:
335
+ # class TestMyClass < Test::Unit::TestCase
336
+ # def teardown
337
+ # ...
338
+ # end
339
+ #
340
+ # teardown
341
+ # def my_teardown1
342
+ # ...
343
+ # end
344
+ #
345
+ # teardown
346
+ # def my_teardown2
347
+ # ...
348
+ # end
349
+ #
350
+ # def test_my_class
351
+ # ...
352
+ # end
353
+ # end
354
+ #
355
+ # Here is a call order:
356
+ # * test_my_class
357
+ # * my_teardown2
358
+ # * my_teardown1
359
+ # * teardown
117
360
  def teardown
118
361
  end
119
-
362
+
120
363
  def default_test
121
364
  flunk("No tests were specified")
122
365
  end
@@ -143,11 +386,19 @@ module Test
143
386
  self.class == other.class
144
387
  end
145
388
 
389
+ def interrupted?
390
+ @interrupted
391
+ end
392
+
146
393
  private
147
394
  def current_result
148
395
  @_result
149
396
  end
150
397
 
398
+ def run_test
399
+ __send__(@method_name)
400
+ end
401
+
151
402
  def handle_exception(exception)
152
403
  self.class.exception_handlers.each do |handler|
153
404
  return true if send(handler, exception)
@@ -4,7 +4,7 @@
4
4
  # Copyright:: Copyright (c) 2000-2003 Nathaniel Talbott. All rights reserved.
5
5
  # License:: Ruby license.
6
6
 
7
- require 'test/unit/color'
7
+ require 'test/unit/color-scheme'
8
8
  require 'test/unit/ui/testrunner'
9
9
  require 'test/unit/ui/testrunnermediator'
10
10
  require 'test/unit/ui/console/outputlevel'
@@ -18,17 +18,6 @@ module Test
18
18
  class TestRunner < UI::TestRunner
19
19
  include OutputLevel
20
20
 
21
- COLOR_SCHEMES = {
22
- :default => {
23
- "success" => Color.new("green", :bold => true),
24
- "failure" => Color.new("red", :bold => true),
25
- "pending" => Color.new("magenta", :bold => true),
26
- "omission" => Color.new("blue", :bold => true),
27
- "notification" => Color.new("cyan", :bold => true),
28
- "error" => Color.new("yellow", :bold => true),
29
- },
30
- }
31
-
32
21
  # Creates a new TestRunner for running the passed
33
22
  # suite. If quiet_mode is true, the output while
34
23
  # running is limited to progress dots, errors and
@@ -41,8 +30,11 @@ module Test
41
30
  @output = @options[:output] || STDOUT
42
31
  @use_color = @options[:use_color]
43
32
  @use_color = guess_color_availability if @use_color.nil?
44
- @color_scheme = COLOR_SCHEMES[:default]
33
+ @color_scheme = @options[:color_scheme] || ColorScheme.default
45
34
  @reset_color = Color.new("reset")
35
+ @progress_row = 0
36
+ @progress_row_max = @options[:progress_row_max]
37
+ @progress_row_max ||= guess_progress_row_max
46
38
  @already_outputted = false
47
39
  @faults = []
48
40
  end
@@ -84,9 +76,7 @@ module Test
84
76
 
85
77
  def add_fault(fault)
86
78
  @faults << fault
87
- output_single(fault.single_character_display,
88
- fault_color(fault),
89
- PROGRESS_ONLY)
79
+ output_progress(fault.single_character_display, fault_color(fault))
90
80
  @already_outputted = true
91
81
  end
92
82
 
@@ -124,7 +114,7 @@ module Test
124
114
 
125
115
  def test_finished(name)
126
116
  unless @already_outputted
127
- output_single(".", @color_scheme["success"], PROGRESS_ONLY)
117
+ output_progress(".", color("success"))
128
118
  end
129
119
  nl(VERBOSE)
130
120
  @already_outputted = false
@@ -141,7 +131,7 @@ module Test
141
131
  end
142
132
 
143
133
  def output_single(something, color=nil, level=NORMAL)
144
- return unless output?(level)
134
+ return false unless output?(level)
145
135
  if @use_color and color
146
136
  something = "%s%s%s" % [color.escape_sequence,
147
137
  something,
@@ -149,40 +139,78 @@ module Test
149
139
  end
150
140
  @output.write(something)
151
141
  @output.flush
142
+ true
152
143
  end
153
-
144
+
145
+ def output_progress(mark, color=nil)
146
+ if output_single(mark, color, PROGRESS_ONLY)
147
+ return unless @progress_row_max > 0
148
+ @progress_row += mark.size
149
+ if @progress_row >= @progress_row_max
150
+ nl unless @output_level == VERBOSE
151
+ @progress_row = 0
152
+ end
153
+ end
154
+ end
155
+
154
156
  def output?(level)
155
157
  level <= @output_level
156
158
  end
157
159
 
160
+ def color(name)
161
+ @color_scheme[name] || ColorScheme.default[name]
162
+ end
163
+
158
164
  def fault_color(fault)
159
- @color_scheme[fault.class.name.split(/::/).last.downcase]
165
+ color(fault.class.name.split(/::/).last.downcase)
160
166
  end
161
167
 
162
168
  def result_color
163
169
  if @result.passed?
164
170
  if @result.pending_count > 0
165
- @color_scheme["pending"]
171
+ color("pending")
166
172
  elsif @result.omission_count > 0
167
- @color_scheme["omission"]
173
+ color("omission")
168
174
  elsif @result.notification_count > 0
169
- @color_scheme["notification"]
175
+ color("notification")
170
176
  else
171
- @color_scheme["success"]
177
+ color("success")
172
178
  end
173
179
  elsif @result.error_count > 0
174
- @color_scheme["error"]
180
+ color("error")
175
181
  elsif @result.failure_count > 0
176
- @color_scheme["failure"]
182
+ color("failure")
177
183
  end
178
184
  end
179
185
 
180
186
  def guess_color_availability
181
187
  return false unless @output.tty?
182
- term = ENV["TERM"]
183
- return true if term and (/term\z/ =~ term or term == "screen")
184
- return true if ENV["EMACS"] == "t"
185
- false
188
+ case ENV["TERM"]
189
+ when /term(?:-color)?\z/, "screen"
190
+ true
191
+ else
192
+ return true if ENV["EMACS"] == "t"
193
+ false
194
+ end
195
+ end
196
+
197
+ def guess_progress_row_max
198
+ term_width = guess_term_width
199
+ if term_width.zero?
200
+ if ENV["EMACS"] == "t"
201
+ -1
202
+ else
203
+ 79
204
+ end
205
+ else
206
+ term_width
207
+ end
208
+ end
209
+
210
+ def guess_term_width
211
+ Integer(ENV["TERM_WIDTH"] || 0)
212
+ rescue ArgumentError
213
+ 0
186
214
  end
187
215
  end
188
216
  end
@@ -0,0 +1,28 @@
1
+ module Test
2
+ module Unit
3
+ module Util
4
+ module MethodOwnerFinder
5
+ module_function
6
+ def find(object, method_name)
7
+ method = object.method(method_name)
8
+ return method.owner if method.respond_to?(:owner)
9
+
10
+ if /\((.+?)\)\#/ =~ method.to_s
11
+ owner_name = $1
12
+ if /\A#</ =~ owner_name
13
+ ObjectSpace.each_object(Module) do |mod|
14
+ return mod if mod.to_s == owner_name
15
+ end
16
+ else
17
+ owner_name.split(/::/).inject(Object) do |parent, name|
18
+ parent.const_get(name)
19
+ end
20
+ end
21
+ else
22
+ object.class
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
@@ -2,6 +2,6 @@
2
2
  # HACK: quick and dirty to get integrated into the new project - ryan
3
3
  module Test
4
4
  module Unit
5
- VERSION = '2.0.0'
5
+ VERSION = '2.0.3'
6
6
  end
7
7
  end
@@ -253,6 +253,68 @@ module Test # :nodoc:
253
253
  # the dynamic suite using the console TestRunner.
254
254
  #
255
255
  #
256
+ # == Configuration file
257
+ #
258
+ # Test::Unit reads 'test-unit.yml' in the current working
259
+ # directory as Test::Unit's configuration file. It can
260
+ # contain the following configurations:
261
+ #
262
+ # * color scheme definitions
263
+ # * test runner to be used
264
+ # * test runner options
265
+ # * test collector to be used
266
+ #
267
+ # Except color scheme definitions, all of them are
268
+ # specified by command line option.
269
+ #
270
+ # Here are sample color scheme definitions:
271
+ #
272
+ # color_schemes:
273
+ # inverted:
274
+ # success:
275
+ # name: red
276
+ # bold: true
277
+ # failure:
278
+ # name: green
279
+ # bold: true
280
+ # other_scheme:
281
+ # ...
282
+ #
283
+ # Here are the syntax of color scheme definitions:
284
+ #
285
+ # color_schemes:
286
+ # SCHEME_NAME:
287
+ # EVENT_NAME:
288
+ # name: COLOR_NAME
289
+ # intensity: BOOLEAN
290
+ # bold: BOOLEAN
291
+ # italic: BOOLEAN
292
+ # underline: BOOLEAN
293
+ # ...
294
+ # ...
295
+ #
296
+ # SCHEME_NAME:: the name of the color scheme
297
+ # EVENT_NAME:: one of [success, failure, pending,
298
+ # omission, notification, error]
299
+ # COLOR_NAME:: one of [black, red, green, yellow, blue,
300
+ # magenta, cyan, white]
301
+ # BOOLEAN:: true or false
302
+ #
303
+ # You can use the above 'inverted' color scheme with the
304
+ # following configuration:
305
+ #
306
+ # runner: console
307
+ # console_options:
308
+ # color_scheme: inverted
309
+ # color_schemes:
310
+ # inverted:
311
+ # success:
312
+ # name: red
313
+ # bold: true
314
+ # failure:
315
+ # name: green
316
+ # bold: true
317
+ #
256
318
  # == Questions?
257
319
  #
258
320
  # I'd really like to get feedback from all levels of Ruby
@@ -0,0 +1,22 @@
1
+ # nested test case example.
2
+
3
+ class UserTest < Test::Unit::TestCase
4
+ def setup
5
+ @user = "me"
6
+ end
7
+
8
+ def test_full_name
9
+ assert_equal("me", @user)
10
+ end
11
+
12
+ class ProfileTest < UserTest
13
+ setup
14
+ def setup_profile
15
+ @user += ": profile"
16
+ end
17
+
18
+ def test_has_profile
19
+ assert_match(/: profile/, @user)
20
+ end
21
+ end
22
+ end
@@ -268,7 +268,7 @@ EOT
268
268
  [:test, {:name => "test1_1"}],
269
269
  [:test, {:name => "test1_2"}]]]) do |collector|
270
270
  collector.filter = Proc.new do |test|
271
- not /\Atest1/.match(test.method_name).nil?
271
+ !/\Atest1/.match(test.method_name).nil?
272
272
  end
273
273
  end
274
274
  end