Skip to content

Commit a1cbd00

Browse files
committed
Unittests for #71 and #83
1 parent 58478c1 commit a1cbd00

File tree

3 files changed

+127
-27
lines changed

3 files changed

+127
-27
lines changed

src/System.Linq.Dynamic.Core/ExpressionParser.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -2633,7 +2633,7 @@ string GetIdentifier()
26332633

26342634
Exception ParseError(string format, params object[] args)
26352635
{
2636-
return ParseError(_textParser.CurrentToken.Pos, format, args);
2636+
return ParseError(_textParser?.CurrentToken.Pos ?? 0, format, args);
26372637
}
26382638

26392639
static Exception ParseError(int pos, string format, params object[] args)

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

+16
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,22 @@ private class ComplexParseLambda1Result
2323
public int TotalIncome;
2424
}
2525

26+
[Fact]
27+
public void ParseLambda_DuplicateParameterNames_ThrowsException()
28+
{
29+
// Arrange
30+
var parameters = new[]
31+
{
32+
Expression.Parameter(typeof(int), "x"),
33+
Expression.Parameter(typeof(int), "x")
34+
};
35+
36+
// Act and Assert
37+
Check.ThatCode(() => DynamicExpressionParser.ParseLambda(parameters, typeof(bool), "it == 42"))
38+
.Throws<ParseException>()
39+
.WithMessage("The identifier 'x' was defined more than once");
40+
}
41+
2642
[Fact]
2743
public void ParseLambda_EmptyParameterList()
2844
{

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

+110-26
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,60 @@ namespace System.Linq.Dynamic.Core.Tests
1212
{
1313
public class ExpressionTests
1414
{
15+
public enum TestEnum2 : sbyte
16+
{
17+
Var1 = 0,
18+
Var2 = 1,
19+
Var3 = 2,
20+
Var4 = 4,
21+
Var5 = 8,
22+
Var6 = 16,
23+
}
24+
25+
public class TestEnumClass
26+
{
27+
public TestEnum A { get; set; }
28+
29+
public TestEnum2 B { get; set; }
30+
31+
public int Id { get; set; }
32+
}
33+
34+
public class TestGuidNullClass
35+
{
36+
public Guid? GuidNull { get; set; }
37+
38+
public int Id { get; set; }
39+
}
40+
41+
[Fact]
42+
public void ExpressionTests_Add_Number()
43+
{
44+
//Arrange
45+
var values = new[] { -1, 2 }.AsQueryable();
46+
47+
//Act
48+
var result = values.Select<int>("it + 1");
49+
var expected = values.Select(i => i + 1);
50+
51+
//Assert
52+
Check.That(result).ContainsExactly(expected);
53+
}
54+
55+
[Fact]
56+
public void ExpressionTests_Add_String()
57+
{
58+
//Arrange
59+
var values = new[] { "a", "b" }.AsQueryable();
60+
61+
//Act
62+
var result = values.Select<string>("it + \"z\"");
63+
var expected = values.Select(i => i + "z");
64+
65+
//Assert
66+
Check.That(result).ContainsExactly(expected);
67+
}
68+
1569
[Fact]
1670
public void ExpressionTests_ArrayInitializer()
1771
{
@@ -34,25 +88,6 @@ public void ExpressionTests_ArrayInitializer()
3488
Assert.Throws<ParseException>(() => list.AsQueryable().SelectMany("new] {}"));
3589
}
3690

37-
public enum TestEnum2 : sbyte
38-
{
39-
Var1 = 0,
40-
Var2 = 1,
41-
Var3 = 2,
42-
Var4 = 4,
43-
Var5 = 8,
44-
Var6 = 16,
45-
}
46-
47-
public class TestEnumClass
48-
{
49-
public TestEnum A { get; set; }
50-
51-
public TestEnum2 B { get; set; }
52-
53-
public int Id { get; set; }
54-
}
55-
5691
[Fact]
5792
public void ExpressionTests_BinaryAndNumericConvert()
5893
{
@@ -379,6 +414,20 @@ public void ExpressionTests_DistinctBy()
379414
Assert.Equal(qry3.Count(), 2);
380415
}
381416

417+
[Fact]
418+
public void ExpressionTests_Divide_Number()
419+
{
420+
//Arrange
421+
var values = new[] { -10, 20 }.AsQueryable();
422+
423+
//Act
424+
var result = values.Select<int>("it / 10");
425+
var expected = values.Select(i => i / 10);
426+
427+
//Assert
428+
Check.That(result).ContainsExactly(expected);
429+
}
430+
382431
[Fact]
383432
public void ExpressionTests_Double()
384433
{
@@ -684,13 +733,6 @@ public void ExpressionTests_GuidNullable_CompareTo_GuidNullable()
684733
Assert.Equal(testValue, resultb.Single());
685734
}
686735

687-
public class TestGuidNullClass
688-
{
689-
public Guid? GuidNull { get; set; }
690-
691-
public int Id { get; set; }
692-
}
693-
694736
[Fact]
695737
public void ExpressionTests_Guid_CompareTo_Null()
696738
{
@@ -1108,6 +1150,34 @@ public void ExpressionTests_Method_OneParam_With_user()
11081150
Assert.Equal(expected.Count(), result.Count());
11091151
}
11101152

1153+
[Fact]
1154+
public void ExpressionTests_Modulo_Number()
1155+
{
1156+
//Arrange
1157+
var values = new[] { -10, 20 }.AsQueryable();
1158+
1159+
//Act
1160+
var result = values.Select<int>("it % 3");
1161+
var expected = values.Select(i => i % 3);
1162+
1163+
//Assert
1164+
Check.That(result).ContainsExactly(expected);
1165+
}
1166+
1167+
[Fact]
1168+
public void ExpressionTests_Multiply_Number()
1169+
{
1170+
//Arrange
1171+
var values = new[] { -1, 2 }.AsQueryable();
1172+
1173+
//Act
1174+
var result = values.Select<int>("it * 10");
1175+
var expected = values.Select(i => i * 10);
1176+
1177+
//Assert
1178+
Check.That(result).ContainsExactly(expected);
1179+
}
1180+
11111181
[Fact]
11121182
public void ExpressionTests_NullCoalescing()
11131183
{
@@ -1295,6 +1365,20 @@ public void ExpressionTests_StringConcatenation()
12951365
Assert.Equal("FirstNamex y", resultAddWithAmpAndParams.First());
12961366
}
12971367

1368+
[Fact]
1369+
public void ExpressionTests_Subtract_Number()
1370+
{
1371+
//Arrange
1372+
var values = new[] { -1, 2 }.AsQueryable();
1373+
1374+
//Act
1375+
var result = values.Select<int>("it - 10");
1376+
var expected = values.Select(i => i - 10);
1377+
1378+
//Assert
1379+
Check.That(result).ContainsExactly(expected);
1380+
}
1381+
12981382
[Fact]
12991383
public void ExpressionTests_Sum()
13001384
{

0 commit comments

Comments
 (0)