Skip to content

Commit 37795c5

Browse files
authored
Add extra unit test for calling methods on a string property (#811)
1 parent cb77861 commit 37795c5

File tree

1 file changed

+36
-5
lines changed

1 file changed

+36
-5
lines changed

test/System.Linq.Dynamic.Core.Tests/DynamicExpressionParserTests.cs

+36-5
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,9 @@ public void Bar()
4848
Name = nameof(Foo);
4949
}
5050

51-
public string Name { get; set; }
51+
public string? Name { get; set; }
52+
53+
public string? Description { get; set; }
5254

5355
public MyClass Child { get; set; }
5456
}
@@ -1683,24 +1685,53 @@ public void DynamicExpressionParser_ParseLambda_StringEquals_WithCombinedConditi
16831685

16841686
// #803
16851687
[Fact]
1686-
public void DynamicExpressionParser_ParseLambda_StringEquals_WithConstantString()
1688+
public void DynamicExpressionParser_ParseLambda_Calling_Equals_On_ConstantString()
16871689
{
16881690
// Arrange
16891691
var parameters = new[]
16901692
{
16911693
Expression.Parameter(typeof(MyClass), "myClass")
16921694
};
16931695

1694-
var invokerArguments = new List<object>
1696+
var invokerArguments = new object[]
16951697
{
16961698
new MyClass { Name = "Foo" }
16971699
};
16981700

16991701
// Act
1700-
var expression = "Name == \"test\" || \"foo\".Equals(it.Name, StringComparison.OrdinalIgnoreCase)";
1702+
var expression = "Name == \"test\" || Name.ToLower() == \"abc\" or \"foo\".Equals(it.Name, StringComparison.OrdinalIgnoreCase)";
17011703
var lambdaExpression = DynamicExpressionParser.ParseLambda(parameters, null, expression);
17021704
var del = lambdaExpression.Compile();
1703-
var result = del.DynamicInvoke(invokerArguments.ToArray());
1705+
var result = del.DynamicInvoke(invokerArguments);
1706+
1707+
// Assert
1708+
result.Should().Be(true);
1709+
}
1710+
1711+
// #810
1712+
[Fact]
1713+
public void DynamicExpressionParser_ParseLambda_Calling_ToLower_On_String()
1714+
{
1715+
// Arrange
1716+
var parameters = new[]
1717+
{
1718+
Expression.Parameter(typeof(MyClass), "myClass")
1719+
};
1720+
1721+
var invokerArguments = new object[]
1722+
{
1723+
new MyClass
1724+
{
1725+
Name = "Foo",
1726+
Description = "Bar"
1727+
}
1728+
};
1729+
1730+
// Act
1731+
var expression = "(Name != null && Convert.ToString(Name).ToLower().Contains(\"foo\")) or (Description != null && Convert.ToString(Description).ToLower().Contains(\"bar\"))";
1732+
var lambdaExpression = DynamicExpressionParser.ParseLambda(parameters, null, expression);
1733+
var del = lambdaExpression.Compile();
1734+
var result = del.DynamicInvoke(invokerArguments);
17041735

17051736
// Assert
17061737
result.Should().Be(true);

0 commit comments

Comments
 (0)