public void ObjectWrapperSetPropertyValue_NoSetter() { var testObject = new PublicValueTypeTestClass(); var objectWrapper = new ObjectWrapper(testObject); Assert.Throws <ArgumentException>(() => objectWrapper.SetPropertyValue(nameof(PublicValueTypeTestClass.PublicPropertyGet), 51)); }
public void ObjectWrapperSetPropertyValue_Class() { var testObject = new PublicValueTypeTestClass(); var objectWrapper = new ObjectWrapper(testObject); objectWrapper.SetPropertyValue(nameof(PublicValueTypeTestClass.PublicPropertyGetSet), 12); Assert.AreEqual(12, testObject.PublicPropertyGetSet); objectWrapper.SetPropertyValue(nameof(PublicValueTypeTestClass.PublicVirtualPropertyGetSet), 24); Assert.AreEqual(24, testObject.PublicVirtualPropertyGetSet); objectWrapper.SetPropertyValue(nameof(PublicValueTypeTestClass.PublicPropertyGetPrivateSet), 48); Assert.AreEqual(48, testObject.PublicPropertyGetPrivateSet); objectWrapper.SetPropertyValue(nameof(PublicValueTypeTestClass.PublicPropertyPrivateGetSet), 96); Assert.AreEqual(96, testObject._publicField); // => Setter set the public field value (for check) objectWrapper.SetPropertyValue(nameof(PublicValueTypeTestClass.PublicPropertySet), 192); Assert.AreEqual(192, testObject._publicField); // => Setter set the public field value (for check) // Object wrapper does not provide access to not public members objectWrapper.SetPropertyValue(nameof(PublicValueTypeTestClass.InternalPropertyGetSet), 384); Assert.AreEqual(0, testObject._internalField); objectWrapper.SetPropertyValue("ProtectedPropertyGetSet", 728); Assert.AreEqual(0, testObject.GetProtectedFieldValue()); objectWrapper.SetPropertyValue("PrivatePropertyGetSet", 1536); Assert.AreEqual(0, testObject.GetPrivateFieldValue()); }
public void ObjectWrapperGetMembers() { var testObject = new PublicValueTypeTestClass(); TypeClassifiedMembers classifiedMembers = TypeClassifiedMembers.GetForPublicValueTypeTestObject(); var objectWrapper = new ObjectWrapper(testObject); CollectionAssert.AreEquivalent( classifiedMembers.AllPublicMembers, SelectAllMemberInfos(objectWrapper.Members)); CollectionAssert.AreEquivalent( classifiedMembers.AllPublicMembers, SelectAllMemberInfos(objectWrapper.GetMembers())); #region Local function IEnumerable <MemberInfo> SelectAllMemberInfos(IEnumerable <ImmediateMember> members) { return(members.Select <ImmediateMember, MemberInfo>(member => { if (member is ImmediateField field) { return field.FieldInfo; } if (member is ImmediateProperty property) { return property.PropertyInfo; } throw new InvalidOperationException("Members contain an unexpected value"); })); } #endregion }
public void ObjectWrapperGetPropertyValue_NoGetter() { var testObject = new PublicValueTypeTestClass(); var objectWrapper = new ObjectWrapper(testObject); // ReSharper disable once ReturnValueOfPureMethodIsNotUsed Assert.Throws <ArgumentException>(() => objectWrapper.GetPropertyValue(nameof(PublicValueTypeTestClass.PublicPropertySet))); }
public void ObjectWrapperGetPropertyValue_NotExists() { var testObject = new PublicValueTypeTestClass(); var objectWrapper = new ObjectWrapper(testObject); Assert.IsNull(objectWrapper.GetPropertyValue("NotExists")); }
public void ObjectWrapperSetPropertyValue_NotExists() { var testObject = new PublicValueTypeTestClass(); var objectWrapper = new ObjectWrapper(testObject); // Nothing set but not throw Assert.DoesNotThrow(() => objectWrapper.SetPropertyValue("NotExists", 12)); }
public void ObjectWrapperGetPropertyValue_Static() { var testObject = new PublicValueTypeTestClass(); PublicValueTypeTestClass.PublicStaticPropertyGetSet = 66; var objectWrapper = new ObjectWrapper(testObject); Assert.AreEqual(66, objectWrapper.GetPropertyValue(nameof(PublicValueTypeTestClass.PublicStaticPropertyGetSet))); }
public void ObjectWrapperSetFieldValue_Static() { var testObject = new PublicValueTypeTestClass(); var objectWrapper = new ObjectWrapper(testObject); objectWrapper.SetFieldValue(nameof(PublicValueTypeTestClass._publicStaticField), 36); Assert.AreEqual(36, PublicValueTypeTestClass._publicStaticField); }
public void ObjectWrapperSetPropertyValue_Static() { var testObject = new PublicValueTypeTestClass(); var objectWrapper = new ObjectWrapper(testObject); objectWrapper.SetPropertyValue(nameof(PublicValueTypeTestClass.PublicStaticPropertyGetSet), 77); Assert.AreEqual(77, PublicValueTypeTestClass.PublicStaticPropertyGetSet); }
public void ObjectWrapperGetFieldValue_Static() { var testObject = new PublicValueTypeTestClass(); PublicValueTypeTestClass._publicStaticField = 12; var objectWrapper = new ObjectWrapper(testObject); Assert.AreEqual(12, objectWrapper.GetFieldValue(nameof(PublicValueTypeTestClass._publicStaticField))); }
public void ObjectWrapperGetProperties() { var testObject1 = new PublicValueTypeTestClass(); var testObject2 = new PublicReferenceTypeTestClass(); var objectWrapper1 = new ObjectWrapper(testObject1); CollectionAssert.AreEquivalent(objectWrapper1.Properties, objectWrapper1.GetProperties()); var objectWrapper2 = new ObjectWrapper(testObject2); CollectionAssert.AreNotEquivalent(objectWrapper1.GetProperties(), objectWrapper2.GetProperties()); }
public void ObjectWrapperToString() { var testObject = new PublicValueTypeTestClass(); var testObject2 = new InternalValueTypeTestClass(); var objectWrapper1 = new ObjectWrapper(testObject); Assert.AreEqual(testObject.ToString(), objectWrapper1.ToString()); var objectWrapper2 = new ObjectWrapper(testObject2); Assert.AreNotEqual(objectWrapper1.ToString(), objectWrapper2.ToString()); }
public void ObjectWrapperGetField() { var testObject = new PublicValueTypeTestClass(); var objectWrapper = new ObjectWrapper(testObject); string fieldName = nameof(PublicValueTypeTestClass._publicField); Assert.AreEqual(objectWrapper.Fields[fieldName], objectWrapper.GetField(fieldName)); fieldName = "NotExists"; Assert.IsNull(objectWrapper.GetField(fieldName)); // ReSharper disable once AssignNullToNotNullAttribute // ReSharper disable once ReturnValueOfPureMethodIsNotUsed Assert.Throws <ArgumentNullException>(() => objectWrapper.GetField(null)); }
public void ObjectWrapperGetProperty() { var testObject = new PublicValueTypeTestClass(); var objectWrapper = new ObjectWrapper(testObject); string propertyName = nameof(PublicValueTypeTestClass.PublicPropertyGetSet); Assert.AreEqual(objectWrapper.Properties[propertyName], objectWrapper.GetProperty(propertyName)); propertyName = "NotExists"; Assert.IsNull(objectWrapper.GetProperty(propertyName)); // ReSharper disable once AssignNullToNotNullAttribute // ReSharper disable once ReturnValueOfPureMethodIsNotUsed Assert.Throws <ArgumentNullException>(() => objectWrapper.GetProperty(null)); }
public void ImmediateFieldSetValue_Constant() { var testObject = new PublicValueTypeTestClass(); // Static readonly var immediateField = new ImmediateField(PublicValueTypeStaticReadonlyPublicFieldFieldsInfo); Assert.Throws <FieldAccessException>(() => immediateField.SetValue(testObject, 123456)); Assert.Throws <FieldAccessException>(() => immediateField.SetValue(null, 123456)); // Constant immediateField = new ImmediateField(PublicValueTypeConstPublicFieldFieldsInfo); Assert.Throws <FieldAccessException>(() => immediateField.SetValue(testObject, 123456)); Assert.Throws <FieldAccessException>(() => immediateField.SetValue(null, 123456)); }
public void ImmediateFieldGetValue_Constant() { var testObject = new PublicValueTypeTestClass(); // Static readonly var immediateField = new ImmediateField(PublicValueTypeStaticReadonlyPublicFieldFieldsInfo); Assert.AreEqual(112, immediateField.GetValue(testObject)); Assert.AreEqual(112, immediateField.GetValue(null)); // Constant immediateField = new ImmediateField(PublicValueTypeConstPublicFieldFieldsInfo); Assert.AreEqual(221, immediateField.GetValue(testObject)); Assert.AreEqual(221, immediateField.GetValue(null)); }
public void ObjectWrapperGetFieldValue_NonPublic() { var publicTestObject = new PublicValueTypeTestClass(); var objectWrapper = new ObjectWrapper(publicTestObject); Assert.IsNull(objectWrapper.GetFieldValue(nameof(PublicValueTypeTestClass._internalField))); Assert.IsNull(objectWrapper.GetFieldValue("_protectedField")); Assert.IsNull(objectWrapper.GetFieldValue("_privateField")); var internalTestObject = new InternalValueTypeTestClass(); objectWrapper = new ObjectWrapper(internalTestObject); Assert.IsNull(objectWrapper.GetFieldValue(nameof(InternalValueTypeTestClass._internalField))); Assert.IsNull(objectWrapper.GetFieldValue("_protectedField")); Assert.IsNull(objectWrapper.GetFieldValue("_privateField")); }
public void ObjectWrapperEquality() { var testObject = new PublicValueTypeTestClass(); var testObject2 = new PublicValueTypeTestClass(); var objectWrapper1 = new ObjectWrapper(testObject); var objectWrapper2 = new ObjectWrapper(testObject); Assert.IsTrue(objectWrapper1.Equals(objectWrapper1)); Assert.IsTrue(objectWrapper1.Equals(objectWrapper2)); Assert.IsTrue(objectWrapper1.Equals((object)objectWrapper2)); Assert.IsFalse(objectWrapper1.Equals(null)); var objectWrapper3 = new ObjectWrapper(testObject2); Assert.IsFalse(objectWrapper1.Equals(objectWrapper3)); Assert.IsFalse(objectWrapper1.Equals((object)objectWrapper3)); }
public void ObjectWrapperGetPropertyValue_NonPublic() { var publicTestObject = new PublicValueTypeTestClass(); var objectWrapper = new ObjectWrapper(publicTestObject); Assert.IsNull(objectWrapper.GetPropertyValue(nameof(PublicValueTypeTestClass.InternalPropertyGetSet))); Assert.IsNull(objectWrapper.GetPropertyValue("ProtectedPropertyGetSet")); Assert.IsNull(objectWrapper.GetPropertyValue("PrivatePropertyGetSet")); var internalTestObject = new InternalValueTypeTestClass(); objectWrapper = new ObjectWrapper(internalTestObject); Assert.IsNull(objectWrapper.GetPropertyValue(nameof(InternalValueTypeTestClass.InternalPropertyGetSet))); Assert.IsNull(objectWrapper.GetPropertyValue("ProtectedPropertyGetSet")); Assert.IsNull(objectWrapper.GetPropertyValue("PrivatePropertyGetSet")); }
public void ObjectWrapperSetFieldValue_Class() { var testObject = new PublicValueTypeTestClass(); var objectWrapper = new ObjectWrapper(testObject); objectWrapper.SetFieldValue(nameof(PublicValueTypeTestClass._publicField), 12); Assert.AreEqual(12, testObject._publicField); // Object wrapper does not provide access to not public members objectWrapper.SetFieldValue(nameof(PublicValueTypeTestClass._internalField), 24); Assert.AreEqual(0, testObject._internalField); objectWrapper.SetFieldValue("_protectedField", 48); Assert.AreEqual(0, testObject.GetProtectedFieldValue()); objectWrapper.SetFieldValue("_privateField", 962); Assert.AreEqual(0, testObject.GetPrivateFieldValue()); }
public void ImmediateFieldSetValue_ValueType() { // Value type / Public var publicValueTypeTestObject = new PublicValueTypeTestClass(); var immediateField = new ImmediateField(PublicValueTypePublicFieldFieldsInfo); immediateField.SetValue(publicValueTypeTestObject, 12); Assert.AreEqual(12, publicValueTypeTestObject._publicField); immediateField = new ImmediateField(PublicValueTypeInternalFieldFieldsInfo); immediateField.SetValue(publicValueTypeTestObject, 24); Assert.AreEqual(24, publicValueTypeTestObject._internalField); immediateField = new ImmediateField(PublicValueTypeProtectedFieldFieldsInfo); immediateField.SetValue(publicValueTypeTestObject, 48); Assert.AreEqual(48, publicValueTypeTestObject.GetProtectedFieldValue()); immediateField = new ImmediateField(PublicValueTypePrivateFieldFieldsInfo); immediateField.SetValue(publicValueTypeTestObject, 96); Assert.AreEqual(96, publicValueTypeTestObject.GetPrivateFieldValue()); // Value type / Internal var internalValueTypeTestObject = new InternalValueTypeTestClass(); immediateField = new ImmediateField(InternalValueTypePublicFieldFieldsInfo); immediateField.SetValue(internalValueTypeTestObject, 192); Assert.AreEqual(192, internalValueTypeTestObject._publicField); immediateField = new ImmediateField(InternalValueTypeInternalFieldFieldsInfo); immediateField.SetValue(internalValueTypeTestObject, 384); Assert.AreEqual(384, internalValueTypeTestObject._internalField); immediateField = new ImmediateField(InternalValueTypeProtectedFieldFieldsInfo); immediateField.SetValue(internalValueTypeTestObject, 728); Assert.AreEqual(728, internalValueTypeTestObject.GetProtectedFieldValue()); immediateField = new ImmediateField(InternalValueTypePrivateFieldFieldsInfo); immediateField.SetValue(internalValueTypeTestObject, 1536); Assert.AreEqual(1536, internalValueTypeTestObject.GetPrivateFieldValue()); }
public void GetImmediateTypeFromObject() { object testObject1 = new PublicValueTypeTestClass(); ImmediateType immediateType = ImmediateReflectionExtensions.GetImmediateType(testObject1); Assert.AreEqual(typeof(PublicValueTypeTestClass), immediateType.Type); PublicValueTypeTestClass testObject2 = new PublicValueTypeTestClass(); immediateType = ImmediateReflectionExtensions.GetImmediateType(testObject2); Assert.AreEqual(typeof(PublicValueTypeTestClass), immediateType.Type); TestStruct testObject3 = new TestStruct(); immediateType = ImmediateReflectionExtensions.GetImmediateType(testObject3); Assert.AreEqual(typeof(TestStruct), immediateType.Type); int testObject4 = 12; immediateType = ImmediateReflectionExtensions.GetImmediateType(testObject4); Assert.AreEqual(typeof(int), immediateType.Type); }
public void ObjectWrapperInfo() { var testObject = new PublicValueTypeTestClass(); TypeClassifiedMembers classifiedMembers = TypeClassifiedMembers.GetForPublicValueTypeTestObject(); var objectWrapper = new ObjectWrapper(testObject); Assert.AreSame(testObject, objectWrapper.Object); Assert.AreEqual(typeof(PublicValueTypeTestClass), objectWrapper.Type); Assert.AreEqual( new ImmediateType(typeof(PublicValueTypeTestClass)), objectWrapper.ImmediateType); CollectionAssert.AreEquivalent( classifiedMembers.AllPublicMembers.Select(member => member.Name), objectWrapper.Members.Select(field => field.Name)); CollectionAssert.AreEquivalent( classifiedMembers.PublicInstanceFields.Concat(classifiedMembers.StaticFields).Concat(classifiedMembers.ConstFields), objectWrapper.Fields.Select(field => field.FieldInfo)); CollectionAssert.AreEquivalent( classifiedMembers.PublicInstanceProperties.Concat(classifiedMembers.StaticProperties), objectWrapper.Properties.Select(property => property.PropertyInfo)); }
public void ObjectWrapperHashCode() { var testObject = new PublicValueTypeTestClass(); var testObject2 = new PublicValueTypeTestClass(); var testObject3 = new PublicValueTypeTestClass { PublicPropertyGetSet = 25 }; var objectWrapper1 = new ObjectWrapper(testObject); var objectWrapper2 = new ObjectWrapper(testObject); Assert.AreEqual(testObject.GetHashCode(), objectWrapper1.GetHashCode()); Assert.AreEqual(objectWrapper1.GetHashCode(), objectWrapper2.GetHashCode()); var objectWrapper3 = new ObjectWrapper(testObject2); Assert.AreEqual(testObject2.GetHashCode(), objectWrapper3.GetHashCode()); Assert.AreNotEqual(objectWrapper1.GetHashCode(), objectWrapper3.GetHashCode()); var objectWrapper4 = new ObjectWrapper(testObject3); Assert.AreNotEqual(objectWrapper1.GetHashCode(), objectWrapper4.GetHashCode()); }
public void ObjectWrapperGetMember() { var testObject = new PublicValueTypeTestClass(); var objectWrapper = new ObjectWrapper(testObject); string memberName = nameof(PublicValueTypeTestClass._publicField); Assert.AreEqual(objectWrapper.Fields[memberName], objectWrapper.GetMember(memberName)); Assert.AreEqual(objectWrapper.Fields[memberName], objectWrapper[memberName]); memberName = nameof(PublicValueTypeTestClass.PublicPropertyGet); Assert.AreEqual(objectWrapper.Properties[memberName], objectWrapper.GetMember(memberName)); Assert.AreEqual(objectWrapper.Properties[memberName], objectWrapper[memberName]); memberName = "NotExists"; Assert.IsNull(objectWrapper.GetMember(memberName)); Assert.IsNull(objectWrapper[memberName]); // ReSharper disable AssignNullToNotNullAttribute // ReSharper disable once ReturnValueOfPureMethodIsNotUsed Assert.Throws <ArgumentNullException>(() => objectWrapper.GetMember(null)); // ReSharper disable once UnusedVariable Assert.Throws <ArgumentNullException>(() => { ImmediateMember member = objectWrapper[null]; }); // ReSharper restore AssignNullToNotNullAttribute }