Skip to content

Commit 1ae6029

Browse files
committed
params keyword method call in progress
1 parent c3ab0f5 commit 1ae6029

File tree

3 files changed

+200
-43
lines changed

3 files changed

+200
-43
lines changed

CodingSeb.ExpressionEvaluator.Tests/ExpressionEvaluatorTests.cs

+110-10
Original file line numberDiff line numberDiff line change
@@ -2143,6 +2143,105 @@ void Evaluator_PreEvaluateVariable(object sender, VariablePreEvaluationEventArg
21432143

21442144
#endregion
21452145

2146+
#region Method with params parameter
2147+
2148+
ExpressionEvaluator evaluatorForParamsTests()
2149+
{
2150+
ExpressionEvaluator ee = new ExpressionEvaluator(new Dictionary<string, object>()
2151+
{
2152+
{ "paramsObj", new MethodArgKeywordClass() }
2153+
});
2154+
2155+
ee.StaticTypesForExtensionsMethods.Add(typeof(MethodArgKeywordClassExtension));
2156+
return ee;
2157+
}
2158+
2159+
yield return new TestCaseData(evaluatorForParamsTests()
2160+
, "paramsObj.SumOf(1, 2)"
2161+
, null)
2162+
.Returns(3)
2163+
.SetCategory("ParamsKeywordMethod");
2164+
2165+
yield return new TestCaseData(evaluatorForParamsTests()
2166+
, "paramsObj.SumOf(1, 2, 3)"
2167+
, null)
2168+
.Returns(6)
2169+
.SetCategory("ParamsKeywordMethod");
2170+
2171+
yield return new TestCaseData(evaluatorForParamsTests()
2172+
, "paramsObj.SumOf(1,2,3,4)"
2173+
, null)
2174+
.Returns(10)
2175+
.SetCategory("ParamsKeywordMethod");
2176+
2177+
yield return new TestCaseData(evaluatorForParamsTests()
2178+
, "paramsObj.SumOf2()"
2179+
, null)
2180+
.Returns(0)
2181+
.SetCategory("ParamsKeywordMethod");
2182+
2183+
yield return new TestCaseData(evaluatorForParamsTests()
2184+
, "paramsObj.SumOf2(1)"
2185+
, null)
2186+
.Returns(1)
2187+
.SetCategory("ParamsKeywordMethod");
2188+
2189+
yield return new TestCaseData(evaluatorForParamsTests()
2190+
, "paramsObj.SumOf2(1,2,3,4)"
2191+
, null)
2192+
.Returns(10)
2193+
.SetCategory("ParamsKeywordMethod");
2194+
2195+
yield return new TestCaseData(evaluatorForParamsTests()
2196+
, "string.Join(\",\", 2, 3.5, \"Hello\", true)"
2197+
, null)
2198+
.Returns("2,3.5,Hello,True")
2199+
.SetCategory("ParamsKeywordMethod");
2200+
2201+
yield return new TestCaseData(evaluatorForParamsTests()
2202+
, "string.Join(\",\", 2, 3.5, null, \"Hello\", true)"
2203+
, null)
2204+
.Returns("2,3.5,,Hello,True")
2205+
.SetCategory("ParamsKeywordMethod");
2206+
2207+
yield return new TestCaseData(evaluatorForParamsTests()
2208+
, "\",\".UseAsSepForJoin(2, 3.5, \"Hello\", true)"
2209+
, null)
2210+
.Returns("2,3.5,Hello,True")
2211+
.SetCategory("ParamsKeywordMethod");
2212+
2213+
yield return new TestCaseData(evaluatorForParamsTests()
2214+
, "\",\".UseAsSepForJoin(2, 3.5, null, \"Hello\", true)"
2215+
, null)
2216+
.Returns("2,3.5,,Hello,True")
2217+
.SetCategory("ParamsKeywordMethod");
2218+
2219+
yield return new TestCaseData(evaluatorForParamsTests()
2220+
, "paramsObj.Join(out x, \",\", 2, 3.5, \"Hello\", true) ?? x"
2221+
, null)
2222+
.Returns("2,3.5,Hello,True")
2223+
.SetCategory("ParamsKeywordMethod");
2224+
2225+
yield return new TestCaseData(evaluatorForParamsTests()
2226+
, "paramsObj.Join(out x, \",\", 2, 3.5, null, \"Hello\", true) ?? x"
2227+
, null)
2228+
.Returns("2,3.5,,Hello,True")
2229+
.SetCategory("ParamsKeywordMethod");
2230+
2231+
yield return new TestCaseData(evaluatorForParamsTests()
2232+
, "\",\".UseAsSepForJoin(ref string x, 2, 3.5, \"Hello\", true) ?? x"
2233+
, null)
2234+
.Returns("2,3.5,Hello,True")
2235+
.SetCategory("ParamsKeywordMethod");
2236+
2237+
yield return new TestCaseData(evaluatorForParamsTests()
2238+
, "\",\".UseAsSepForJoin(ref x, 2, 3.5, null, \"Hello\", true) ?? x"
2239+
, null)
2240+
.Returns("2,3.5,,Hello,True")
2241+
.SetCategory("ParamsKeywordMethod");
2242+
2243+
#endregion
2244+
21462245
#region Bug resolution
21472246

21482247
yield return new TestCaseData(new ExpressionEvaluator()
@@ -2380,11 +2479,11 @@ public void MethodWithInParameter()
23802479
{
23812480
ExpressionEvaluator evaluator = new ExpressionEvaluator();
23822481

2383-
evaluator.Variables["refObj"] = new MethodArgKeywordClass();
2482+
evaluator.Variables["inObj"] = new MethodArgKeywordClass();
23842483

23852484
evaluator.Variables["x"] = 3;
23862485

2387-
evaluator.Evaluate("refObj.AddOneOnIn(in x)")
2486+
evaluator.Evaluate("inObj.AddOneOnIn(in x)")
23882487
.ShouldBe(4);
23892488

23902489
evaluator.Variables.ShouldContainKey("x");
@@ -2399,9 +2498,9 @@ public void MethodWithInParameterWithoutExistingVariable()
23992498
{
24002499
ExpressionEvaluator evaluator = new ExpressionEvaluator();
24012500

2402-
evaluator.Variables["refObj"] = new MethodArgKeywordClass();
2501+
evaluator.Variables["inObj"] = new MethodArgKeywordClass();
24032502

2404-
evaluator.Evaluate("refObj.AddOneOnIn(in x)")
2503+
evaluator.Evaluate("inObj.AddOneOnIn(in x)")
24052504
.ShouldBe(1);
24062505

24072506
evaluator.Variables.ShouldContainKey("x");
@@ -2415,9 +2514,9 @@ public void MethodWithInParameterInlineVarDeclaration()
24152514
{
24162515
ExpressionEvaluator evaluator = new ExpressionEvaluator();
24172516

2418-
evaluator.Variables["refObj"] = new MethodArgKeywordClass();
2517+
evaluator.Variables["inObj"] = new MethodArgKeywordClass();
24192518

2420-
evaluator.Evaluate("refObj.AddOneOnIn(in int x)")
2519+
evaluator.Evaluate("inObj.AddOneOnIn(in int x)")
24212520
.ShouldBe(1);
24222521

24232522
evaluator.Variables.ShouldContainKey("x");
@@ -2432,9 +2531,9 @@ public void MethodWithInParameterWithoutExistingVariableAndInit()
24322531
{
24332532
ExpressionEvaluator evaluator = new ExpressionEvaluator();
24342533

2435-
evaluator.Variables["refObj"] = new MethodArgKeywordClass();
2534+
evaluator.Variables["inObj"] = new MethodArgKeywordClass();
24362535

2437-
evaluator.Evaluate("refObj.AddOneOnIn(in x = 4)")
2536+
evaluator.Evaluate("inObj.AddOneOnIn(in x = 4)")
24382537
.ShouldBe(5);
24392538

24402539
evaluator.Variables.ShouldContainKey("x");
@@ -2449,9 +2548,9 @@ public void MethodWithInParameterInlineVarDeclarationAndInit()
24492548
{
24502549
ExpressionEvaluator evaluator = new ExpressionEvaluator();
24512550

2452-
evaluator.Variables["refObj"] = new MethodArgKeywordClass();
2551+
evaluator.Variables["inObj"] = new MethodArgKeywordClass();
24532552

2454-
evaluator.Evaluate("refObj.AddOneOnIn(in int x = 6)")
2553+
evaluator.Evaluate("inObj.AddOneOnIn(in int x = 6)")
24552554
.ShouldBe(7);
24562555

24572556
evaluator.Variables.ShouldContainKey("x");
@@ -2461,5 +2560,6 @@ public void MethodWithInParameterInlineVarDeclarationAndInit()
24612560
}
24622561

24632562
#endregion
2563+
24642564
}
24652565
}

CodingSeb.ExpressionEvaluator.Tests/TestsUtils/MethodArgKeywordClass.cs

+31-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1-
namespace CodingSeb.ExpressionEvaluator.Tests
1+
using System.Linq;
2+
3+
namespace CodingSeb.ExpressionEvaluator.Tests
24
{
35
public class MethodArgKeywordClass
46
{
@@ -11,5 +13,33 @@ public int AddOneOnIn(in int i)
1113
{
1214
return i + 1;
1315
}
16+
17+
public int SumOf(int val1, int val2, params int[] otherVals)
18+
{
19+
return val1 + val2 + otherVals.Sum();
20+
}
21+
22+
public int SumOf2(params int[] otherVals)
23+
{
24+
return otherVals.Sum();
25+
}
26+
27+
public void Join(out string result, string separator, params object[] values)
28+
{
29+
result = string.Join(separator, values);
30+
}
31+
}
32+
33+
public static class MethodArgKeywordClassExtension
34+
{
35+
public static string UseAsSepForJoin(this string separator, params object[] values)
36+
{
37+
return string.Join(separator, values);
38+
}
39+
40+
public static void UseAsSepForJoin(this string separator, ref string result, params object[] values)
41+
{
42+
result = string.Join(separator, values);
43+
}
1444
}
1545
}

0 commit comments

Comments
 (0)