Skip to content

Commit 08f7c92

Browse files
authored
Merge pull request #89 from codingseb/dev
Dev
2 parents 08ce89c + f5f9a40 commit 08f7c92

File tree

4 files changed

+114
-25
lines changed

4 files changed

+114
-25
lines changed

CodingSeb.ExpressionEvaluator.Tests/ExpressionEvaluatorTests.cs

Lines changed: 84 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -2158,7 +2158,7 @@ void Evaluator_PreEvaluateVariable(object sender, VariablePreEvaluationEventArg
21582158

21592159
#region Method with params parameter
21602160

2161-
ExpressionEvaluator evaluatorForParamsTests()
2161+
ExpressionEvaluator evaluatorForMethodArgs()
21622162
{
21632163
ExpressionEvaluator ee = new ExpressionEvaluator(new Dictionary<string, object>()
21642164
{
@@ -2169,110 +2169,174 @@ ExpressionEvaluator evaluatorForParamsTests()
21692169
return ee;
21702170
}
21712171

2172-
yield return new TestCaseData(evaluatorForParamsTests()
2172+
yield return new TestCaseData(evaluatorForMethodArgs()
21732173
, "paramsObj.SumOf(1, 2)"
21742174
, null)
21752175
.Returns(3)
21762176
.SetCategory("ParamsKeywordMethod");
21772177

2178-
yield return new TestCaseData(evaluatorForParamsTests()
2178+
yield return new TestCaseData(evaluatorForMethodArgs()
21792179
, "paramsObj.SumOf(1, 2, 3)"
21802180
, null)
21812181
.Returns(6)
21822182
.SetCategory("ParamsKeywordMethod");
21832183

2184-
yield return new TestCaseData(evaluatorForParamsTests()
2184+
yield return new TestCaseData(evaluatorForMethodArgs()
21852185
, "paramsObj.SumOf(1,2,3,4)"
21862186
, null)
21872187
.Returns(10)
21882188
.SetCategory("ParamsKeywordMethod");
21892189

2190-
yield return new TestCaseData(evaluatorForParamsTests()
2190+
yield return new TestCaseData(evaluatorForMethodArgs()
21912191
, "paramsObj.SumOf2()"
21922192
, null)
21932193
.Returns(0)
21942194
.SetCategory("ParamsKeywordMethod");
21952195

2196-
yield return new TestCaseData(evaluatorForParamsTests()
2196+
yield return new TestCaseData(evaluatorForMethodArgs()
21972197
, "paramsObj.SumOf2(1)"
21982198
, null)
21992199
.Returns(1)
22002200
.SetCategory("ParamsKeywordMethod");
22012201

2202-
yield return new TestCaseData(evaluatorForParamsTests()
2202+
yield return new TestCaseData(evaluatorForMethodArgs()
22032203
, "paramsObj.SumOf2(1,2,3,4)"
22042204
, null)
22052205
.Returns(10)
22062206
.SetCategory("ParamsKeywordMethod");
22072207

2208-
yield return new TestCaseData(evaluatorForParamsTests()
2208+
yield return new TestCaseData(evaluatorForMethodArgs()
22092209
, "string.Join(\",\", 2, 3.5, \"Hello\", true)"
22102210
, null)
22112211
.Returns("2,3.5,Hello,True")
22122212
.SetCategory("ParamsKeywordMethod");
22132213

2214-
yield return new TestCaseData(evaluatorForParamsTests()
2214+
yield return new TestCaseData(evaluatorForMethodArgs()
22152215
, "string.Join(\",\", 2, 3.5, null, \"Hello\", true)"
22162216
, null)
22172217
.Returns("2,3.5,,Hello,True")
22182218
.SetCategory("ParamsKeywordMethod");
22192219

2220-
yield return new TestCaseData(evaluatorForParamsTests()
2220+
yield return new TestCaseData(evaluatorForMethodArgs()
22212221
, "\",\".UseAsSepForJoin(2, 3.5, \"Hello\", true)"
22222222
, null)
22232223
.Returns("2,3.5,Hello,True")
22242224
.SetCategory("ParamsKeywordMethod");
22252225

2226-
yield return new TestCaseData(evaluatorForParamsTests()
2226+
yield return new TestCaseData(evaluatorForMethodArgs()
22272227
, "\",\".UseAsSepForJoin(2, 3.5, null, \"Hello\", true)"
22282228
, null)
22292229
.Returns("2,3.5,,Hello,True")
22302230
.SetCategory("ParamsKeywordMethod");
22312231

2232-
yield return new TestCaseData(evaluatorForParamsTests()
2232+
yield return new TestCaseData(evaluatorForMethodArgs()
22332233
, "paramsObj.Join(out x, \",\", 2, 3.5, \"Hello\", true) ?? x"
22342234
, null)
22352235
.Returns("2,3.5,Hello,True")
22362236
.SetCategory("ParamsKeywordMethod");
22372237

2238-
yield return new TestCaseData(evaluatorForParamsTests()
2238+
yield return new TestCaseData(evaluatorForMethodArgs()
22392239
, "paramsObj.Join(out x, \",\", 2, 3.5, null, \"Hello\", true) ?? x"
22402240
, null)
22412241
.Returns("2,3.5,,Hello,True")
22422242
.SetCategory("ParamsKeywordMethod");
22432243

2244-
yield return new TestCaseData(evaluatorForParamsTests()
2244+
yield return new TestCaseData(evaluatorForMethodArgs()
22452245
, "\",\".UseAsSepForJoin(ref string x, 2, 3.5, \"Hello\", true) ?? x"
22462246
, null)
22472247
.Returns("2,3.5,Hello,True")
22482248
.SetCategory("ParamsKeywordMethod");
22492249

2250-
yield return new TestCaseData(evaluatorForParamsTests()
2250+
yield return new TestCaseData(evaluatorForMethodArgs()
22512251
, "\",\".UseAsSepForJoin(ref x, 2, 3.5, null, \"Hello\", true) ?? x"
22522252
, null)
22532253
.Returns("2,3.5,,Hello,True")
22542254
.SetCategory("ParamsKeywordMethod");
22552255

2256-
yield return new TestCaseData(evaluatorForParamsTests()
2256+
yield return new TestCaseData(evaluatorForMethodArgs()
22572257
, "paramsObj.ReturnTrue(2)"
22582258
, null)
22592259
.Returns(true)
22602260
.SetCategory("ParamsKeywordMethod");
2261-
2262-
yield return new TestCaseData(evaluatorForParamsTests()
2261+
2262+
yield return new TestCaseData(evaluatorForMethodArgs()
22632263
, "paramsObj.ReturnTrue(2, \"Hello\")"
22642264
, null)
22652265
.Returns(true)
22662266
.SetCategory("ParamsKeywordMethod");
2267-
2268-
yield return new TestCaseData(evaluatorForParamsTests()
2267+
2268+
yield return new TestCaseData(evaluatorForMethodArgs()
22692269
, "paramsObj.ReturnTrue(2, \"Hello\", \"Test\")"
22702270
, null)
22712271
.Returns(true)
22722272
.SetCategory("ParamsKeywordMethod");
22732273

22742274
#endregion
22752275

2276+
#region Method parameters with default value
2277+
2278+
yield return new TestCaseData(evaluatorForMethodArgs()
2279+
, "paramsObj.GetTheDefaultValue()"
2280+
, null)
2281+
.Returns(10)
2282+
.SetCategory("DefaultValueMethod");
2283+
2284+
yield return new TestCaseData(evaluatorForMethodArgs()
2285+
, "paramsObj.GetTheDefaultValue(15)"
2286+
, null)
2287+
.Returns(15)
2288+
.SetCategory("DefaultValueMethod");
2289+
2290+
yield return new TestCaseData(evaluatorForMethodArgs()
2291+
, "paramsObj.GetTheDefaultValue(\"default value is \")"
2292+
, null)
2293+
.Returns("default value is 20")
2294+
.SetCategory("DefaultValueMethod");
2295+
2296+
yield return new TestCaseData(evaluatorForMethodArgs()
2297+
, "paramsObj.GetTheDefaultValue(\"given value is \", 25)"
2298+
, null)
2299+
.Returns("given value is 25")
2300+
.SetCategory("DefaultValueMethod");
2301+
2302+
yield return new TestCaseData(evaluatorForMethodArgs()
2303+
, "paramsObj.SumOf(out r) ?? r"
2304+
, null)
2305+
.Returns("default value is 30")
2306+
.SetCategory("DefaultValueMethod");
2307+
2308+
yield return new TestCaseData(evaluatorForMethodArgs()
2309+
, "paramsObj.SumOf(out r, \"half default value is \") ?? r"
2310+
, null)
2311+
.Returns("half default value is 30")
2312+
.SetCategory("DefaultValueMethod");
2313+
2314+
yield return new TestCaseData(evaluatorForMethodArgs()
2315+
, "paramsObj.SumOf(out r, \"given value is \", 35) ?? r"
2316+
, null)
2317+
.Returns("given value is 35")
2318+
.SetCategory("DefaultValueMethod");
2319+
2320+
yield return new TestCaseData(evaluatorForMethodArgs()
2321+
, "paramsObj.SumOf()"
2322+
, null)
2323+
.Returns(40)
2324+
.SetCategory("DefaultValueMethod");
2325+
2326+
yield return new TestCaseData(evaluatorForMethodArgs()
2327+
, "paramsObj.SumOf(22)"
2328+
, null)
2329+
.Returns(43)
2330+
.SetCategory("DefaultValueMethod");
2331+
2332+
yield return new TestCaseData(evaluatorForMethodArgs()
2333+
, "paramsObj.SumOf(22, 23)"
2334+
, null)
2335+
.Returns(45)
2336+
.SetCategory("DefaultValueMethod");
2337+
2338+
#endregion
2339+
22762340
#region Bug resolution
22772341

22782342
yield return new TestCaseData(new ExpressionEvaluator()

CodingSeb.ExpressionEvaluator.Tests/TestsUtils/MethodArgKeywordClass.cs

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,26 @@ public bool ReturnTrue(double dValue, params string[] values)
3333
{
3434
return true;
3535
}
36+
37+
public int GetTheDefaultValue(int defaultValue = 10)
38+
{
39+
return defaultValue;
40+
}
41+
42+
public string GetTheDefaultValue(string text, int defaultValue = 20)
43+
{
44+
return text + defaultValue.ToString();
45+
}
46+
47+
public void SumOf(out string result, string text = "default value is ", int defaultValue = 30)
48+
{
49+
result = text + defaultValue.ToString();
50+
}
51+
52+
public int SumOf(int val1 = 19, int val2 = 21)
53+
{
54+
return val1 + val2;
55+
}
3656
}
3757

3858
public static class MethodArgKeywordClassExtension

CodingSeb.ExpressionEvaluator/CodingSeb.ExpressionEvaluator.csproj

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,9 @@
55
<Product>CodingSeb.ExpressionEvaluator</Product>
66
<Description>A Simple Math and Pseudo C# Expression Evaluator in One C# File. Can also execute small C# like scripts</Description>
77
<Copyright>Copyright © Coding Seb 2017</Copyright>
8-
<Version>1.4.21.0</Version>
9-
<AssemblyVersion>1.4.21.0</AssemblyVersion>
10-
<FileVersion>1.4.21.0</FileVersion>
8+
<Version>1.4.22.0</Version>
9+
<AssemblyVersion>1.4.22.0</AssemblyVersion>
10+
<FileVersion>1.4.22.0</FileVersion>
1111
<OutputPath>bin\$(Configuration)\</OutputPath>
1212
<Authors>Coding Seb</Authors>
1313
<PackageId>CodingSeb.ExpressionEvaluator</PackageId>
@@ -19,7 +19,7 @@
1919
<PackageIconUrl>https://github.com/codingseb/ExpressionEvaluator/blob/master/Icon.png?raw=true</PackageIconUrl>
2020
<PackageIcon>Icon.png</PackageIcon>
2121
<PackageRequireLicenseAcceptance>false</PackageRequireLicenseAcceptance>
22-
<PackageReleaseNotes>* Correction of a bug introduced in previous version (Manage implicit cast of method args again)</PackageReleaseNotes>
22+
<PackageReleaseNotes>* Add Support for method call with parameters with default value</PackageReleaseNotes>
2323
<PackageLicenseFile>LICENSE.md</PackageLicenseFile>
2424
<RepositoryUrl>https://github.com/codingseb/ExpressionEvaluator</RepositoryUrl>
2525
</PropertyGroup>

CodingSeb.ExpressionEvaluator/ExpressionEvaluator.cs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
/******************************************************************************************************
22
Title : ExpressionEvaluator (https://github.com/codingseb/ExpressionEvaluator)
3-
Version : 1.4.21.0
3+
Version : 1.4.22.0
44
(if last digit (the forth) is not a zero, the version is an intermediate version and can be unstable)
55
66
Author : Coding Seb
@@ -3172,6 +3172,7 @@ bool parameterValidate(ParameterInfo p) => p.Position >= modifiedArgs.Count
31723172

31733173
bool methodByNameFilter(MethodInfo m) => m.Name.Equals(func, StringComparisonForCasing)
31743174
&& (m.GetParameters().Length == modifiedArgs.Count
3175+
|| (m.GetParameters().Length > modifiedArgs.Count && m.GetParameters().Take(modifiedArgs.Count).All(p => modifiedArgs[p.Position] == null || IsCastable(modifiedArgs[p.Position].GetType(), p.ParameterType)) && m.GetParameters().Skip(modifiedArgs.Count).All(p => p.HasDefaultValue))
31753176
|| (m.GetParameters().Last().IsDefined(typeof(ParamArrayAttribute), false)
31763177
&& m.GetParameters().All(parameterValidate)));
31773178

@@ -3249,6 +3250,10 @@ protected virtual MethodInfo TryToCastMethodParametersToMakeItCallable(MethodInf
32493250
{
32503251
modifiedArgs.Add(Activator.CreateInstance(methodInfoToCast.GetParameters().Last().ParameterType, new object[] { 0 }));
32513252
}
3253+
else if(methodInfoToCast.GetParameters().Length > modifiedArgs.Count)
3254+
{
3255+
modifiedArgs.AddRange(methodInfoToCast.GetParameters().Skip(modifiedArgs.Count).Select(p => p.DefaultValue));
3256+
}
32523257

32533258
for (int a = 0; a < modifiedArgs.Count && parametersCastOK; a++)
32543259
{

0 commit comments

Comments
 (0)