1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175
|
require 'al-test-utils'
class TestReflection < Test::Unit::TestCase
include AlTestUtils
priority :must
priority :normal
def test_base_class
assert_equal(ActiveLdap::Base, ActiveLdap::Base.base_class)
assert_equal(@user_class, @user_class.base_class)
sub_user_class = Class.new(@user_class)
assert_equal(@user_class, sub_user_class.base_class)
end
def test_respond_to?
make_temporary_user do |user, password|
attributes = (user.must + user.may).collect(&:name) - ["objectClass"]
_wrap_assertion do
attributes.each do |name|
assert_respond_to(user, name)
end
assert_not_respond_to(user, "objectClass")
end
user.replace_class(user.class.required_classes)
new_attributes = collect_attributes(user.class.required_classes)
new_attributes -= ["objectClass"]
_wrap_assertion do
assert_not_equal([], new_attributes)
new_attributes.each do |name|
assert_respond_to(user, name)
end
remained_attributes = (attributes - new_attributes)
assert_not_equal([], remained_attributes)
remained_attributes.each do |name|
assert_not_respond_to(user, name)
end
end
end
end
def test_methods
make_temporary_user do |user, password|
assert_equal(user.methods.uniq.size, user.methods.size)
assert_equal(user.methods(false).uniq.size, user.methods(false).size)
end
make_temporary_user do |user, password|
attributes = user.must.collect(&:name) + user.may.collect(&:name)
attributes = (attributes - ["objectClass"]).map(&:to_sym)
assert_equal([], attributes - user.methods)
assert_methods_with_only_required_classes(user, attributes)
end
make_temporary_user do |user, password|
user.remove_class("inetOrgPerson")
attributes = user.must.collect(&:name) + user.may.collect(&:name)
attributes = (attributes - ["objectClass"]).map(&:to_sym)
assert_equal([], attributes - user.methods)
assert_methods_with_only_required_classes(user, attributes)
end
make_temporary_user do |user, password|
attributes = user.must.collect(&:name) + user.may.collect(&:name)
attributes = attributes.map(&:downcase).map(&:to_sym)
assert_not_equal([], attributes - user.methods)
assert_not_equal([], attributes - user.methods(false))
normalize_attributes_list = Proc.new do |*attributes_list|
attributes_list.collect do |attrs|
attrs.collect {|x| x.downcase}
end
end
assert_methods_with_only_required_classes(user, attributes,
&normalize_attributes_list)
end
make_temporary_user do |user, password|
attributes = user.must.collect(&:name) + user.may.collect(&:name)
attributes -= ["objectClass"]
attributes = attributes.collect(&:underscore).map(&:to_sym)
assert_equal([], attributes - user.methods)
normalize_attributes_list = Proc.new do |*attributes_list|
attributes_list.collect do |attrs|
attrs.collect(&:underscore)
end
end
assert_methods_with_only_required_classes(user, attributes,
&normalize_attributes_list)
end
make_temporary_user do |user, password|
user.remove_class("inetOrgPerson")
attributes = user.must.collect(&:name) + user.may.collect(&:name)
attributes -= ["objectClass"]
attributes = attributes.collect(&:underscore).map(&:to_sym)
assert_equal([], attributes - user.methods)
normalize_attributes_list = Proc.new do |*attributes_list|
attributes_list.collect do |attrs|
attrs.collect(&:underscore)
end
end
assert_methods_with_only_required_classes(user, attributes,
&normalize_attributes_list)
end
end
def test_attribute_names
make_temporary_user do |user, password|
attributes = collect_attributes(user.classes)
assert_equal([], attributes.uniq - user.attribute_names)
assert_equal([], user.attribute_names - attributes.uniq)
end
end
private
def assert_methods_with_only_required_classes(object, attributes)
old_classes = (object.classes - object.class.required_classes).uniq
old_attributes = collect_attributes(old_classes, false).uniq.sort
required_attributes = collect_attributes(object.class.required_classes,
false).uniq.sort
if block_given?
old_attributes, required_attributes =
yield(old_attributes, required_attributes)
end
[old_attributes, required_attributes].map{|a| a.map!(&:to_sym)}
object.replace_class(object.class.required_classes)
assert_equal([],
old_attributes -
(attributes - object.methods - required_attributes) -
required_attributes)
end
def assert_respond_to(object, name)
assert_true(object.respond_to?(name), name)
assert_true(object.respond_to?("#{name}="), "#{name}=")
assert_true(object.respond_to?("#{name}?"), "#{name}?")
assert_true(object.respond_to?("#{name}_before_type_cast"),
"#{name}_before_type_cast")
end
def assert_not_respond_to(object, name)
assert_false(object.respond_to?(name), name)
assert_false(object.respond_to?("#{name}="), "#{name}=")
assert_false(object.respond_to?("#{name}?"), "#{name}?")
assert_false(object.respond_to?("#{name}_before_type_cast"),
"#{name}_before_type_cast")
end
def collect_attributes(object_classes, with_aliases=true)
attributes = []
object_classes.each do |object_class|
object_klass = ActiveLdap::Base.schema.object_class(object_class)
if with_aliases
(object_klass.must + object_klass.may).each do |attribute|
attributes << attribute.name
attributes.concat(attribute.aliases)
end
else
attributes.concat((object_klass.must + object_klass.may).collect(&:name))
end
end
attributes
end
end
|