activeldap 1.0.2 → 1.0.9
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGES +32 -0
- data/README +8 -1
- 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/app/controllers/{application.rb → application_controller.rb} +3 -1
- data/examples/al-admin/app/views/account/sign_up.html.erb +6 -5
- data/examples/al-admin/config/boot.rb +1 -0
- data/examples/al-admin/config/environment.rb +4 -2
- data/examples/al-admin/config.ru +7 -0
- data/examples/al-admin/lib/ldap_test_helper.rb +38 -0
- data/examples/al-admin/lib/tasks/gettext.rake +3 -2
- data/examples/al-admin/lib/tasks/testing.rake +10 -0
- data/examples/al-admin/po/en/al-admin.po +4 -4
- data/examples/al-admin/po/ja/al-admin.po +4 -4
- data/examples/al-admin/po/nl/al-admin.po +3 -3
- data/examples/al-admin/public/dispatch.cgi +2 -2
- data/examples/al-admin/public/dispatch.fcgi +1 -1
- data/examples/al-admin/public/dispatch.rb +2 -2
- data/examples/al-admin/test/functional/account_controller_test.rb +2 -14
- data/examples/al-admin/test/functional/attributes_controller_test.rb +2 -12
- data/examples/al-admin/test/functional/directory_controller_test.rb +2 -12
- data/examples/al-admin/test/functional/object_classes_controller_test.rb +2 -12
- data/examples/al-admin/test/functional/syntaxes_controller_test.rb +2 -12
- data/examples/al-admin/test/functional/users_controller_test.rb +2 -12
- data/examples/al-admin/test/functional/welcome_controller_test.rb +2 -12
- data/examples/al-admin/test/integration/sign_up_test.rb +44 -0
- data/examples/al-admin/test/run-test.sh +1 -1
- data/examples/al-admin/test/test_helper.rb +25 -1
- data/examples/al-admin/test/unit/user_test.rb +1 -2
- data/examples/groupadd +2 -2
- data/examples/groupdel +2 -2
- data/examples/groupls +2 -2
- data/examples/groupmod +2 -2
- data/examples/lpasswd +2 -2
- data/examples/objects/group.rb +2 -2
- data/examples/objects/user.rb +1 -1
- data/examples/ouadd +2 -2
- data/examples/useradd +2 -2
- data/examples/useradd-binary +6 -3
- data/examples/userdel +2 -2
- data/examples/userls +2 -2
- data/examples/usermod +2 -2
- data/examples/usermod-binary-add +6 -3
- data/examples/usermod-binary-add-time +6 -3
- data/examples/usermod-binary-del +2 -2
- data/examples/usermod-lang-add +2 -2
- data/lib/active_ldap/adapter/base.rb +47 -23
- data/lib/active_ldap/adapter/jndi.rb +30 -28
- data/lib/active_ldap/adapter/jndi_connection.rb +6 -0
- data/lib/active_ldap/adapter/ldap.rb +25 -26
- data/lib/active_ldap/adapter/net_ldap.rb +28 -33
- data/lib/active_ldap/adapter/net_ldap_ext.rb +0 -6
- data/lib/active_ldap/association/proxy.rb +2 -1
- data/lib/active_ldap/attributes.rb +31 -0
- data/lib/active_ldap/base.rb +75 -31
- data/lib/active_ldap/compatible.rb +44 -0
- data/lib/active_ldap/configuration.rb +3 -3
- data/lib/active_ldap/connection.rb +41 -12
- data/lib/active_ldap/distinguished_name.rb +1 -0
- data/lib/active_ldap/get_text.rb +0 -7
- data/lib/active_ldap/ldif.rb +59 -44
- data/lib/active_ldap/operations.rb +41 -10
- data/lib/active_ldap/schema.rb +41 -6
- data/lib/active_ldap/user_password.rb +7 -7
- data/lib/active_ldap/validations.rb +24 -12
- data/lib/active_ldap/xml.rb +2 -2
- data/lib/active_ldap.rb +120 -139
- data/po/en/active-ldap.po +5 -5
- data/po/ja/active-ldap.po +5 -5
- data/rails/README +2 -2
- data/rails/init.rb +2 -2
- data/test/al-test-utils.rb +11 -4
- data/test/run-test.rb +6 -2
- data/test/test_associations.rb +4 -4
- data/test/test_attributes.rb +3 -1
- data/test/test_base.rb +75 -15
- data/test/test_base_per_instance.rb +7 -1
- data/test/test_bind.rb +4 -4
- data/test/test_connection.rb +36 -14
- data/test/test_connection_per_class.rb +5 -5
- data/test/test_connection_per_dn.rb +11 -5
- data/test/test_groupadd.rb +2 -2
- data/test/test_groupdel.rb +2 -2
- data/test/test_groupls.rb +1 -1
- data/test/test_groupmod.rb +2 -2
- data/test/test_ldif.rb +11 -1
- data/test/test_schema.rb +38 -2
- data/test/test_syntax.rb +12 -2
- data/test/test_useradd-binary.rb +1 -0
- data/test/test_usermod-binary-add-time.rb +1 -0
- data/test/test_usermod-binary-add.rb +1 -0
- data/test/test_validation.rb +24 -13
- data/test-unit/lib/test/unit/assertions.rb +97 -14
- data/test-unit/lib/test/unit/autorunner.rb +20 -4
- data/test-unit/lib/test/unit/priority.rb +21 -1
- data/test-unit/lib/test/unit/ui/console/testrunner.rb +7 -4
- data/test-unit/test/test_assertions.rb +52 -5
- metadata +10 -14
- data/rails/plugin/active_ldap/README +0 -54
- data/rails/plugin/active_ldap/generators/README +0 -2
- data/rails/plugin/active_ldap/generators/model_active_ldap/USAGE +0 -17
- data/rails/plugin/active_ldap/generators/model_active_ldap/model_active_ldap_generator.rb +0 -70
- data/rails/plugin/active_ldap/generators/model_active_ldap/templates/fixtures.yml +0 -11
- data/rails/plugin/active_ldap/generators/model_active_ldap/templates/model_active_ldap.rb +0 -3
- data/rails/plugin/active_ldap/generators/model_active_ldap/templates/unit_test.rb +0 -10
- data/rails/plugin/active_ldap/generators/scaffold_active_ldap/scaffold_active_ldap_generator.rb +0 -7
- data/rails/plugin/active_ldap/generators/scaffold_al/scaffold_al_generator.rb +0 -20
- data/rails/plugin/active_ldap/init.rb +0 -36
- data/rails_generators/scaffold_al/scaffold_al_generator.rb +0 -20
data/test/test_schema.rb
CHANGED
@@ -2,6 +2,42 @@ require 'al-test-utils'
|
|
2
2
|
|
3
3
|
class TestSchema < Test::Unit::TestCase
|
4
4
|
priority :must
|
5
|
+
def test_dit_content_rule
|
6
|
+
object_class_schema = "( 2.5.6.6 NAME 'person' DESC " +
|
7
|
+
"'RFC2256: a person' SUP top STRUCTURAL MUST sn " +
|
8
|
+
"MAY ( userPassword $ telephoneNumber ) )"
|
9
|
+
dit_content_rule_schema = "( 2.5.6.6 NAME 'person' MUST cn " +
|
10
|
+
"MAY ( seeAlso $ description ) )"
|
11
|
+
attributes_schema =
|
12
|
+
[
|
13
|
+
"( 2.5.4.3 NAME 'cn' SYNTAX '1.3.6.1.4.1.1466.115.121.1.15' SINGLE-VALUE )",
|
14
|
+
"( 2.5.4.4 NAME 'sn' SYNTAX '1.3.6.1.4.1.1466.115.121.1.15' SINGLE-VALUE )",
|
15
|
+
"( 2.5.4.35 NAME 'userPassword' SYNTAX '1.3.6.1.4.1.1466.115.121.1.40' )",
|
16
|
+
"( 2.5.4.20 NAME 'telephoneNumber' SYNTAX '1.3.6.1.4.1.1466.115.121.1.15' SINGLE-VALUE )",
|
17
|
+
"( 2.5.4.34 NAME 'seeAlso' SYNTAX '1.3.6.1.4.1.1466.115.121.1.12' )",
|
18
|
+
"( 2.5.4.13 NAME 'description' SYNTAX '1.3.6.1.4.1.1466.115.121.1.15' )",
|
19
|
+
]
|
20
|
+
|
21
|
+
entry = {
|
22
|
+
"objectClasses" => [object_class_schema],
|
23
|
+
"dITContentRules" => [dit_content_rule_schema],
|
24
|
+
"attributeTypes" => attributes_schema,
|
25
|
+
}
|
26
|
+
|
27
|
+
schema = ActiveLdap::Schema.new(entry)
|
28
|
+
object_class = schema.object_class("person")
|
29
|
+
assert_equal({
|
30
|
+
:must => ["sn", "cn"],
|
31
|
+
:may => ["userPassword", "telephoneNumber",
|
32
|
+
"seeAlso", "description"],
|
33
|
+
},
|
34
|
+
{
|
35
|
+
:must => object_class.must.collect(&:name),
|
36
|
+
:may => object_class.may.collect(&:name),
|
37
|
+
})
|
38
|
+
end
|
39
|
+
|
40
|
+
priority :normal
|
5
41
|
def test_oid_list_with_just_only_one_oid
|
6
42
|
ou_schema = "( 2.5.6.5 NAME 'organizationalUnit' SUP top STRUCTURAL MUST " +
|
7
43
|
"(ou ) MAY (c $ l $ st $ street $ searchGuide $ businessCategory $ " +
|
@@ -32,7 +68,6 @@ class TestSchema < Test::Unit::TestCase
|
|
32
68
|
assert_schema(expect, "organizationalUnit", ou_schema)
|
33
69
|
end
|
34
70
|
|
35
|
-
priority :normal
|
36
71
|
def test_normalize_attribute_value
|
37
72
|
entry = {
|
38
73
|
"attributeTypes" =>
|
@@ -455,7 +490,7 @@ class TestSchema < Test::Unit::TestCase
|
|
455
490
|
|
456
491
|
private
|
457
492
|
def assert_schema(expect, name, schema)
|
458
|
-
sub = "
|
493
|
+
sub = "objectClasses"
|
459
494
|
entry = {sub => [schema]}
|
460
495
|
schema = ActiveLdap::Schema.new(entry)
|
461
496
|
actual = {}
|
@@ -466,6 +501,7 @@ class TestSchema < Test::Unit::TestCase
|
|
466
501
|
actual[normalized_key] = schema[sub, name, normalized_key]
|
467
502
|
end
|
468
503
|
assert_equal(normalized_expect, actual)
|
504
|
+
schema
|
469
505
|
end
|
470
506
|
|
471
507
|
def assert_make_schema_with_empty_entries(entries)
|
data/test/test_syntax.rb
CHANGED
@@ -182,7 +182,12 @@ class TestSyntax < Test::Unit::TestCase
|
|
182
182
|
assert_valid("これはDirectoryString文字列です。",
|
183
183
|
"Directory String")
|
184
184
|
|
185
|
-
value =
|
185
|
+
value = "これはDirectoryString文字列です。"
|
186
|
+
if value.respond_to?(:encode)
|
187
|
+
value = value.encode("euc-jp")
|
188
|
+
else
|
189
|
+
value = NKF.nkf("-We", value)
|
190
|
+
end
|
186
191
|
assert_invalid(_("%s has invalid UTF-8 character") % value.inspect,
|
187
192
|
value, "Directory String")
|
188
193
|
end
|
@@ -281,7 +286,12 @@ class TestSyntax < Test::Unit::TestCase
|
|
281
286
|
|
282
287
|
assert_invalid(_("empty string"), "", "Postal Address")
|
283
288
|
|
284
|
-
value =
|
289
|
+
value = "東京"
|
290
|
+
if value.respond_to?(:encode)
|
291
|
+
value = value.encode("euc-jp")
|
292
|
+
else
|
293
|
+
value = NKF.nkf("-We", value)
|
294
|
+
end
|
285
295
|
assert_invalid(_("%s has invalid UTF-8 character") % value.inspect,
|
286
296
|
value, "Postal Address")
|
287
297
|
end
|
data/test/test_useradd-binary.rb
CHANGED
@@ -46,6 +46,7 @@ class TestUseraddBinary < Test::Unit::TestCase
|
|
46
46
|
assert_equal(['person', 'posixAccount', 'shadowAccount',
|
47
47
|
'strongAuthenticationUser'].sort, user.classes.sort)
|
48
48
|
cert = File.read(File.join(@examples_dir, 'example.der'))
|
49
|
+
cert.force_encoding('ascii-8bit') if cert.respond_to?(:force_encoding)
|
49
50
|
assert_equal(cert, user.user_certificate)
|
50
51
|
end
|
51
52
|
end
|
@@ -48,6 +48,7 @@ class TestUsermodBinaryAddTime < Test::Unit::TestCase
|
|
48
48
|
assert_equal((previous_classes + ['strongAuthenticationUser']).sort,
|
49
49
|
user.classes.sort)
|
50
50
|
cert = File.read(File.join(@examples_dir, 'example.der'))
|
51
|
+
cert.force_encoding("ascii-8bit") if cert.respond_to?(:force_encoding)
|
51
52
|
assert_equal(cert, user.user_certificate)
|
52
53
|
end
|
53
54
|
end
|
@@ -48,6 +48,7 @@ class TestUsermodBinaryAdd < Test::Unit::TestCase
|
|
48
48
|
assert_equal((previous_classes + ['strongAuthenticationUser']).sort,
|
49
49
|
user.classes.sort)
|
50
50
|
cert = File.read(File.join(@examples_dir, 'example.der'))
|
51
|
+
cert.force_encoding("ascii-8bit") if cert.respond_to?(:force_encoding)
|
51
52
|
assert_equal(cert, user.user_certificate)
|
52
53
|
end
|
53
54
|
end
|
data/test/test_validation.rb
CHANGED
@@ -29,8 +29,9 @@ class TestValidation < Test::Unit::TestCase
|
|
29
29
|
reason = _("attribute value is missing")
|
30
30
|
invalid_format = _("%s is invalid distinguished name (DN): %s")
|
31
31
|
invalid_message = invalid_format % ["uid==,#{user.class.base}", reason]
|
32
|
-
|
33
|
-
|
32
|
+
format = _("%{fn} is invalid: %s")
|
33
|
+
format = format.sub(/^%\{fn\}/, la_('DN'))
|
34
|
+
message = format % invalid_message
|
34
35
|
assert_equal([message],
|
35
36
|
user.errors.full_messages.find_all {|m| /DN/ =~ m})
|
36
37
|
end
|
@@ -42,8 +43,9 @@ class TestValidation < Test::Unit::TestCase
|
|
42
43
|
reason = _("attribute value is missing")
|
43
44
|
invalid_format = _("%s is invalid distinguished name (DN): %s")
|
44
45
|
invalid_message = invalid_format % ["uid==,#{user.class.base}", reason]
|
45
|
-
|
46
|
-
|
46
|
+
format = _("%{fn} is invalid: %s")
|
47
|
+
format = format.sub(/^%\{fn\}/, la_('DN'))
|
48
|
+
message = format % invalid_message
|
47
49
|
assert_equal([message], user.errors.full_messages)
|
48
50
|
end
|
49
51
|
end
|
@@ -53,8 +55,9 @@ class TestValidation < Test::Unit::TestCase
|
|
53
55
|
assert(user.valid?)
|
54
56
|
user.uid_number = ""
|
55
57
|
assert(!user.valid?)
|
56
|
-
format = _("is required attribute by objectClass '%s'")
|
57
|
-
|
58
|
+
format = _("%{fn} is required attribute by objectClass '%s'")
|
59
|
+
format = format.sub(/^%\{fn\}/, la_('uidNumber'))
|
60
|
+
blank_message = format % loc_("posixAccount")
|
58
61
|
assert_equal([blank_message], user.errors.full_messages)
|
59
62
|
end
|
60
63
|
end
|
@@ -66,10 +69,11 @@ class TestValidation < Test::Unit::TestCase
|
|
66
69
|
assert(user.save)
|
67
70
|
user.class.excluded_classes = ['person']
|
68
71
|
assert(!user.save)
|
69
|
-
format = n_("has excluded value: %s",
|
70
|
-
"has excluded values: %s",
|
72
|
+
format = n_("%{fn} has excluded value: %s",
|
73
|
+
"%{fn} has excluded values: %s",
|
71
74
|
1)
|
72
|
-
|
75
|
+
format = format.sub(/^%\{fn\}/, la_("objectClass"))
|
76
|
+
message = format % loc_("person")
|
73
77
|
assert_equal([message], user.errors.full_messages)
|
74
78
|
end
|
75
79
|
end
|
@@ -137,7 +141,9 @@ class TestValidation < Test::Unit::TestCase
|
|
137
141
|
assert(ou_class.new("YYY").save)
|
138
142
|
ou = ou_class.new("YYY")
|
139
143
|
assert(!ou.save)
|
140
|
-
|
144
|
+
format = _("%{fn} is duplicated: %s")
|
145
|
+
format = format.sub(/^%\{fn\}/, la_("DN"))
|
146
|
+
message = format % ou.dn
|
141
147
|
assert_equal([message], ou.errors.full_messages)
|
142
148
|
end
|
143
149
|
|
@@ -184,11 +190,16 @@ class TestValidation < Test::Unit::TestCase
|
|
184
190
|
params = [formatted_value, syntax_description, reason]
|
185
191
|
params.unshift(option) if option
|
186
192
|
if option
|
187
|
-
format = _("(%s) has invalid format: %s: required syntax: %s: %s")
|
193
|
+
format = _("%{fn}(%s) has invalid format: %s: required syntax: %s: %s")
|
188
194
|
else
|
189
|
-
format = _("has invalid format: %s: required syntax: %s: %s")
|
195
|
+
format = _("%{fn} has invalid format: %s: required syntax: %s: %s")
|
190
196
|
end
|
191
|
-
|
197
|
+
localized_name = la_(name)
|
198
|
+
if option and !ActiveLdap.get_text_supported?
|
199
|
+
localized_name += ' '
|
200
|
+
end
|
201
|
+
format = format.sub(/^%\{fn\}/, localized_name)
|
202
|
+
message = format % params
|
192
203
|
assert_equal([message], model.errors.full_messages)
|
193
204
|
end
|
194
205
|
|
@@ -154,21 +154,43 @@ EOT
|
|
154
154
|
|
155
155
|
|
156
156
|
##
|
157
|
-
# Passes if +object+
|
157
|
+
# Passes if +object+.instance_of?(+klass+). When +klass+ is
|
158
|
+
# an array of classes, it passes if any class
|
159
|
+
# satisfies +object.instance_of?(class).
|
158
160
|
#
|
159
161
|
# Example:
|
160
|
-
# assert_instance_of
|
162
|
+
# assert_instance_of(String, 'foo') # -> pass
|
163
|
+
# assert_instance_of([Fixnum, NilClass], 100) # -> pass
|
164
|
+
# assert_instance_of([Numeric, NilClass], 100) # -> fail
|
161
165
|
|
162
166
|
public
|
163
167
|
def assert_instance_of(klass, object, message="")
|
164
168
|
_wrap_assertion do
|
165
|
-
|
166
|
-
|
169
|
+
klasses = nil
|
170
|
+
klasses = klass if klass.is_a?(Array)
|
171
|
+
assert_block("The first parameter to assert_instance_of should be " +
|
172
|
+
"a Class or an Array of Class.") do
|
173
|
+
if klasses
|
174
|
+
klasses.all? {|k| k.is_a?(Class)}
|
175
|
+
else
|
176
|
+
klass.is_a?(Class)
|
177
|
+
end
|
178
|
+
end
|
179
|
+
klass_message = AssertionMessage.maybe_container(klass) do |value|
|
180
|
+
"<#{value}>"
|
181
|
+
end
|
182
|
+
full_message = build_message(message, <<EOT, object, klass_message, object.class)
|
167
183
|
<?> expected to be an instance of
|
168
|
-
|
184
|
+
? but was
|
169
185
|
<?>.
|
170
186
|
EOT
|
171
|
-
assert_block(full_message)
|
187
|
+
assert_block(full_message) do
|
188
|
+
if klasses
|
189
|
+
klasses.any? {|k| object.instance_of?(k)}
|
190
|
+
else
|
191
|
+
object.instance_of?(klass)
|
192
|
+
end
|
193
|
+
end
|
172
194
|
end
|
173
195
|
end
|
174
196
|
|
@@ -187,17 +209,45 @@ EOT
|
|
187
209
|
end
|
188
210
|
|
189
211
|
##
|
190
|
-
# Passes if +object+
|
212
|
+
# Passes if +object+.kind_of?(+klass+). When +klass+ is
|
213
|
+
# an array of classes or modules, it passes if any
|
214
|
+
# class or module satisfies +object.kind_of?(class_or_module).
|
191
215
|
#
|
192
216
|
# Example:
|
193
|
-
# assert_kind_of
|
217
|
+
# assert_kind_of(Object, 'foo') # -> pass
|
218
|
+
# assert_kind_of([Fixnum, NilClass], 100) # -> pass
|
219
|
+
# assert_kind_of([Fixnum, NilClass], "string") # -> fail
|
194
220
|
|
195
221
|
public
|
196
222
|
def assert_kind_of(klass, object, message="")
|
197
223
|
_wrap_assertion do
|
198
|
-
|
199
|
-
|
200
|
-
assert_block(
|
224
|
+
klasses = nil
|
225
|
+
klasses = klass if klass.is_a?(Array)
|
226
|
+
assert_block("The first parameter to assert_kind_of should be " +
|
227
|
+
"a kind_of Module or an Array of a kind_of Module.") do
|
228
|
+
if klasses
|
229
|
+
klasses.all? {|k| k.kind_of?(Module)}
|
230
|
+
else
|
231
|
+
klass.kind_of?(Module)
|
232
|
+
end
|
233
|
+
end
|
234
|
+
klass_message = AssertionMessage.maybe_container(klass) do |value|
|
235
|
+
"<#{value}>"
|
236
|
+
end
|
237
|
+
full_message = build_message(message,
|
238
|
+
"<?> expected to be kind_of\\?\n" +
|
239
|
+
"? but was\n" +
|
240
|
+
"<?>.",
|
241
|
+
object,
|
242
|
+
klass_message,
|
243
|
+
object.class)
|
244
|
+
assert_block(full_message) do
|
245
|
+
if klasses
|
246
|
+
klasses.any? {|k| object.kind_of?(k)}
|
247
|
+
else
|
248
|
+
object.kind_of?(klass)
|
249
|
+
end
|
250
|
+
end
|
201
251
|
end
|
202
252
|
end
|
203
253
|
|
@@ -826,6 +876,19 @@ EOT
|
|
826
876
|
DelayedLiteral.new(block)
|
827
877
|
end
|
828
878
|
|
879
|
+
def maybe_container(value, &formatter)
|
880
|
+
MaybeContainer.new(value, &formatter)
|
881
|
+
end
|
882
|
+
|
883
|
+
MAX_DIFF_TARGET_STRING_SIZE = 300
|
884
|
+
def diff_target_string?(string)
|
885
|
+
if string.respond_to?(:bytesize)
|
886
|
+
string.bytesize < MAX_DIFF_TARGET_STRING_SIZE
|
887
|
+
else
|
888
|
+
string.size < MAX_DIFF_TARGET_STRING_SIZE
|
889
|
+
end
|
890
|
+
end
|
891
|
+
|
829
892
|
def delayed_diff(from, to)
|
830
893
|
delayed_literal do
|
831
894
|
if !from.is_a?(String) or !to.is_a?(String)
|
@@ -833,7 +896,9 @@ EOT
|
|
833
896
|
to = convert(to)
|
834
897
|
end
|
835
898
|
|
836
|
-
diff =
|
899
|
+
diff = nil
|
900
|
+
diff = "" if !diff_target_string?(from) or !diff_target_string?(to)
|
901
|
+
diff ||= Diff.readable(from, to)
|
837
902
|
if /^[-+]/ !~ diff
|
838
903
|
diff = ""
|
839
904
|
elsif /^[ ?]/ =~ diff or /(?:.*\n){2,}/ =~ diff
|
@@ -879,7 +944,7 @@ EOM
|
|
879
944
|
def initialize(value)
|
880
945
|
@value = value
|
881
946
|
end
|
882
|
-
|
947
|
+
|
883
948
|
def inspect
|
884
949
|
@value.to_s
|
885
950
|
end
|
@@ -889,12 +954,30 @@ EOM
|
|
889
954
|
def initialize(value)
|
890
955
|
@value = value
|
891
956
|
end
|
892
|
-
|
957
|
+
|
893
958
|
def inspect
|
894
959
|
@value.call.to_s
|
895
960
|
end
|
896
961
|
end
|
897
962
|
|
963
|
+
class MaybeContainer
|
964
|
+
def initialize(value, &formatter)
|
965
|
+
@value = value
|
966
|
+
@formatter = formatter
|
967
|
+
end
|
968
|
+
|
969
|
+
def inspect
|
970
|
+
if @value.is_a?(Array)
|
971
|
+
values = @value.collect do |value|
|
972
|
+
@formatter.call(AssertionMessage.convert(value))
|
973
|
+
end
|
974
|
+
"[#{values.join(', ')}]"
|
975
|
+
else
|
976
|
+
@formatter.call(AssertionMessage.convert(@value))
|
977
|
+
end
|
978
|
+
end
|
979
|
+
end
|
980
|
+
|
898
981
|
class Template
|
899
982
|
def self.create(string)
|
900
983
|
parts = (string ? string.scan(/(?=[^\\])\?|(?:\\\?|[^\?])+/m) : [])
|
@@ -1,4 +1,3 @@
|
|
1
|
-
require 'test/unit'
|
2
1
|
require 'test/unit/color-scheme'
|
3
2
|
require 'optparse'
|
4
3
|
|
@@ -204,6 +203,13 @@ module Test
|
|
204
203
|
end
|
205
204
|
end
|
206
205
|
|
206
|
+
o.on("--default-priority=PRIORITY",
|
207
|
+
Priority.available_values,
|
208
|
+
"Uses PRIORITY as default priority",
|
209
|
+
"(#{keyword_display(Priority.available_values)})") do |priority|
|
210
|
+
Priority.default = priority
|
211
|
+
end
|
212
|
+
|
207
213
|
o.on('-I', "--load-path=DIR[#{File::PATH_SEPARATOR}DIR...]",
|
208
214
|
"Appends directory list to $LOAD_PATH.") do |dirs|
|
209
215
|
$LOAD_PATH.concat(dirs.split(File::PATH_SEPARATOR))
|
@@ -252,10 +258,20 @@ module Test
|
|
252
258
|
end
|
253
259
|
|
254
260
|
def keyword_display(keywords)
|
255
|
-
keywords.collect do |keyword, _|
|
261
|
+
keywords = keywords.collect do |keyword, _|
|
256
262
|
keyword.to_s
|
257
|
-
end.uniq.sort
|
258
|
-
|
263
|
+
end.uniq.sort
|
264
|
+
|
265
|
+
i = 0
|
266
|
+
keywords.collect do |keyword|
|
267
|
+
if (i > 0 and keyword[0] == keywords[i - 1][0]) or
|
268
|
+
((i < keywords.size - 1) and (keyword[0] == keywords[i + 1][0]))
|
269
|
+
n = 2
|
270
|
+
else
|
271
|
+
n = 1
|
272
|
+
end
|
273
|
+
i += 1
|
274
|
+
keyword.sub(/^(.{#{n}})([A-Za-z]+)(?=\w*$)/, '\\1[\\2]')
|
259
275
|
end.join(", ")
|
260
276
|
end
|
261
277
|
|
@@ -26,6 +26,19 @@ module Test
|
|
26
26
|
def disable
|
27
27
|
@@enabled = false
|
28
28
|
end
|
29
|
+
|
30
|
+
@@default = :normal
|
31
|
+
def default
|
32
|
+
@@default || :normal
|
33
|
+
end
|
34
|
+
|
35
|
+
def default=(default)
|
36
|
+
@@default = default
|
37
|
+
end
|
38
|
+
|
39
|
+
def available_values
|
40
|
+
Checker.available_priorities
|
41
|
+
end
|
29
42
|
end
|
30
43
|
|
31
44
|
class Checker
|
@@ -36,7 +49,7 @@ module Test
|
|
36
49
|
end
|
37
50
|
|
38
51
|
def need_to_run?(test)
|
39
|
-
priority = test[:priority] ||
|
52
|
+
priority = test[:priority] || Priority.default
|
40
53
|
if have_priority?(priority)
|
41
54
|
send(priority_check_method_name(priority), test)
|
42
55
|
else
|
@@ -44,6 +57,13 @@ module Test
|
|
44
57
|
end
|
45
58
|
end
|
46
59
|
|
60
|
+
def available_priorities
|
61
|
+
methods(false).collect do |name|
|
62
|
+
/\Arun_priority_(.+)\?\z/ =~ name.to_s
|
63
|
+
$1
|
64
|
+
end.compact
|
65
|
+
end
|
66
|
+
|
47
67
|
def run_priority_must?(test)
|
48
68
|
true
|
49
69
|
end
|
@@ -185,10 +185,13 @@ module Test
|
|
185
185
|
|
186
186
|
def guess_color_availability
|
187
187
|
return false unless @output.tty?
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
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
|
192
195
|
end
|
193
196
|
|
194
197
|
def guess_progress_row_max
|
@@ -246,6 +246,37 @@ EOM
|
|
246
246
|
end
|
247
247
|
end
|
248
248
|
|
249
|
+
def test_assert_equal_with_large_string
|
250
|
+
message = <<-EOM.chomp
|
251
|
+
<#{("a\n" + "x" * 297).inspect}> expected but was
|
252
|
+
<#{"x".inspect}>.
|
253
|
+
|
254
|
+
diff:
|
255
|
+
+ x
|
256
|
+
- a
|
257
|
+
- #{"x" * 297}
|
258
|
+
|
259
|
+
folded diff:
|
260
|
+
+ x
|
261
|
+
- a
|
262
|
+
- #{"x" * 78}
|
263
|
+
- #{"x" * 78}
|
264
|
+
- #{"x" * 78}
|
265
|
+
- #{"x" * 63}
|
266
|
+
EOM
|
267
|
+
check_fails(message) do
|
268
|
+
assert_equal("a\n" + "x" * 297, "x")
|
269
|
+
end
|
270
|
+
|
271
|
+
message = <<-EOM.chomp
|
272
|
+
<#{("a\n" + "x" * 298).inspect}> expected but was
|
273
|
+
<#{"x".inspect}>.
|
274
|
+
EOM
|
275
|
+
check_fails(message) do
|
276
|
+
assert_equal("a\n" + "x" * 298, "x")
|
277
|
+
end
|
278
|
+
end
|
279
|
+
|
249
280
|
def test_assert_raise_success
|
250
281
|
return_value = nil
|
251
282
|
check_nothing_fails(true) do
|
@@ -447,8 +478,18 @@ EOM
|
|
447
478
|
check_fails(%Q{failed assert_instance_of.\n<"string"> expected to be an instance of\n<Hash> but was\n<String>.}) {
|
448
479
|
assert_instance_of(Hash, "string", "failed assert_instance_of")
|
449
480
|
}
|
481
|
+
|
482
|
+
check_nothing_fails do
|
483
|
+
assert_instance_of([Fixnum, NilClass], 100)
|
484
|
+
end
|
485
|
+
check_fails(%Q{<"string"> expected to be an instance of\n[<Fixnum>, <NilClass>] but was\n<String>.}) do
|
486
|
+
assert_instance_of([Fixnum, NilClass], "string")
|
487
|
+
end
|
488
|
+
check_fails(%Q{<100> expected to be an instance of\n[<Numeric>, <NilClass>] but was\n<Fixnum>.}) do
|
489
|
+
assert_instance_of([Numeric, NilClass], 100)
|
490
|
+
end
|
450
491
|
end
|
451
|
-
|
492
|
+
|
452
493
|
def test_assert_nil
|
453
494
|
check_nothing_fails {
|
454
495
|
assert_nil(nil)
|
@@ -487,14 +528,21 @@ EOM
|
|
487
528
|
check_nothing_fails {
|
488
529
|
assert_kind_of(Comparable, 1)
|
489
530
|
}
|
490
|
-
check_fails(%Q{<"string"
|
531
|
+
check_fails(%Q{<"string"> expected to be kind_of?\n<Class> but was\n<String>.}) {
|
491
532
|
assert_kind_of(Class, "string")
|
492
533
|
}
|
493
|
-
check_fails(%Q{failed assert_kind_of.\n<"string"
|
534
|
+
check_fails(%Q{failed assert_kind_of.\n<"string"> expected to be kind_of?\n<Class> but was\n<String>.}) {
|
494
535
|
assert_kind_of(Class, "string", "failed assert_kind_of")
|
495
536
|
}
|
537
|
+
|
538
|
+
check_nothing_fails do
|
539
|
+
assert_kind_of([Fixnum, NilClass], 100)
|
540
|
+
end
|
541
|
+
check_fails(%Q{<"string"> expected to be kind_of?\n[<Fixnum>, <NilClass>] but was\n<String>.}) do
|
542
|
+
assert_kind_of([Fixnum, NilClass], "string")
|
543
|
+
end
|
496
544
|
end
|
497
|
-
|
545
|
+
|
498
546
|
def test_assert_match
|
499
547
|
check_nothing_fails {
|
500
548
|
assert_match(/strin./, "string")
|
@@ -1032,4 +1080,3 @@ EOM
|
|
1032
1080
|
end
|
1033
1081
|
end
|
1034
1082
|
end
|
1035
|
-
p
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: activeldap
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.9
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Will Drewry
|
@@ -10,7 +10,7 @@ autorequire: active_ldap
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2009-
|
13
|
+
date: 2009-06-03 00:00:00 -05:00
|
14
14
|
default_executable:
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
@@ -55,10 +55,12 @@ files:
|
|
55
55
|
- TODO
|
56
56
|
- benchmark/bench-al.rb
|
57
57
|
- benchmark/config.yaml.sample
|
58
|
+
- data/locale/en/LC_MESSAGES/active-ldap.mo
|
59
|
+
- data/locale/ja/LC_MESSAGES/active-ldap.mo
|
58
60
|
- examples/al-admin/README
|
59
61
|
- examples/al-admin/Rakefile
|
60
62
|
- examples/al-admin/app/controllers/account_controller.rb
|
61
|
-
- examples/al-admin/app/controllers/
|
63
|
+
- examples/al-admin/app/controllers/application_controller.rb
|
62
64
|
- examples/al-admin/app/controllers/attributes_controller.rb
|
63
65
|
- examples/al-admin/app/controllers/directory_controller.rb
|
64
66
|
- examples/al-admin/app/controllers/object_classes_controller.rb
|
@@ -112,6 +114,7 @@ files:
|
|
112
114
|
- examples/al-admin/app/views/users/index.html.erb
|
113
115
|
- examples/al-admin/app/views/users/show.html.erb
|
114
116
|
- examples/al-admin/app/views/welcome/index.html.erb
|
117
|
+
- examples/al-admin/config.ru
|
115
118
|
- examples/al-admin/config/boot.rb
|
116
119
|
- examples/al-admin/config/database.yml.example
|
117
120
|
- examples/al-admin/config/environment.rb
|
@@ -127,7 +130,9 @@ files:
|
|
127
130
|
- examples/al-admin/db/migrate/001_create_users.rb
|
128
131
|
- examples/al-admin/lib/authenticated_system.rb
|
129
132
|
- examples/al-admin/lib/authenticated_test_helper.rb
|
133
|
+
- examples/al-admin/lib/ldap_test_helper.rb
|
130
134
|
- examples/al-admin/lib/tasks/gettext.rake
|
135
|
+
- examples/al-admin/lib/tasks/testing.rake
|
131
136
|
- examples/al-admin/po/en/al-admin.po
|
132
137
|
- examples/al-admin/po/ja/al-admin.po
|
133
138
|
- examples/al-admin/po/nl/al-admin.po
|
@@ -346,6 +351,7 @@ files:
|
|
346
351
|
- examples/al-admin/test/functional/syntaxes_controller_test.rb
|
347
352
|
- examples/al-admin/test/functional/users_controller_test.rb
|
348
353
|
- examples/al-admin/test/functional/welcome_controller_test.rb
|
354
|
+
- examples/al-admin/test/integration/sign_up_test.rb
|
349
355
|
- examples/al-admin/test/run-test.sh
|
350
356
|
- examples/al-admin/test/test_helper.rb
|
351
357
|
- examples/al-admin/test/unit/user_test.rb
|
@@ -407,6 +413,7 @@ files:
|
|
407
413
|
- lib/active_ldap/base.rb
|
408
414
|
- lib/active_ldap/callbacks.rb
|
409
415
|
- lib/active_ldap/command.rb
|
416
|
+
- lib/active_ldap/compatible.rb
|
410
417
|
- lib/active_ldap/configuration.rb
|
411
418
|
- lib/active_ldap/connection.rb
|
412
419
|
- lib/active_ldap/distinguished_name.rb
|
@@ -434,23 +441,12 @@ files:
|
|
434
441
|
- po/ja/active-ldap.po
|
435
442
|
- rails/README
|
436
443
|
- rails/init.rb
|
437
|
-
- rails/plugin/active_ldap/README
|
438
|
-
- rails/plugin/active_ldap/generators/README
|
439
|
-
- rails/plugin/active_ldap/generators/model_active_ldap/USAGE
|
440
|
-
- rails/plugin/active_ldap/generators/model_active_ldap/model_active_ldap_generator.rb
|
441
|
-
- rails/plugin/active_ldap/generators/model_active_ldap/templates/fixtures.yml
|
442
|
-
- rails/plugin/active_ldap/generators/model_active_ldap/templates/model_active_ldap.rb
|
443
|
-
- rails/plugin/active_ldap/generators/model_active_ldap/templates/unit_test.rb
|
444
|
-
- rails/plugin/active_ldap/generators/scaffold_active_ldap/scaffold_active_ldap_generator.rb
|
445
|
-
- rails/plugin/active_ldap/generators/scaffold_al/scaffold_al_generator.rb
|
446
|
-
- rails/plugin/active_ldap/init.rb
|
447
444
|
- rails_generators/model_active_ldap/USAGE
|
448
445
|
- rails_generators/model_active_ldap/model_active_ldap_generator.rb
|
449
446
|
- rails_generators/model_active_ldap/templates/model_active_ldap.rb
|
450
447
|
- rails_generators/model_active_ldap/templates/unit_test.rb
|
451
448
|
- rails_generators/scaffold_active_ldap/scaffold_active_ldap_generator.rb
|
452
449
|
- rails_generators/scaffold_active_ldap/templates/ldap.yml
|
453
|
-
- rails_generators/scaffold_al/scaffold_al_generator.rb
|
454
450
|
- test-unit/History.txt
|
455
451
|
- test-unit/Manifest.txt
|
456
452
|
- test-unit/README.txt
|