Skip to content

Commit f207474

Browse files
author
Sébastien Geiser
committed
Static on the flies in progress
1 parent 7e84788 commit f207474

File tree

2 files changed

+53
-23
lines changed

2 files changed

+53
-23
lines changed

CodingSeb.ExpressionEvaluator.Tests/ExpressionEvaluatorTests.cs

Lines changed: 48 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1563,20 +1563,30 @@ public static IEnumerable<TestCaseData> TestCasesEvaluateWithSpecificEvaluator
15631563

15641564
#endregion
15651565

1566-
#region Onthefly events (Pre events and/or Generics)
1566+
#region Onthefly events (Pre events and/or Generics and/or Static)
15671567

1568-
ExpressionEvaluator evaluatorOnTheFlyGenericTypes = new ExpressionEvaluator();
1568+
ExpressionEvaluator evaluatorOnTheFlies = new ExpressionEvaluator();
1569+
1570+
evaluatorOnTheFlies.Namespaces.Add("CodingSeb.ExpressionEvaluator.Tests");
15691571

15701572
void VariableEval(object sender, VariableEvaluationEventArg e)
15711573
{
15721574
if(e.Name.Equals("GetSpecifiedGenericTypesVar"))
15731575
e.Value = e.EvaluateGenericTypes();
1576+
else if (e.This is ClassOrTypeName classOrTypeName && classOrTypeName.Type == typeof(ClassForTest1) && e.Name.Equals("OnTheFlyStaticVar"))
1577+
{
1578+
e.Value = 10;
1579+
}
15741580
}
15751581

15761582
void FunctionEval(object sender, FunctionEvaluationEventArg e)
15771583
{
15781584
if (e.Name.Equals("GetSpecifiedGenericTypesFunc"))
15791585
e.Value = e.EvaluateGenericTypes();
1586+
else if (e.This is ClassOrTypeName classOrTypeName && classOrTypeName.Type == typeof(ClassForTest1) && e.Name.Equals("OnTheFlyStaticFunc"))
1587+
{
1588+
e.Value = 8;
1589+
}
15801590
}
15811591

15821592
void Evaluator_PreEvaluateFunction(object sender, FunctionPreEvaluationEventArg e)
@@ -1590,6 +1600,10 @@ void Evaluator_PreEvaluateFunction(object sender, FunctionPreEvaluationEventArg
15901600
// e.EvaluateGenericTypes() return a Type[]
15911601
e.Value = e.EvaluateGenericTypes()[0].Namespace;
15921602
}
1603+
else if (e.This is ClassOrTypeName classOrTypeName && classOrTypeName.Type == typeof(ClassForTest1) && e.Name.Equals("OnTheFlyStaticPreVar"))
1604+
{
1605+
e.Value = 15;
1606+
}
15931607
}
15941608

15951609
void Evaluator_PreEvaluateVariable(object sender, VariablePreEvaluationEventArg e)
@@ -1603,49 +1617,65 @@ void Evaluator_PreEvaluateVariable(object sender, VariablePreEvaluationEventArg
16031617
// e.EvaluateGenericTypes() return a Type[]
16041618
e.Value = e.EvaluateGenericTypes()[0].Assembly.GetName().Name;
16051619
}
1620+
else if (e.This is ClassOrTypeName classOrTypeName && classOrTypeName.Type == typeof(ClassForTest1) && e.Name.Equals("OnTheFlyStaticPreFunc"))
1621+
{
1622+
e.Value = 3;
1623+
}
16061624
}
16071625

1608-
evaluatorOnTheFlyGenericTypes.EvaluateVariable += VariableEval;
1609-
evaluatorOnTheFlyGenericTypes.EvaluateFunction += FunctionEval;
1626+
evaluatorOnTheFlies.EvaluateVariable += VariableEval;
1627+
evaluatorOnTheFlies.EvaluateFunction += FunctionEval;
16101628

1611-
evaluatorOnTheFlyGenericTypes.PreEvaluateVariable += Evaluator_PreEvaluateVariable;
1612-
evaluatorOnTheFlyGenericTypes.PreEvaluateFunction += Evaluator_PreEvaluateFunction;
1629+
evaluatorOnTheFlies.PreEvaluateVariable += Evaluator_PreEvaluateVariable;
1630+
evaluatorOnTheFlies.PreEvaluateFunction += Evaluator_PreEvaluateFunction;
16131631

1614-
yield return new TestCaseData(evaluatorOnTheFlyGenericTypes
1632+
yield return new TestCaseData(evaluatorOnTheFlies
16151633
, "GetSpecifiedGenericTypesFunc<string>()[0]")
16161634
.Returns(typeof(string))
16171635
.SetCategory("On the fly func")
16181636
.SetCategory("GenericTypes");
16191637

1620-
yield return new TestCaseData(evaluatorOnTheFlyGenericTypes
1638+
yield return new TestCaseData(evaluatorOnTheFlies
16211639
, "GetSpecifiedGenericTypesVar<string>[0]")
16221640
.Returns(typeof(string))
16231641
.SetCategory("On the fly var")
16241642
.SetCategory("GenericTypes");
16251643

1626-
yield return new TestCaseData(evaluatorOnTheFlyGenericTypes
1644+
yield return new TestCaseData(evaluatorOnTheFlies
16271645
, "GetSpecifiedGenericTypesFunc<string, List<int>>()[1]")
16281646
.Returns(typeof(List<int>))
16291647
.SetCategory("On the fly func")
16301648
.SetCategory("GenericTypes");
16311649

1632-
yield return new TestCaseData(evaluatorOnTheFlyGenericTypes
1650+
yield return new TestCaseData(evaluatorOnTheFlies
16331651
, "GetSpecifiedGenericTypesVar<string, List<int>>[1]")
16341652
.Returns(typeof(List<int>))
16351653
.SetCategory("On the fly var")
16361654
.SetCategory("GenericTypes");
16371655

1638-
yield return new TestCaseData(evaluatorOnTheFlyGenericTypes
1639-
, "GenericNamespace<List<string>>()")
1640-
.Returns("System.Collections.Generic")
1656+
yield return new TestCaseData(evaluatorOnTheFlies
1657+
, "ClassForTest1.OnTheFlyStaticFunc()")
1658+
.Returns(5)
16411659
.SetCategory("On the fly func")
1642-
.SetCategory("GenericTypes");
1660+
.SetCategory("Static Onthefly");
16431661

1644-
yield return new TestCaseData(evaluatorOnTheFlyGenericTypes
1645-
, "GenericAssembly<string>")
1646-
.Returns("mscorlib")
1662+
yield return new TestCaseData(evaluatorOnTheFlies
1663+
, "ClassForTest1.OnTheFlyStaticVar")
1664+
.Returns(5)
16471665
.SetCategory("On the fly var")
1648-
.SetCategory("GenericTypes");
1666+
.SetCategory("Static Onthefly");
1667+
1668+
yield return new TestCaseData(evaluatorOnTheFlies
1669+
, "ClassForTest1.OnTheFlyStaticPreFunc()")
1670+
.Returns(5)
1671+
.SetCategory("On the fly func")
1672+
.SetCategory("Static Onthefly");
1673+
1674+
yield return new TestCaseData(evaluatorOnTheFlies
1675+
, "ClassForTest1.OnTheFlyStaticPreVar")
1676+
.Returns(5)
1677+
.SetCategory("On the fly var")
1678+
.SetCategory("Static Onthefly");
16491679

16501680
#endregion
16511681
}

CodingSeb.ExpressionEvaluator/ExpressionEvaluator.cs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3237,11 +3237,6 @@ private string GetCodeUntilEndOfStringInterpolation(string subExpr)
32373237

32383238
#region Utils private sub classes for parsing and interpretation
32393239

3240-
private class ClassOrTypeName
3241-
{
3242-
public Type Type { get; set; }
3243-
}
3244-
32453240
private class ValueTypeNestingTrace
32463241
{
32473242
public object Container { get; set; }
@@ -3373,6 +3368,11 @@ public enum OptionOnNoReturnKeywordFoundInScriptAction
33733368

33743369
#region ExpressionEvaluator linked public classes (specific Exceptions and EventArgs)
33753370

3371+
public partial class ClassOrTypeName
3372+
{
3373+
public Type Type { get; set; }
3374+
}
3375+
33763376
public partial class ExpressionEvaluatorSyntaxErrorException : Exception
33773377
{
33783378
public ExpressionEvaluatorSyntaxErrorException() : base()

0 commit comments

Comments
 (0)