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); }