1
1
using System . Collections . Generic ;
2
2
using System . Globalization ;
3
+ using System . Linq . Dynamic . Core . Config ;
3
4
using System . Linq . Dynamic . Core . CustomTypeProviders ;
4
5
using System . Linq . Dynamic . Core . Exceptions ;
5
6
using System . Linq . Dynamic . Core . Tests . Helpers ;
@@ -975,6 +976,21 @@ public void DynamicExpressionParser_ParseLambda_StringLiteralStartEmbeddedQuote_
975
976
Assert . Equal ( "\" \" test\" " , rightValue ) ;
976
977
}
977
978
979
+ [ Theory ] // #786
980
+ [ InlineData ( "Escaped" , "\" {\\ \" PropertyA\\ \" :\\ \" \\ \" }\" " ) ]
981
+ [ InlineData ( "Verbatim" , @"""{\""PropertyA\"":\""\""}""" ) ]
982
+ // [InlineData("Raw", """"{\"PropertyA\":\"\"}"""")] // TODO : does not work ???
983
+ public void DynamicExpressionParser_ParseLambda_StringLiteral_EscapedJson ( string _ , string expression )
984
+ {
985
+ // Act
986
+ var result = DynamicExpressionParser
987
+ . ParseLambda ( typeof ( object ) , expression )
988
+ . Compile ( )
989
+ . DynamicInvoke ( ) ;
990
+
991
+ result . Should ( ) . Be ( "{\" PropertyA\" :\" \" }" ) ;
992
+ }
993
+
978
994
[ Fact ]
979
995
public void DynamicExpressionParser_ParseLambda_StringLiteral_MissingClosingQuote ( )
980
996
{
@@ -1549,7 +1565,10 @@ public void DynamicExpressionParser_ParseLambda_CustomType_Method_With_Expressio
1549
1565
resultIncome . Should ( ) . Be ( "Income == 5" ) ;
1550
1566
1551
1567
// Act : string
1552
- var expressionTextUserName = "StaticHelper.Filter(\" UserName == \" \" x\" \" \" )" ;
1568
+ // Replace " with \"
1569
+ // Replace \" with \\\"
1570
+ StaticHelper . Filter ( "UserName == \" x\" " ) ;
1571
+ var expressionTextUserName = "StaticHelper.Filter(\" UserName == \\ \" x\\ \" \" )" ;
1553
1572
var lambdaUserName = DynamicExpressionParser . ParseLambda ( config , typeof ( User ) , null , expressionTextUserName , user ) ;
1554
1573
var funcUserName = ( Expression < Func < User , string > > ) lambdaUserName ;
1555
1574
@@ -1558,33 +1577,28 @@ public void DynamicExpressionParser_ParseLambda_CustomType_Method_With_Expressio
1558
1577
1559
1578
// Assert : string
1560
1579
resultUserName . Should ( ) . Be ( @"UserName == ""x""" ) ;
1561
- }
1562
1580
1563
- [ Fact ]
1564
- public void DynamicExpressionParser_ParseLambda_CustomType_Method_With_ComplexExpression1String ( )
1565
- {
1566
- // Arrange
1567
- var config = new ParsingConfig
1581
+ // Act : string
1582
+ // Replace " with \"
1583
+ // Replace \" with \"\"
1584
+ var configNonDefault = new ParsingConfig
1568
1585
{
1569
- CustomTypeProvider = new TestCustomTypeProvider ( )
1586
+ CustomTypeProvider = new TestCustomTypeProvider ( ) ,
1587
+ StringLiteralParsing = StringLiteralParsingType . EscapeDoubleQuoteByTwoDoubleQuotes
1570
1588
} ;
1589
+ expressionTextUserName = "StaticHelper.Filter(\" UserName == \" \" x\" \" \" )" ;
1590
+ lambdaUserName = DynamicExpressionParser . ParseLambda ( configNonDefault , typeof ( User ) , null , expressionTextUserName , user ) ;
1591
+ funcUserName = ( Expression < Func < User , string > > ) lambdaUserName ;
1571
1592
1572
- var user = new User ( ) ;
1593
+ delegateUserName = funcUserName . Compile ( ) ;
1594
+ resultUserName = ( string ? ) delegateUserName . DynamicInvoke ( user ) ;
1573
1595
1574
- // Act
1575
- var expressionText = @"StaticHelper.In(Id, StaticHelper.SubSelect(""Identity"", ""LegalPerson"", ""StaticHelper.In(ParentId, StaticHelper.SubSelect(""""LegalPersonId"""", """"PointSiteTD"""", """"Identity = 5"""", """"""""))"", """"))" ;
1576
- var lambda = DynamicExpressionParser . ParseLambda ( config , typeof ( User ) , null , expressionText , user ) ;
1577
- var func = ( Expression < Func < User , bool > > ) lambda ;
1578
-
1579
- var compile = func . Compile ( ) ;
1580
- var result = ( bool ? ) compile . DynamicInvoke ( user ) ;
1581
-
1582
- // Assert
1583
- result . Should ( ) . Be ( false ) ;
1596
+ // Assert : string
1597
+ resultUserName . Should ( ) . Be ( @"UserName == ""x""" ) ;
1584
1598
}
1585
1599
1586
1600
[ Fact ]
1587
- public void DynamicExpressionParser_ParseLambda_CustomType_Method_With_ComplexExpression2String ( )
1601
+ public void DynamicExpressionParser_ParseLambda_CustomType_Method_With_ComplexExpressionString ( )
1588
1602
{
1589
1603
// Arrange
1590
1604
var config = new ParsingConfig
@@ -1594,8 +1608,12 @@ public void DynamicExpressionParser_ParseLambda_CustomType_Method_With_ComplexEx
1594
1608
1595
1609
var user = new User ( ) ;
1596
1610
1611
+ // Replace " with \"
1612
+ // Replace \" with \\\"
1613
+ var _ = StaticHelper . In ( Guid . NewGuid ( ) , StaticHelper . SubSelect ( "Identity" , "LegalPerson" , "StaticHelper.In(ParentId, StaticHelper.SubSelect( \" LegalPersonId\" , \" PointSiteTD\" , \" Identity = 5\" , \" \" )) " , "" ) ) ;
1614
+ var expressionText = "StaticHelper.In(Id, StaticHelper.SubSelect(\" Identity\" , \" LegalPerson\" , \" StaticHelper.In(ParentId, StaticHelper.SubSelect(\\ \" LegalPersonId\\ \" , \\ \" PointSiteTD\\ \" , \\ \" Identity = 5\\ \" , \\ \" \\ \" ))\" , \" \" ))" ;
1615
+
1597
1616
// Act
1598
- var expressionText = @"StaticHelper.In(Id, StaticHelper.SubSelect(""Identity"", ""LegalPerson"", ""StaticHelper.In(ParentId, StaticHelper.SubSelect(""""LegalPersonId"""", """"PointSiteTD"""", """"Identity = "" + StaticHelper.ToExpressionString(StaticHelper.Get(""CurrentPlace""), 2) + """""", """"""""))"", """"))" ;
1599
1617
var lambda = DynamicExpressionParser . ParseLambda ( config , typeof ( User ) , null , expressionText , user ) ;
1600
1618
var func = ( Expression < Func < User , bool > > ) lambda ;
1601
1619
0 commit comments