1
- using Newtonsoft . Json . Linq ;
2
- using NFluent ;
3
- using System . Collections . Generic ;
1
+ using System . Collections . Generic ;
4
2
using System . Dynamic ;
5
3
using System . Globalization ;
6
4
using System . Linq . Dynamic . Core . Exceptions ;
7
5
using System . Linq . Dynamic . Core . Tests . Helpers ;
8
6
using System . Linq . Dynamic . Core . Tests . Helpers . Models ;
7
+ using Newtonsoft . Json . Linq ;
8
+ using NFluent ;
9
9
using Xunit ;
10
10
11
11
namespace System . Linq . Dynamic . Core . Tests
@@ -37,6 +37,8 @@ public class TestGuidNullClass
37
37
{
38
38
public Guid ? GuidNull { get ; set ; }
39
39
40
+ public Guid GuidNormal { get ; set ; }
41
+
40
42
public int Id { get ; set ; }
41
43
}
42
44
@@ -1304,11 +1306,87 @@ public void ExpressionTests_NullCoalescing()
1304
1306
Assert . Equal ( expectedResult3 , result3b . ToDynamicArray < int > ( ) ) ;
1305
1307
}
1306
1308
1309
+ [ Theory ]
1310
+ [ InlineData ( "np(g)" , "Select(Param_0 => Param_0.g)" ) ]
1311
+ [ InlineData ( "np(gnullable)" , "Select(Param_0 => Param_0.gnullable)" ) ]
1312
+ [ InlineData ( "np(dt)" , "Select(Param_0 => Param_0.dt)" ) ]
1313
+ [ InlineData ( "np(dtnullable)" , "Select(Param_0 => Param_0.dtnullable)" ) ]
1314
+ [ InlineData ( "np(number)" , "Select(Param_0 => Param_0.number)" ) ]
1315
+ [ InlineData ( "np(nullablenumber)" , "Select(Param_0 => Param_0.nullablenumber)" ) ]
1316
+ [ InlineData ( "np(_enum)" , "Select(Param_0 => Param_0._enum)" ) ]
1317
+ [ InlineData ( "np(_enumnullable)" , "Select(Param_0 => Param_0._enumnullable)" ) ]
1318
+
1319
+ #if NET452
1320
+ [ InlineData ( "np(nested.g)" , "Select(Param_0 => IIF(((Param_0 != null) AndAlso (Param_0.nested != null)), Convert(Param_0.nested.g), null))" ) ]
1321
+ [ InlineData ( "np(nested.dt)" , "Select(Param_0 => IIF(((Param_0 != null) AndAlso (Param_0.nested != null)), Convert(Param_0.nested.dt), null))" ) ]
1322
+ [ InlineData ( "np(nested.number)" , "Select(Param_0 => IIF(((Param_0 != null) AndAlso (Param_0.nested != null)), Convert(Param_0.nested.number), null))" ) ]
1323
+ [ InlineData ( "np(nested._enum)" , "Select(Param_0 => IIF(((Param_0 != null) AndAlso (Param_0.nested != null)), Convert(Param_0.nested._enum), null))" ) ]
1324
+ [ InlineData ( "np(item.Id)" , "Select(Param_0 => IIF(((Param_0 != null) AndAlso (Param_0.item != null)), Convert(Param_0.item.Id), null))" ) ]
1325
+ [ InlineData ( "np(item.GuidNormal)" , "Select(Param_0 => IIF(((Param_0 != null) AndAlso (Param_0.item != null)), Convert(Param_0.item.GuidNormal), null))" ) ]
1326
+ #else
1327
+ [ InlineData ( "np(nested.g)" , "Select(Param_0 => IIF(((Param_0 != null) AndAlso (Param_0.nested != null)), Convert(Param_0.nested.g, Nullable`1), null))" ) ]
1328
+ [ InlineData ( "np(nested.dt)" , "Select(Param_0 => IIF(((Param_0 != null) AndAlso (Param_0.nested != null)), Convert(Param_0.nested.dt, Nullable`1), null))" ) ]
1329
+ [ InlineData ( "np(nested.number)" , "Select(Param_0 => IIF(((Param_0 != null) AndAlso (Param_0.nested != null)), Convert(Param_0.nested.number, Nullable`1), null))" ) ]
1330
+ [ InlineData ( "np(nested._enum)" , "Select(Param_0 => IIF(((Param_0 != null) AndAlso (Param_0.nested != null)), Convert(Param_0.nested._enum, Nullable`1), null))" ) ]
1331
+ [ InlineData ( "np(item.Id)" , "Select(Param_0 => IIF(((Param_0 != null) AndAlso (Param_0.item != null)), Convert(Param_0.item.Id, Nullable`1), null))" ) ]
1332
+ [ InlineData ( "np(item.GuidNormal)" , "Select(Param_0 => IIF(((Param_0 != null) AndAlso (Param_0.item != null)), Convert(Param_0.item.GuidNormal, Nullable`1), null))" ) ]
1333
+ #endif
1334
+
1335
+ [ InlineData ( "np(nested.gnullable)" , "Select(Param_0 => IIF(((Param_0 != null) AndAlso (Param_0.nested != null)), Param_0.nested.gnullable, null))" ) ]
1336
+ [ InlineData ( "np(nested.dtnullable)" , "Select(Param_0 => IIF(((Param_0 != null) AndAlso (Param_0.nested != null)), Param_0.nested.dtnullable, null))" ) ]
1337
+ [ InlineData ( "np(nested.nullablenumber)" , "Select(Param_0 => IIF(((Param_0 != null) AndAlso (Param_0.nested != null)), Param_0.nested.nullablenumber, null))" ) ]
1338
+ [ InlineData ( "np(nested._enumnullable)" , "Select(Param_0 => IIF(((Param_0 != null) AndAlso (Param_0.nested != null)), Param_0.nested._enumnullable, null))" ) ]
1339
+ [ InlineData ( "np(item.GuidNull)" , "Select(Param_0 => IIF(((Param_0 != null) AndAlso (Param_0.item != null)), Param_0.item.GuidNull, null))" ) ]
1340
+ public void ExpressionTests_NullPropagating ( string test , string query )
1341
+ {
1342
+ // Arrange
1343
+ var q = new [ ]
1344
+ {
1345
+ new
1346
+ {
1347
+ g = Guid . NewGuid ( ) ,
1348
+ gnullable = ( Guid ? ) Guid . NewGuid ( ) ,
1349
+ dt = DateTime . Now ,
1350
+ dtnullable = ( DateTime ? ) DateTime . Now ,
1351
+ _enum = TestEnum2 . Var1 ,
1352
+ _enumnullable = ( TestEnum2 ? ) TestEnum2 . Var2 ,
1353
+ number = 1 ,
1354
+ nullablenumber = ( int ? ) 2 ,
1355
+ nested = new
1356
+ {
1357
+ g = Guid . NewGuid ( ) ,
1358
+ gnullable = ( Guid ? ) Guid . NewGuid ( ) ,
1359
+ dt = DateTime . Now ,
1360
+ dtnullable = ( DateTime ? ) DateTime . Now ,
1361
+ _enum = TestEnum2 . Var1 ,
1362
+ _enumnullable = ( TestEnum2 ? ) TestEnum2 . Var2 ,
1363
+ number = 1 ,
1364
+ nullablenumber = ( int ? ) 2 ,
1365
+ } ,
1366
+ item = new TestGuidNullClass
1367
+ {
1368
+ Id = 100 ,
1369
+ GuidNormal = Guid . NewGuid ( ) ,
1370
+ GuidNull = Guid . NewGuid ( )
1371
+ }
1372
+ }
1373
+ } . AsQueryable ( ) ;
1374
+
1375
+ // Act
1376
+ var resultDynamic = q . Select ( test ) ;
1377
+
1378
+ // Assert
1379
+ string queryAsString = resultDynamic . ToString ( ) ;
1380
+ queryAsString = queryAsString . Substring ( queryAsString . IndexOf ( ".Select" ) + 1 ) . TrimEnd ( ']' ) ;
1381
+ Check . That ( queryAsString ) . Equals ( query ) ;
1382
+ }
1383
+
1307
1384
[ Fact ]
1308
- public void ExpressionTests_NullPropagating_DateTime_Value ( )
1385
+ public void ExpressionTests_NullPropagating_DateTime ( )
1309
1386
{
1310
1387
// Arrange
1311
- var q = new [ ] {
1388
+ var q = new [ ]
1389
+ {
1312
1390
new { id = 1 , date1 = ( DateTime ? ) DateTime . Now , date2 = DateTime . Now . AddDays ( - 1 ) }
1313
1391
} . AsQueryable ( ) ;
1314
1392
@@ -1324,7 +1402,8 @@ public void ExpressionTests_NullPropagating_DateTime_Value()
1324
1402
public void ExpressionTests_NullPropagating_NullableDateTime ( )
1325
1403
{
1326
1404
// Arrange
1327
- var q = new [ ] {
1405
+ var q = new [ ]
1406
+ {
1328
1407
new { id = 1 , date1 = ( DateTime ? ) DateTime . Now , date2 = DateTime . Now . AddDays ( - 1 ) }
1329
1408
} . AsQueryable ( ) ;
1330
1409
@@ -1337,7 +1416,7 @@ public void ExpressionTests_NullPropagating_NullableDateTime()
1337
1416
}
1338
1417
1339
1418
[ Fact ]
1340
- public void ExpressionTests_NullPropagating_Integer_Null ( )
1419
+ public void ExpressionTests_NullPropagating_WithoutDefaultValue ( )
1341
1420
{
1342
1421
// Arrange
1343
1422
var testModels = User . GenerateSampleModels ( 2 , true ) . ToList ( ) ;
@@ -1353,7 +1432,7 @@ public void ExpressionTests_NullPropagating_Integer_Null()
1353
1432
}
1354
1433
1355
1434
[ Fact ]
1356
- public void ExpressionTests_NullPropagating_Integer_Value ( )
1435
+ public void ExpressionTests_NullPropagating_WithDefaultValue ( )
1357
1436
{
1358
1437
// Arrange
1359
1438
var testModels = User . GenerateSampleModels ( 2 , true ) . ToList ( ) ;
@@ -1756,24 +1835,24 @@ public void ExpressionTests_Type_StructWithIntegerEquality_BothVariablesInStruct
1756
1835
{
1757
1836
new
1758
1837
{
1759
- Id = new SnowflakeId ( 1L ) ,
1838
+ Id = new SnowflakeId ( 1L ) ,
1760
1839
Var = 1
1761
1840
} ,
1762
1841
new
1763
1842
{
1764
- Id = new SnowflakeId ( 2L ) ,
1843
+ Id = new SnowflakeId ( 2L ) ,
1765
1844
Var = 1
1766
1845
} ,
1767
1846
new
1768
1847
{
1769
- Id = new SnowflakeId ( 1L ) ,
1848
+ Id = new SnowflakeId ( 1L ) ,
1770
1849
Var = 2
1771
1850
}
1772
1851
} . AsQueryable ( ) ;
1773
1852
1774
- var resultValuesL = new [ ] {
1853
+ var resultValuesL = new [ ] {
1775
1854
new {
1776
- Id = new SnowflakeId ( 1L ) ,
1855
+ Id = new SnowflakeId ( 1L ) ,
1777
1856
Var = 1
1778
1857
}
1779
1858
} . AsQueryable ( ) . ToArray ( ) ;
0 commit comments