activeldap 1.1.0 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (68) hide show
  1. data/CHANGES +15 -0
  2. data/README +4 -1
  3. data/Rakefile +1 -1
  4. data/TODO +1 -2
  5. data/data/locale/en/LC_MESSAGES/active-ldap.mo +0 -0
  6. data/data/locale/ja/LC_MESSAGES/active-ldap.mo +0 -0
  7. data/examples/al-admin/app/models/user.rb +1 -1
  8. data/examples/al-admin/config/boot.rb +1 -1
  9. data/examples/al-admin/config/environment.rb +1 -15
  10. data/examples/al-admin/config/initializers/session_store.rb +23 -0
  11. data/examples/al-admin/config/session_secret.txt +1 -0
  12. data/examples/al-admin/db/schema.rb +23 -0
  13. data/examples/al-admin/locale/en/LC_MESSAGES/al-admin.mo +0 -0
  14. data/examples/al-admin/locale/ja/LC_MESSAGES/al-admin.mo +0 -0
  15. data/examples/al-admin/locale/nl/LC_MESSAGES/al-admin.mo +0 -0
  16. data/lib/active_ldap.rb +3 -3
  17. data/lib/active_ldap/acts/tree.rb +1 -1
  18. data/lib/active_ldap/adapter/base.rb +9 -1
  19. data/lib/active_ldap/adapter/ldap.rb +7 -1
  20. data/lib/active_ldap/association/belongs_to_many.rb +6 -2
  21. data/lib/active_ldap/association/children.rb +1 -1
  22. data/lib/active_ldap/association/has_many_utils.rb +2 -2
  23. data/lib/active_ldap/association/has_many_wrap.rb +6 -2
  24. data/lib/active_ldap/attributes.rb +5 -1
  25. data/lib/active_ldap/base.rb +133 -59
  26. data/lib/active_ldap/connection.rb +10 -3
  27. data/lib/active_ldap/distinguished_name.rb +33 -1
  28. data/lib/active_ldap/ldif.rb +1 -0
  29. data/lib/active_ldap/operations.rb +33 -14
  30. data/lib/active_ldap/populate.rb +21 -12
  31. data/lib/active_ldap/schema.rb +21 -0
  32. data/lib/active_ldap/validations.rb +49 -4
  33. data/po/active-ldap.pot +4030 -0
  34. data/po/en/active-ldap.po +57 -37
  35. data/po/ja/active-ldap.po +58 -38
  36. data/test-unit/History.txt +1 -1
  37. data/test-unit/Manifest.txt +2 -0
  38. data/test-unit/README.txt +1 -1
  39. data/test-unit/lib/test/unit/assertions.rb +1 -1
  40. data/test-unit/lib/test/unit/autorunner.rb +19 -4
  41. data/test-unit/lib/test/unit/collector/load.rb +3 -1
  42. data/test-unit/lib/test/unit/color-scheme.rb +5 -1
  43. data/test-unit/lib/test/unit/error.rb +7 -5
  44. data/test-unit/lib/test/unit/runner/tap.rb +8 -0
  45. data/test-unit/lib/test/unit/ui/console/testrunner.rb +63 -8
  46. data/test-unit/lib/test/unit/ui/tap/testrunner.rb +92 -0
  47. data/test-unit/test/collector/test-load.rb +1 -5
  48. data/test-unit/test/test-color-scheme.rb +4 -0
  49. data/test/al-test-utils.rb +30 -2
  50. data/test/test_acts_as_tree.rb +6 -3
  51. data/test/test_associations.rb +3 -2
  52. data/test/test_base.rb +104 -5
  53. data/test/test_dn.rb +10 -0
  54. data/test/test_groupls.rb +1 -1
  55. data/test/test_lpasswd.rb +1 -1
  56. data/test/test_reflection.rb +23 -16
  57. data/test/test_schema.rb +33 -1
  58. data/test/test_useradd-binary.rb +1 -1
  59. data/test/test_useradd.rb +1 -1
  60. data/test/test_userdel.rb +1 -1
  61. data/test/test_userls.rb +1 -1
  62. data/test/test_usermod-binary-add-time.rb +1 -1
  63. data/test/test_usermod-binary-add.rb +1 -1
  64. data/test/test_usermod-binary-del.rb +1 -1
  65. data/test/test_usermod-lang-add.rb +1 -1
  66. data/test/test_usermod.rb +1 -1
  67. data/test/test_validation.rb +48 -10
  68. metadata +44 -35
@@ -1,4 +1,4 @@
1
- === 2.0.3 / 2009-07-17
1
+ === 2.0.3 / 2009-07-19
2
2
 
3
3
  * 6 major enhancements
4
4
  * add assert_predicate.
@@ -31,12 +31,14 @@ lib/test/unit/pending.rb
31
31
  lib/test/unit/priority.rb
32
32
  lib/test/unit/runner/console.rb
33
33
  lib/test/unit/runner/emacs.rb
34
+ lib/test/unit/runner/tap.rb
34
35
  lib/test/unit/testcase.rb
35
36
  lib/test/unit/testresult.rb
36
37
  lib/test/unit/testsuite.rb
37
38
  lib/test/unit/ui/console/outputlevel.rb
38
39
  lib/test/unit/ui/console/testrunner.rb
39
40
  lib/test/unit/ui/emacs/testrunner.rb
41
+ lib/test/unit/ui/tap/testrunner.rb
40
42
  lib/test/unit/ui/testrunner.rb
41
43
  lib/test/unit/ui/testrunnermediator.rb
42
44
  lib/test/unit/ui/testrunnerutilities.rb
@@ -7,7 +7,7 @@
7
7
  Test::Unit 2.x - Improved version of Test::Unit bundled in
8
8
  Ruby 1.8.x.
9
9
 
10
- Ruby 1.9.x bundles miniunit not Test::Unit. Test::Unit
10
+ Ruby 1.9.x bundles minitest not Test::Unit. Test::Unit
11
11
  bundled in Ruby 1.8.x had not been improved but unbundled
12
12
  Test::Unit (Test::Unit 2.x) will be improved actively.
13
13
 
@@ -880,7 +880,7 @@ EOT
880
880
  MaybeContainer.new(value, &formatter)
881
881
  end
882
882
 
883
- MAX_DIFF_TARGET_STRING_SIZE = 300
883
+ MAX_DIFF_TARGET_STRING_SIZE = 1000
884
884
  def diff_target_string?(string)
885
885
  if string.respond_to?(:bytesize)
886
886
  string.bytesize < MAX_DIFF_TARGET_STRING_SIZE
@@ -102,15 +102,23 @@ module Test
102
102
  @to_run = []
103
103
  @color_scheme = ColorScheme.default
104
104
  @runner_options = {}
105
+ @default_arguments = []
105
106
  @workdir = nil
106
- default_config_file = "test-unit.yml"
107
- load_config(default_config_file) if File.exist?(default_config_file)
107
+ config_file = "test-unit.yml"
108
+ if File.exist?(config_file)
109
+ load_config(config_file)
110
+ else
111
+ global_config_file = File.expand_path("~/.test-unit.xml")
112
+ load_config(global_config_file) if File.exist?(global_config_file)
113
+ end
108
114
  yield(self) if block_given?
109
115
  end
110
116
 
111
117
  def process_args(args = ARGV)
118
+ default_arguments = @default_arguments.dup
112
119
  begin
113
- options.order!(args) {|arg| @to_run << arg}
120
+ @default_arguments.concat(args)
121
+ options.order!(@default_arguments) {|arg| @to_run << arg}
114
122
  rescue OptionParser::ParseError => e
115
123
  puts e
116
124
  puts options
@@ -119,6 +127,8 @@ module Test
119
127
  @filters << proc{false} unless(@filters.empty?)
120
128
  end
121
129
  not @to_run.empty?
130
+ ensure
131
+ @default_arguments = default_arguments
122
132
  end
123
133
 
124
134
  def options
@@ -304,7 +314,11 @@ module Test
304
314
  (config["#{runner_name}_options"] || {}).each do |key, value|
305
315
  key = key.to_sym
306
316
  value = ColorScheme[value] if key == :color_scheme
307
- runner_options[key.to_sym] = value
317
+ if key == :arguments
318
+ @default_arguments.concat(value.split)
319
+ else
320
+ runner_options[key.to_sym] = value
321
+ end
308
322
  end
309
323
  @runner_options = @runner_options.merge(runner_options)
310
324
  end
@@ -327,3 +341,4 @@ end
327
341
 
328
342
  require 'test/unit/runner/console'
329
343
  require 'test/unit/runner/emacs'
344
+ require 'test/unit/runner/tap'
@@ -76,7 +76,9 @@ module Test
76
76
  sub_test_suites << sub_test_suite unless sub_test_suite.empty?
77
77
  end
78
78
  else
79
- collect_file(path, sub_test_suites, already_gathered)
79
+ unless excluded_file?(path.basename.to_s)
80
+ collect_file(path, sub_test_suites, already_gathered)
81
+ end
80
82
  end
81
83
 
82
84
  test_suite = TestSuite.new(path.basename.to_s)
@@ -14,7 +14,11 @@ module Test
14
14
  "omission" => Color.new("blue", :bold => true),
15
15
  "notification" => Color.new("cyan", :bold => true),
16
16
  "error" => Color.new("yellow", :bold => true) +
17
- Color.new("black", :foreground => false))
17
+ Color.new("black", :foreground => false),
18
+ "case" => Color.new("white", :bold => true) +
19
+ Color.new("blue", :foreground => false),
20
+ "suite" => Color.new("white", :bold => true) +
21
+ Color.new("green", :foreground => false))
18
22
  end
19
23
 
20
24
  @@schemes = {}
@@ -69,18 +69,20 @@ module Test
69
69
  end
70
70
  end
71
71
 
72
+ NOT_PASS_THROUGH_EXCEPTIONS = []
72
73
  PASS_THROUGH_EXCEPTIONS = [NoMemoryError, SignalException, Interrupt,
73
74
  SystemExit]
74
75
  private
75
76
  def handle_all_exception(exception)
76
77
  case exception
78
+ when *NOT_PASS_THROUGH_EXCEPTIONS
77
79
  when *PASS_THROUGH_EXCEPTIONS
78
- false
79
- else
80
- problem_occurred
81
- add_error(exception)
82
- true
80
+ return false
83
81
  end
82
+
83
+ problem_occurred
84
+ add_error(exception)
85
+ true
84
86
  end
85
87
 
86
88
  def add_error(exception)
@@ -0,0 +1,8 @@
1
+ module Test
2
+ module Unit
3
+ AutoRunner.register_runner(:tap) do |auto_runner|
4
+ require 'test/unit/ui/tap/testrunner'
5
+ Test::Unit::UI::Tap::TestRunner
6
+ end
7
+ end
8
+ end
@@ -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 <kou@clear-code.com>
5
7
  # License:: Ruby license.
6
8
 
7
9
  require 'test/unit/color-scheme'
@@ -36,6 +38,9 @@ module Test
36
38
  @progress_row_max = @options[:progress_row_max]
37
39
  @progress_row_max ||= guess_progress_row_max
38
40
  @already_outputted = false
41
+ @n_successes = 0
42
+ @indent = 0
43
+ @top_level = true
39
44
  @faults = []
40
45
  end
41
46
 
@@ -68,6 +73,8 @@ module Test
68
73
  @mediator.add_listener(TestRunnerMediator::FINISHED, &method(:finished))
69
74
  @mediator.add_listener(TestCase::STARTED, &method(:test_started))
70
75
  @mediator.add_listener(TestCase::FINISHED, &method(:test_finished))
76
+ @mediator.add_listener(TestSuite::STARTED, &method(:test_suite_started))
77
+ @mediator.add_listener(TestSuite::FINISHED, &method(:test_suite_finished))
71
78
  end
72
79
 
73
80
  def start_mediator
@@ -91,8 +98,6 @@ module Test
91
98
 
92
99
  def finished(elapsed_time)
93
100
  nl if output?(NORMAL) and !output?(VERBOSE)
94
- nl
95
- output("Finished in #{elapsed_time} seconds.")
96
101
  @faults.each_with_index do |fault, index|
97
102
  nl
98
103
  output_single("%3d) " % (index + 1))
@@ -101,25 +106,75 @@ module Test
101
106
  output(detail)
102
107
  end
103
108
  nl
109
+ output("Finished in #{elapsed_time} seconds.")
110
+ nl
104
111
  output(@result, result_color)
112
+ n_tests = @result.run_count
113
+ if n_tests.zero?
114
+ pass_percentage = 0
115
+ else
116
+ pass_percentage = 100.0 * (@n_successes / n_tests.to_f)
117
+ end
118
+ output("%g%% passed" % pass_percentage, result_color)
105
119
  end
106
120
 
107
121
  def format_fault(fault)
108
122
  fault.long_display
109
123
  end
110
-
124
+
111
125
  def test_started(name)
112
- output_single(name + ": ", nil, VERBOSE)
126
+ return unless output?(VERBOSE)
127
+
128
+ name = name.sub(/\(.+?\)\z/, '')
129
+ right_space = 8 * 2
130
+ left_space = @progress_row_max - right_space
131
+ left_space = left_space - indent.size - name.size
132
+ tab_stop = "\t" * ((left_space - 1) / 8)
133
+ output_single("#{indent}#{name}:#{tab_stop}", nil, VERBOSE)
134
+ @test_start = Time.now
113
135
  end
114
-
136
+
115
137
  def test_finished(name)
116
138
  unless @already_outputted
139
+ @n_successes += 1
117
140
  output_progress(".", color("success"))
118
141
  end
119
- nl(VERBOSE)
120
142
  @already_outputted = false
143
+
144
+ return unless output?(VERBOSE)
145
+
146
+ output(": (%f)" % (Time.now - @test_start), nil, VERBOSE)
121
147
  end
122
-
148
+
149
+ def test_suite_started(name)
150
+ if @top_level
151
+ @top_level = false
152
+ return
153
+ end
154
+
155
+ output_single(indent, nil, VERBOSE)
156
+ if /\A[A-Z]/ =~ name
157
+ _color = color("case")
158
+ else
159
+ _color = color("suite")
160
+ end
161
+ output_single(name, _color, VERBOSE)
162
+ output(": ", nil, VERBOSE)
163
+ @indent += 2
164
+ end
165
+
166
+ def test_suite_finished(name)
167
+ @indent -= 2
168
+ end
169
+
170
+ def indent
171
+ if output?(VERBOSE)
172
+ " " * @indent
173
+ else
174
+ ""
175
+ end
176
+ end
177
+
123
178
  def nl(level=NORMAL)
124
179
  output("", nil, level)
125
180
  end
@@ -0,0 +1,92 @@
1
+ #--
2
+ #
3
+ # Author:: Kouhei Sutou.
4
+ # Copyright:: Copyright (c) 2009 Kouhei Sutou <kou@clear-code.com>.
5
+ # License:: Ruby license.
6
+
7
+ require 'test/unit/ui/testrunner'
8
+ require 'test/unit/ui/testrunnermediator'
9
+
10
+ module Test
11
+ module Unit
12
+ module UI
13
+ module Tap
14
+
15
+ # Runs a Test::Unit::TestSuite and outputs result
16
+ # as TAP format.
17
+ class TestRunner < UI::TestRunner
18
+ def initialize(suite, options={})
19
+ super
20
+ @output = @options[:output] || STDOUT
21
+ @n_tests = 0
22
+ @already_outputted = false
23
+ end
24
+
25
+ # Begins the test run.
26
+ def start
27
+ setup_mediator
28
+ result = start_mediator
29
+ def result.passed?
30
+ true # for prove commend :<
31
+ end
32
+ result
33
+ end
34
+
35
+ private
36
+ def setup_mediator
37
+ @mediator = TestRunnerMediator.new(@suite)
38
+ attach_to_mediator
39
+ end
40
+
41
+ def attach_to_mediator
42
+ @mediator.add_listener(TestResult::FAULT, &method(:add_fault))
43
+ @mediator.add_listener(TestRunnerMediator::STARTED, &method(:started))
44
+ @mediator.add_listener(TestRunnerMediator::FINISHED, &method(:finished))
45
+ @mediator.add_listener(TestCase::STARTED, &method(:test_started))
46
+ @mediator.add_listener(TestCase::FINISHED, &method(:test_finished))
47
+ end
48
+
49
+ def start_mediator
50
+ @mediator.run_suite
51
+ end
52
+
53
+ def add_fault(fault)
54
+ puts("not ok #{@n_tests} - #{fault.short_display}")
55
+ fault.long_display.each_line do |line|
56
+ puts("# #{line}")
57
+ end
58
+ @already_outputted = true
59
+ end
60
+
61
+ def started(result)
62
+ @result = result
63
+ puts("1..#{@suite.size}")
64
+ end
65
+
66
+ def finished(elapsed_time)
67
+ puts("# Finished in #{elapsed_time} seconds.")
68
+ @result.to_s.each_line do |line|
69
+ puts("# #{line}")
70
+ end
71
+ end
72
+
73
+ def test_started(name)
74
+ @n_tests += 1
75
+ end
76
+
77
+ def test_finished(name)
78
+ unless @already_outputted
79
+ puts("ok #{@n_tests} - #{name}")
80
+ end
81
+ @already_outputted = false
82
+ end
83
+
84
+ def puts(*args)
85
+ @output.puts(*args)
86
+ @output.flush
87
+ end
88
+ end
89
+ end
90
+ end
91
+ end
92
+ end
@@ -240,11 +240,7 @@ EOT
240
240
  [:test, {:name => "test1_2"}]]],
241
241
  @test_case1.to_s)
242
242
 
243
- assert_collect([:suite, {:name => @no_load_sub_test_case5.basename.to_s},
244
- [:suite, {:name => _test_case_name("NoLoadSubTestCase5")},
245
- [:test, {:name => "test5_1"}],
246
- [:test, {:name => "test5_2"}]]],
247
- @no_load_sub_test_case5.to_s)
243
+ assert_collect(nil, @no_load_sub_test_case5.to_s)
248
244
  end
249
245
 
250
246
  def test_nil_pattern
@@ -8,6 +8,10 @@ class TestUnitColorScheme < Test::Unit::TestCase
8
8
  "notification" => color("cyan", :bold => true),
9
9
  "error" => color("yellow", :bold => true) +
10
10
  color("black", :foreground => false),
11
+ "case" => color("white", :bold => true) +
12
+ color("blue", :foreground => false),
13
+ "suite" => color("white", :bold => true) +
14
+ color("green", :foreground => false),
11
15
  },
12
16
  Test::Unit::ColorScheme.default.to_hash)
13
17
  end
@@ -16,6 +16,7 @@ module AlTestUtils
16
16
  def self.included(base)
17
17
  base.class_eval do
18
18
  include ActiveLdap::GetTextSupport
19
+ include Utilities
19
20
  include Assertions
20
21
  include Config
21
22
  include Connection
@@ -26,6 +27,12 @@ module AlTestUtils
26
27
  end
27
28
  end
28
29
 
30
+ module Utilities
31
+ def dn(string)
32
+ ActiveLdap::DN.parse(string)
33
+ end
34
+ end
35
+
29
36
  module Assertions
30
37
  def assert_true(actual, *args)
31
38
  assert_equal(true, actual, *args)
@@ -183,12 +190,29 @@ module AlTestUtils
183
190
 
184
191
  def ou_class(prefix="")
185
192
  ou_class = Class.new(ActiveLdap::Base)
186
- ou_class.ldap_mapping :dn_attribute => "ou",
193
+ ou_class.ldap_mapping(:dn_attribute => "ou",
187
194
  :prefix => prefix,
188
- :classes => ["top", "organizationalUnit"]
195
+ :classes => ["top", "organizationalUnit"])
189
196
  ou_class
190
197
  end
191
198
 
199
+ def dc_class(prefix="")
200
+ dc_class = Class.new(ActiveLdap::Base)
201
+ dc_class.ldap_mapping(:dn_attribute => "dc",
202
+ :prefix => prefix,
203
+ :classes => ["top", "dcObject", "organization"])
204
+ dc_class
205
+ end
206
+
207
+ def entry_class(prefix="")
208
+ entry_class = Class.new(ActiveLdap::Base)
209
+ entry_class.ldap_mapping(:prefix => prefix,
210
+ :scope => :sub,
211
+ :classes => ["top"])
212
+ entry_class.dn_attribute = nil
213
+ entry_class
214
+ end
215
+
192
216
  def populate_ou
193
217
  %w(Users Groups).each do |name|
194
218
  make_ou(name)
@@ -199,6 +223,10 @@ module AlTestUtils
199
223
  ActiveLdap::Populate.ensure_ou(name)
200
224
  end
201
225
 
226
+ def make_dc(name)
227
+ ActiveLdap::Populate.ensure_dc(name)
228
+ end
229
+
202
230
  def populate_user_class
203
231
  @user_class = Class.new(ActiveLdap::Base)
204
232
  @user_class_classes = ["posixAccount", "person"]