public void Process_ChainedMemberAccess_LongChain_WithNullableValueType() { // Arrange var expected = "TestVal"; var model = new Chain0Model { Chain1 = new Chain1Model { NullableValueTypeModel = new ValueType1 { TestModel = new TestModel { DifferentModel = new DifferentModel { Name = expected } } } } }; var expression = GetExpression <Chain0Model, string>(m => m.Chain1.NullableValueTypeModel.Value.TestModel.DifferentModel.Name); // Act var func = CachedExpressionCompiler.Process(expression); // Assert Assert.NotNull(func); var result = func(model); Assert.Equal(expected, result); }
public void Process_ChainedMemberAccess_LongChain_WithNullValueTypeAccessor() { // Arrange // Chain2 is a value type var model = new Chain0Model { Chain1 = null }; var expression = GetExpression <Chain0Model, string>(m => m.Chain1.ValueTypeModel.TestModel.DifferentModel.Name); // Act var func = CachedExpressionCompiler.Process(expression); // Assert Assert.NotNull(func); var result = func(model); Assert.Null(result); }
public void Process_ChainedMemberAccess_LongChain_WithNullIntermediary() { // Arrange var model = new Chain0Model { Chain1 = new Chain1Model { ValueTypeModel = new ValueType1 { TestModel = null }, } }; var expression = GetExpression <Chain0Model, string>(m => m.Chain1.ValueTypeModel.TestModel.DifferentModel.Name); // Act var func = CachedExpressionCompiler.Process(expression); // Assert Assert2.NotNull(func); var result = func(model); Assert2.Null(result); }