Ejemplo n.º 1
0
        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");
        }
Ejemplo n.º 2
0
        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");
        }
Ejemplo n.º 3
0
        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");
        }
Ejemplo n.º 4
0
        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");
        }
Ejemplo n.º 5
0
        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");
        }
Ejemplo n.º 6
0
        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");
        }
Ejemplo n.º 7
0
        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");
        }
Ejemplo n.º 9
0
        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);
        }
Ejemplo n.º 11
0
        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.");
        }
Ejemplo n.º 12
0
        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");
        }
Ejemplo n.º 14
0
        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");
        }
Ejemplo n.º 15
0
        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");
        }
Ejemplo n.º 16
0
        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");
        }
Ejemplo n.º 18
0
        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");
        }
Ejemplo n.º 19
0
        /// <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);
        }
Ejemplo n.º 20
0
        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);
        }
Ejemplo n.º 21
0
 public AccessorBuilder Get() => AccessorBuilder.Get(this);
Ejemplo n.º 22
0
 public AccessorBuilder Set() => AccessorBuilder.Set(this);
Ejemplo n.º 23
0
        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");
        }