public void When_checking_invalid_input() { string nullStr = null; PropertyInfo nullPropInfo = null; Should.Throw <ArgumentException>(() => AccessorBuilder.BuildSetter <Person, string>(nullStr)) .Message.ShouldBe("String must not be null, empty or whitespace."); Should.Throw <ArgumentException>(() => AccessorBuilder.BuildSetter <Person, string>(nullPropInfo)) .Message.ShouldBe("Value cannot be null.\r\nParameter name: propertyInfo"); Should.Throw <ArgumentException>(() => AccessorBuilder.BuildGetter <Person, string>(nullStr)) .Message.ShouldBe("String must not be null, empty or whitespace."); Should.Throw <ArgumentException>(() => AccessorBuilder.BuildGetter <Person, string>(nullPropInfo)) .Message.ShouldBe("Value cannot be null.\r\nParameter name: propertyInfo"); Should.Throw <ArgumentException>(() => AccessorBuilder.BuildSetter <Person>(nullStr)) .Message.ShouldBe("String must not be null, empty or whitespace."); Should.Throw <ArgumentException>(() => AccessorBuilder.BuildSetter <Person>(nullPropInfo)) .Message.ShouldBe("Value cannot be null.\r\nParameter name: propertyInfo"); Should.Throw <ArgumentException>(() => AccessorBuilder.BuildGetter <Person>(nullStr)) .Message.ShouldBe("String must not be null, empty or whitespace."); Should.Throw <ArgumentException>(() => AccessorBuilder.BuildGetter <Person>(nullPropInfo)) .Message.ShouldBe("Value cannot be null.\r\nParameter name: propertyInfo"); Should.Throw <ArgumentException>(() => AccessorBuilder.BuildSetter(nullPropInfo)) .Message.ShouldBe("Value cannot be null.\r\nParameter name: propertyInfo"); Should.Throw <ArgumentException>(() => AccessorBuilder.BuildGetter(nullPropInfo)) .Message.ShouldBe("Value cannot be null.\r\nParameter name: propertyInfo"); }
public void When_testing_public_members() { var accessor = AccessorBuilder.Build <Parent>(); accessor.ShouldBeOfType <Accessor <Parent> >(); accessor.Type.ShouldBe(typeof(Parent)); accessor.IgnoreCase.ShouldBe(false); accessor.IncludesNonPublic.ShouldBe(false); accessor.Properties.ShouldNotBeNull(); accessor.Properties.Length.ShouldBe(2); var instance = new Parent(); accessor[instance, "Name"] = "John"; instance.Name.ShouldBe("John"); accessor.Get(instance, "Name").ShouldBe("John"); accessor.Set(instance, "Age", (object)10); accessor.Get <int>(instance, "Age").ShouldBe(10); accessor.Set(instance, "Name", "Bobby"); accessor.Get <string>(instance, "Name").ShouldBe("Bobby"); accessor.Set(instance, "Name", "Joey"); accessor.Get <string>(instance, "Name").ShouldBe("Joey"); }
public void When_getting_properties_of_known_instance_but_unknown_property_type() { var instance = new Person(); instance.Name.ShouldBeNull(); instance.Name = "Foo"; instance.Name.ShouldBe("Foo"); var nameGetter = AccessorBuilder.BuildGetter <Person>("Name"); nameGetter(instance).ShouldBe("Foo"); instance.Name.ShouldBe("Foo"); instance.GetJob().ShouldBeNull(); var jobSetter = AccessorBuilder.BuildSetter <Person>("Job", true); jobSetter(instance, "Baz"); instance.GetJob().ShouldBe("Baz"); var jobGetter = AccessorBuilder.BuildGetter <Person>("Job", true); jobGetter(instance).ShouldBe("Baz"); }
public void When_getting_properties_of_unknown_instance_and_property_type() { var instance = new Person(); instance.Name.ShouldBeNull(); instance.Name = "Foo"; instance.Name.ShouldBe("Foo"); PropertyInfo nameProp; typeof(Person).TryGetInstanceProperty("Name", out nameProp).ShouldBeTrue(); var nameGetter = AccessorBuilder.BuildGetter(nameProp); nameGetter(instance).ShouldBe("Foo"); instance.Name.ShouldBe("Foo"); instance.GetJob().ShouldBeNull(); PropertyInfo jobProp; typeof(Person).TryGetInstanceProperty("Job", out jobProp).ShouldBeTrue(); var jobSetter = AccessorBuilder.BuildSetter(jobProp, true); jobSetter(instance, "Baz"); instance.GetJob().ShouldBe("Baz"); var jobGetter = AccessorBuilder.BuildGetter(jobProp, true); jobGetter(instance).ShouldBe("Baz"); }
public void When_creating_object_accessor_with_default_flags() { var parent = new Parent(); var parentAccessor = AccessorBuilder.Build(parent.GetType()); parentAccessor.ShouldBeOfType <Accessor>(); parentAccessor.Type.ShouldBe(typeof(Parent)); parentAccessor.IgnoreCase.ShouldBe(false); parentAccessor.IncludesNonPublic.ShouldBe(false); parentAccessor.ShouldNotBeNull(); parentAccessor.Properties.ShouldNotBeNull(); parentAccessor.Properties.Length.ShouldBe(2); parentAccessor.Properties[0].Name.ShouldBe("Name"); parentAccessor.Properties[0].PropertyType.ShouldBe(typeof(string)); parentAccessor.Properties[1].Name.ShouldBe("Age"); parentAccessor.Properties[1].PropertyType.ShouldBe(typeof(int)); parentAccessor[parent, "Name"].ShouldBeNull(); parentAccessor[parent, "Name"] = "Foo"; parentAccessor[parent, "Name"].ShouldBe("Foo"); parentAccessor[parent, "Age"].ShouldBe(0); parentAccessor[parent, "Age"] = 10; parentAccessor[parent, "Age"].ShouldBe(10); var child = new Child(); var childAccessor = AccessorBuilder.Build(child.GetType()); childAccessor.ShouldBeOfType <Accessor>(); childAccessor.Type.ShouldBe(typeof(Child)); childAccessor.IgnoreCase.ShouldBe(false); childAccessor.IncludesNonPublic.ShouldBe(false); childAccessor.ShouldNotBeNull(); childAccessor.Properties.ShouldNotBeNull(); childAccessor.Properties.Length.ShouldBe(3); childAccessor.Properties[0].Name.ShouldBe("ChildName"); childAccessor.Properties[0].PropertyType.ShouldBe(typeof(string)); childAccessor.Properties[1].Name.ShouldBe("Name"); childAccessor.Properties[1].PropertyType.ShouldBe(typeof(string)); childAccessor.Properties[2].Name.ShouldBe("Age"); childAccessor.Properties[2].PropertyType.ShouldBe(typeof(int)); childAccessor[child, "ChildName"].ShouldBe("Bar"); childAccessor[child, "ChildName"] = "BarBar"; childAccessor[child, "ChildName"].ShouldBe("BarBar"); childAccessor[child, "Name"].ShouldBeNull(); childAccessor[child, "Name"] = "Foo"; childAccessor[child, "Name"].ShouldBe("Foo"); }
public void When_creating_an_instance_of_a_struct_with_default_constructor() { var instanceBuilder = AccessorBuilder.BuildInstanceCreator <ValueTypeDefaultCtor>(); var instance = instanceBuilder(); instance.ShouldBeOfType <ValueTypeDefaultCtor>(); instance.ShouldBeAssignableTo <ValueTypeDefaultCtor>(); instance.Name.ShouldBe("Foo"); }
public void When_getting_setters_class() { var nameSetterOne = AccessorBuilder.BuildSetter <Person, string>("Name"); var nameSetterTwo = AccessorBuilder.BuildSetter <Person, string>("Name"); nameSetterOne.ShouldNotBeSameAs(nameSetterTwo); var jobSetter = AccessorBuilder.BuildSetter <Person, string>("Job", true); jobSetter.ShouldNotBe(nameSetterOne); jobSetter.ShouldNotBe(nameSetterTwo); }
public void When_creating_an_instance_of_object_with_one_parameter_internal_constructor() { var publicCtor = typeof(Three).GetConstructors(BindingFlags.NonPublic | BindingFlags.Instance); publicCtor.Length.ShouldBe(1); var instanceBuilder = AccessorBuilder.BuildInstanceCreator <Three>(publicCtor[0]); var instance = instanceBuilder(new object[] { "Two" }); instance.ShouldNotBeNull(); instance.Name.ShouldBe("Two"); }
public void When_using_child_accessor_to_access_parent_properties() { var child = new Child(); var childAccessor = AccessorBuilder.Build(child.GetType()); childAccessor.Type.ShouldBe(typeof(Child)); childAccessor.IgnoreCase.ShouldBe(false); childAccessor.IncludesNonPublic.ShouldBe(false); var parent = new Parent(); Should.Throw <NullReferenceException>(() => { var ignore = childAccessor[parent, "Name"]; }); }
public void When_creating_an_instance_of_object_with_multiple_parameters_public_constructor() { var publicCtor = typeof(One).GetConstructors(BindingFlags.Public | BindingFlags.Instance); publicCtor.Length.ShouldBe(2); var instanceBuilder = AccessorBuilder.BuildInstanceCreator <One>(publicCtor[1]); var instance = instanceBuilder(new object[] { "One", 1 }); instance.ShouldNotBeNull(); instance.Name.ShouldBe("One"); instance.Age.ShouldBe(1); }
public void When_using_parent_accessor_to_access_child_properties() { var parent = new Parent(); var parentAccessor = AccessorBuilder.Build(parent.GetType()); parentAccessor.Type.ShouldBe(typeof(Parent)); parentAccessor.IgnoreCase.ShouldBe(false); parentAccessor.IncludesNonPublic.ShouldBe(false); var child = new Child(); Should.Throw <NullReferenceException>(() => { var ignore = parentAccessor[child, "ChildName"]; }) .Message.ShouldBe("Object reference not set to an instance of an object."); }
public void When_setting_invalid_values() { var accessor = AccessorBuilder.Build(typeof(Parent)); accessor.Type.ShouldBe(typeof(Parent)); accessor.IgnoreCase.ShouldBe(false); accessor.IncludesNonPublic.ShouldBe(false); var instance = new Parent(); accessor[instance, "Name"] = 10; instance.Name.ShouldBeNull(); Should.Throw <InvalidCastException>(() => accessor[instance, "Age"] = "10"); }
public void When_creating_an_instance_of_a_child_object_with_two_parameters_constructor() { var publicCtor = typeof(Four).GetConstructors(BindingFlags.NonPublic | BindingFlags.Instance); publicCtor.Length.ShouldBe(1); var instanceBuilder = AccessorBuilder.BuildInstanceCreator <Four>(publicCtor[0]); var instance = instanceBuilder(new object[] { "Child", "Base" }); instance.ShouldNotBeNull(); instance.ShouldBeOfType <Four>(); instance.ShouldBeAssignableTo <Three>(); instance.NameChild.ShouldBe("Child"); instance.Name.ShouldBe("Base"); }
public void When_creating_an_instance_of_a_struct_with_constructor() { var publicCtor = typeof(ValueTypeWithCtor).GetConstructors(BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance); publicCtor.Length.ShouldBe(1); var instanceBuilder = AccessorBuilder.BuildInstanceCreator <ValueTypeWithCtor>(publicCtor[0]); var instance = instanceBuilder(new object[] { "Child", 10 }); instance.ShouldBeOfType <ValueTypeWithCtor>(); instance.ShouldBeAssignableTo <ValueTypeWithCtor>(); instance.Name.ShouldBe("Child"); instance.Age.ShouldBe(10); instance.GetJob().ShouldBe("SomeJob"); }
public void When_getting_properties_of_known_instance_but_unkonnown_property_type_of_a_struct() { var instance = new Struct(); instance.SomeString.ShouldBeNull(); instance.SomeString = "Foo"; instance.SomeString.ShouldBe("Foo"); var propGetter = AccessorBuilder.BuildGetter <Struct>("SomeString"); propGetter(instance).ShouldBe("Foo"); instance.SomeString.ShouldBe("Foo"); }
public void When_setting_properties_of_known_instance_and_property_type_class() { var instance = new Person(); instance.Name.ShouldBeNull(); var nameSetter = AccessorBuilder.BuildSetter <Person, string>("Name"); nameSetter(instance, "A"); instance.Name.ShouldBe("A"); var jobSetter = AccessorBuilder.BuildSetter <Person, string>("Job", true); jobSetter(instance, "job"); instance.GetJob().ShouldBe("job"); }
public void When_creating_an_instance_of_object_with_default_constructor() { var publicCtor = typeof(Zero).GetConstructors(BindingFlags.Public | BindingFlags.Instance); publicCtor.Length.ShouldBe(1); var instanceBuilderOne = AccessorBuilder.BuildInstanceCreator <Zero>(publicCtor[0]); var instanceOne = instanceBuilderOne(new object[] { "Zero" }); instanceOne.ShouldNotBeNull(); instanceOne.Name.ShouldBe("Zero"); var instanceBuilderTwo = AccessorBuilder.BuildInstanceCreator <Zero>(); var instanceTwo = instanceBuilderTwo(); instanceTwo.ShouldNotBeNull(); instanceTwo.Name.ShouldBe("Zero"); }
public void When_getting_properties_of_unknown_instance_and_property_type_of_a_struct() { var instance = new Struct(); instance.SomeString.ShouldBeNull(); instance.SomeString = "Foo"; instance.SomeString.ShouldBe("Foo"); PropertyInfo nameProp; typeof(Struct).TryGetInstanceProperty("SomeString", out nameProp).ShouldBeTrue(); var nameGetter = AccessorBuilder.BuildGetter(nameProp); nameGetter(instance).ShouldBe("Foo"); instance.SomeString.ShouldBe("Foo"); }
/// <summary> /// Compares the values of all the properties for the given /// <paramref name="left"/> and <paramref name="right"/> and returns the variance. /// </summary> public bool Compare <T>(T left, T right, bool inherit, bool includePrivate, out IEasyDictionary <PropertyInfo, Variance> variances) { var type = typeof(T); var key = new CacheKey(type, inherit, includePrivate); var cache = _cache.GetOrAdd(key, () => { return(type.GetInstanceProperties(inherit, includePrivate) .Select(p => new KeyValuePair <PropertyInfo, object>(p, AccessorBuilder.BuildGetter <T>(p, includePrivate)))); }); var bothMatch = true; var result = new EasyDictionary <PropertyInfo, Variance>(variance => variance.Property); foreach (var pair in cache) { var p = pair.Key; var getter = (Func <T, object>)pair.Value; var leftVal = getter(left); var rightVal = getter(right); var variance = new Variance(p, leftVal, rightVal); result.Add(variance); if (!bothMatch) { continue; } if (variance.Varies) { bothMatch = false; } } variances = result; return(bothMatch); }
public SecurityAccessorBuilder AddAccessor <TAccessor>( Action <SecurityConfigurationBuilder> accessorConfigBuilder, Func <IServiceProvider, IImmutableDictionary <Type, Type>, AbstractAccessor> accessorBuilder) where TAccessor : AbstractAccessor { var type = typeof(TAccessor); var configuration = new SecurityConfigurationBuilder(); accessorConfigBuilder(configuration); var handlers = configuration.Build(); var accessorInfo = new AccessorBuilder { AccessorType = type, HandlersDictionary = handlers, BuildFunction = accessorBuilder }; AccessorBuilders.Add(accessorInfo); return(this); }
public AccessorBuilder Get() => AccessorBuilder.Get(this);
public AccessorBuilder Set() => AccessorBuilder.Set(this);
public void When_creating_generic_accessor_with_custom_flags() { var parent = new Parent(); var parentAccessor = AccessorBuilder.Build <Parent>(true, true); parentAccessor.ShouldBeOfType <Accessor <Parent> >(); parentAccessor.Type.ShouldBe(typeof(Parent)); parentAccessor.IgnoreCase.ShouldBe(true); parentAccessor.IncludesNonPublic.ShouldBe(true); parentAccessor.ShouldNotBeNull(); parentAccessor.Properties.ShouldNotBeNull(); parentAccessor.Properties.Length.ShouldBe(3); parentAccessor.Properties[0].Name.ShouldBe("Name"); parentAccessor.Properties[0].PropertyType.ShouldBe(typeof(string)); parentAccessor.Properties[1].Name.ShouldBe("Age"); parentAccessor.Properties[1].PropertyType.ShouldBe(typeof(int)); parentAccessor.Properties[2].Name.ShouldBe("Job"); parentAccessor.Properties[2].PropertyType.ShouldBe(typeof(string)); parentAccessor[parent, "Name"].ShouldBeNull(); parentAccessor[parent, "Name"] = "Foo"; parentAccessor[parent, "Name"].ShouldBe("Foo"); parentAccessor[parent, "Age"].ShouldBe(0); parentAccessor[parent, "Age"] = 10; parentAccessor[parent, "Age"].ShouldBe(10); parentAccessor[parent, "Job"].ShouldBeNull(); parentAccessor[parent, "Job"] = "Clown"; parentAccessor[parent, "Job"].ShouldBe("Clown"); parentAccessor[parent, "NAME"].ShouldBe("Foo"); parentAccessor[parent, "name"] = "Foo Foo"; parentAccessor[parent, "naME"].ShouldBe("Foo Foo"); var child = new Child(); var childAccessor = AccessorBuilder.Build <Child>(true, true); childAccessor.ShouldBeOfType <Accessor <Child> >(); childAccessor.Type.ShouldBe(typeof(Child)); childAccessor.IgnoreCase.ShouldBe(true); childAccessor.IncludesNonPublic.ShouldBe(true); childAccessor.ShouldNotBeNull(); childAccessor.Properties.ShouldNotBeNull(); childAccessor.Properties.Length.ShouldBe(3); childAccessor.Properties[0].Name.ShouldBe("ChildName"); childAccessor.Properties[0].PropertyType.ShouldBe(typeof(string)); childAccessor.Properties[1].Name.ShouldBe("Name"); childAccessor.Properties[1].PropertyType.ShouldBe(typeof(string)); childAccessor.Properties[2].Name.ShouldBe("Age"); childAccessor.Properties[2].PropertyType.ShouldBe(typeof(int)); childAccessor[child, "ChildName"].ShouldBe("Bar"); childAccessor[child, "ChIldNAme"] = "BarBar"; childAccessor[child, "ChildName"].ShouldBe("BarBar"); childAccessor[child, "Name"].ShouldBeNull(); childAccessor[child, "Name"] = "Foo"; childAccessor[child, "Name"].ShouldBe("Foo"); }