public void Create_WhenDoubleAndSinglePropertiesAreSpecified_TheAssignmentIsCorrect(double doubleValue, float singleValue) { // arrange var doubleProperty = typeof(PropertyExpressionTestClass).GetProperty(Utils.GetPropertyName<PropertyExpressionTestClass, double>(p => p.PropDouble)); var mergeResultDouble = new MemberMergeResult<PropertyInfo>(doubleProperty); var floatProperty = typeof(PropertyExpressionTestClass).GetProperty(Utils.GetPropertyName<PropertyExpressionTestClass, float>(p => p.PropFloat)); var mergeResultFloat = new MemberMergeResult<PropertyInfo>(floatProperty); var propertyExpressionBuilder = new PropertyExpressionBuilder(this.SourceParameterExpression, this.DestinationParameterExpression); var properties = new[] { mergeResultDouble, mergeResultFloat }; // act var propertyBlockExpressionBuilder = new MemberBlockExpressionBuilder<PropertyInfo>(propertyExpressionBuilder); var blockExpression = propertyBlockExpressionBuilder.Create<PropertyExpressionTestClass, PropertyExpressionTestClass>(properties); // assert var action = Expression.Lambda<Action<PropertyExpressionTestClass, PropertyExpressionTestClass>>(blockExpression, this.SourceParameterExpression, this.DestinationParameterExpression).Compile(); PropertyExpressionTestClass sourceObject = new PropertyExpressionTestClass { PropDouble = doubleValue, PropFloat = singleValue }; var destinationObject = new PropertyExpressionTestClass(); action.Invoke(sourceObject, destinationObject); Assert.Equal(doubleValue, destinationObject.PropDouble); Assert.Equal(singleValue, destinationObject.PropFloat); }
public void Create_WhenThePropertiesAreSpecified_TheAssignmentIsCorrect() { // arrange var stringProperty = typeof (PropertyExpressionTestClass).GetProperty(Utils.GetPropertyName<PropertyExpressionTestClass, string>(p => p.PropString)); var mergeResultString = new MemberMergeResult<PropertyInfo>(stringProperty); var intProperty = typeof(PropertyExpressionTestClass).GetProperty(Utils.GetPropertyName<PropertyExpressionTestClass, int>(p => p.PropInt)); var mergeResultInt = new MemberMergeResult<PropertyInfo>(intProperty); var propertyExpressionBuilder = new PropertyExpressionBuilder(this.SourceParameterExpression, this.DestinationParameterExpression); var properties = new[] {mergeResultString, mergeResultInt}; // act var propertyBlockExpressionBuilder = new MemberBlockExpressionBuilder<PropertyInfo>(propertyExpressionBuilder); var blockExpression = propertyBlockExpressionBuilder.Create<PropertyExpressionTestClass, PropertyExpressionTestClass>(properties); // assert string propStringValue = "Odin"; int propIntValue = int.MinValue; var action = Expression.Lambda<Action<PropertyExpressionTestClass, PropertyExpressionTestClass>>(blockExpression, this.SourceParameterExpression, this.DestinationParameterExpression).Compile(); PropertyExpressionTestClass sourceObject = new PropertyExpressionTestClass {PropString = propStringValue, PropInt = propIntValue}; var destinationObject = new PropertyExpressionTestClass(); action.Invoke(sourceObject, destinationObject); Assert.Equal(propStringValue, destinationObject.PropString); Assert.Equal(propIntValue, destinationObject.PropInt); }
public void Create_WhenDoubleAndSingleFieldsAreSpecified_TheAssignmentIsCorrect(double doubleValue, float singleValue) { // arrange var doubleField = typeof(FieldExpressionTestClass).GetField(Utils.GetFieldName<FieldExpressionTestClass, double>(p => p.FieldDouble)); var mergeResultDouble = new MemberMergeResult<FieldInfo>(doubleField); var floatField = typeof(FieldExpressionTestClass).GetField(Utils.GetFieldName<FieldExpressionTestClass, float>(p => p.FieldFloat)); var mergeResultFloat = new MemberMergeResult<FieldInfo>(floatField); var fieldExpressionBuilder = new FieldExpressionBuilder(this.SourceParameterExpression, this.DestinationParameterExpression); var fields = new[] { mergeResultDouble, mergeResultFloat }; // act var fieldBlockExpressionBuilder = new MemberBlockExpressionBuilder<FieldInfo>(fieldExpressionBuilder); var blockExpression = fieldBlockExpressionBuilder.Create<FieldExpressionTestClass, FieldExpressionTestClass>(fields); // assert var action = Expression.Lambda<Action<FieldExpressionTestClass, FieldExpressionTestClass>>(blockExpression, this.SourceParameterExpression, this.DestinationParameterExpression).Compile(); FieldExpressionTestClass sourceObject = new FieldExpressionTestClass { FieldDouble = doubleValue, FieldFloat = singleValue }; var destinationObject = new FieldExpressionTestClass(); action.Invoke(sourceObject, destinationObject); Assert.Equal(doubleValue, destinationObject.FieldDouble); Assert.Equal(singleValue, destinationObject.FieldFloat); }
public void Create_WhenTheFieldsAreSpecified_TheAssignmentIsCorrect() { // arrange var stringField = typeof(FieldExpressionTestClass).GetField(Utils.GetFieldName<FieldExpressionTestClass, string>(p => p.FieldString)); var mergeResultString = new MemberMergeResult<FieldInfo>(stringField); var intField = typeof(FieldExpressionTestClass).GetField(Utils.GetFieldName<FieldExpressionTestClass, int>(p => p.FieldInt)); var mergeResultInt = new MemberMergeResult<FieldInfo>(intField); var fieldExpressionBuilder = new FieldExpressionBuilder(this.SourceParameterExpression, this.DestinationParameterExpression); var fields = new[] { mergeResultString, mergeResultInt }; // act var fieldBlockExpressionBuilder = new MemberBlockExpressionBuilder<FieldInfo>(fieldExpressionBuilder); var blockExpression = fieldBlockExpressionBuilder.Create<FieldExpressionTestClass, FieldExpressionTestClass>(fields); // assert string fieldStringValue = "Thor"; int fieldIntValue = int.MaxValue; var action = Expression.Lambda<Action<FieldExpressionTestClass, FieldExpressionTestClass>>(blockExpression, this.SourceParameterExpression, this.DestinationParameterExpression).Compile(); FieldExpressionTestClass sourceObject = new FieldExpressionTestClass { FieldString = fieldStringValue, FieldInt = fieldIntValue }; var destinationObject = new FieldExpressionTestClass(); action.Invoke(sourceObject, destinationObject); Assert.Equal(fieldStringValue, destinationObject.FieldString); Assert.Equal(fieldIntValue, destinationObject.FieldInt); }
public void Create_WhenTheFieldTypeIsInt32_TheAssignmentExpressionIsCorrect(int fieldValue) { string fieldName = Utils.GetFieldName<FieldExpressionTestClass, int>(p => p.FieldInt); var fieldExpressionBuilder = new FieldExpressionBuilder(this.SourceParameterExpression, this.DestinationParameterExpression); var mergeResult = new MemberMergeResult<FieldInfo>(typeof(FieldExpressionTestClass).GetField(fieldName)); Expression assignmentExpression = fieldExpressionBuilder.Create<FieldExpressionTestClass, FieldExpressionTestClass>(mergeResult); BlockExpression blockExpression = Expression.Block(assignmentExpression); var action = Expression.Lambda<Action<FieldExpressionTestClass, FieldExpressionTestClass>>(blockExpression, this.SourceParameterExpression, this.DestinationParameterExpression).Compile(); FieldExpressionTestClass sourceObject = new FieldExpressionTestClass { FieldInt = fieldValue }; var destinationObject = new FieldExpressionTestClass(); action.Invoke(sourceObject, destinationObject); Assert.Equal(fieldValue, destinationObject.FieldInt); }