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_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_getting_getters_class() { var nameGetterOne = AccessorBuilder.BuildGetter <Person, string>("Name"); var nameGetterTwo = AccessorBuilder.BuildGetter <Person, string>("Name"); nameGetterOne.ShouldNotBeSameAs(nameGetterTwo); var jobGetter = AccessorBuilder.BuildGetter <Person, string>("Job", true); jobGetter.ShouldNotBe(nameGetterOne); jobGetter.ShouldNotBe(nameGetterTwo); }
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_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); }