public void InstanceParameterTests() { ExpressionCompiler <string, TestParams> instPropTest = new ExpressionCompiler <string, TestParams>("Instance.RadarProperty.Substring(0, 5)"); ExpressionCompiler instMethodTest = new ExpressionCompiler("Instance.ShowData()"); TestParams testParams = new TestParams { Instance = this }; Assert.IsTrue(instPropTest.ExecuteFunction(testParams).Equals("RADAR")); instMethodTest.InstanceParameterType = typeof(TestParams); instMethodTest.ExecuteAction(testParams); // When instance parameter type is defined, expressions expecting parameter should fail: Assert.ThrowsException <TargetException>(() => instMethodTest.ExecuteAction()); // This creates a new context type System.Console.WriteLine($"Context Type for '{nameof(instPropTest)}': {instPropTest.TypeRegistry.GetContextType<string, TestParams>()?.FullName}"); System.Console.WriteLine($"Expression for '{nameof(instPropTest)}': {instPropTest}"); System.Console.WriteLine($"Context Type for '{nameof(instMethodTest)}': {instMethodTest.TypeRegistry.GetContextType<object, TestParams>()?.FullName}"); System.Console.WriteLine($"Expression for '{nameof(instMethodTest)}': {instMethodTest}"); System.Console.WriteLine($"Generated Context Type Count = {TypeRegistry.GeneratedContextTypeCount:N0}"); }
public void RegisteredTypeStaticAccessTests() { ExpressionCompiler regConstText = new ExpressionCompiler($"EvalutatorTests.RadarConst == \"{RadarConst}\""); ExpressionCompiler regStaticFieldText = new ExpressionCompiler($"EvalutatorTests.StaticRadarField == \"{RadarConst}\""); ExpressionCompiler regStaticPropText = new ExpressionCompiler($"EvalutatorTests.StaticRadarProperty == \"{RadarConst}\""); ExpressionCompiler regStaticMethodTest = new ExpressionCompiler($"EvalutatorTests.StaticRadarMethod() == \"{RadarConst}\""); regConstText.TypeRegistry.RegisterType(typeof(EvalutatorTests)); regStaticFieldText.TypeRegistry.RegisterType(typeof(EvalutatorTests)); regStaticPropText.TypeRegistry.RegisterType(typeof(EvalutatorTests)); // Verify that type cannot be accessed via a symbol - currently CSharpScript does not allow dynamics, e.g., StaticDynamic Assert.ThrowsException <ArgumentException>(() => regStaticMethodTest.TypeRegistry.RegisterSymbol("Testing", typeof(EvalutatorTests))); regStaticMethodTest.TypeRegistry.RegisterType(typeof(EvalutatorTests)); Assert.IsTrue((bool)regConstText.ExecuteFunction()); Assert.IsTrue((bool)regStaticFieldText.ExecuteFunction()); Assert.IsTrue((bool)regStaticPropText.ExecuteFunction()); Assert.IsTrue((bool)regStaticMethodTest.ExecuteFunction()); System.Console.WriteLine($"Context Type for '{nameof(regConstText)}': {regConstText.TypeRegistry.GetContextType<object, object>()?.FullName}"); System.Console.WriteLine($"Expression for '{nameof(regConstText)}': {regConstText}"); System.Console.WriteLine($"Context Type for '{nameof(regStaticFieldText)}': {regStaticFieldText.TypeRegistry.GetContextType<object, object>()?.FullName}"); System.Console.WriteLine($"Expression for '{nameof(regStaticFieldText)}': {regStaticFieldText}"); System.Console.WriteLine($"Context Type for '{nameof(regStaticPropText)}': {regStaticPropText.TypeRegistry.GetContextType<object, object>()?.FullName}"); System.Console.WriteLine($"Expression for '{nameof(regStaticPropText)}': {regStaticPropText}"); System.Console.WriteLine($"Context Type for '{nameof(regStaticMethodTest)}': {regStaticMethodTest.TypeRegistry.GetContextType<object, object>()?.FullName}"); System.Console.WriteLine($"Expression for '{nameof(regStaticMethodTest)}': {regStaticMethodTest}"); System.Console.WriteLine($"Generated Context Type Count = {TypeRegistry.GeneratedContextTypeCount:N0}"); }
public void RegisteredTypeExtensionMethodTests() { ExpressionCompiler <string> regExtTest = new ExpressionCompiler <string>($"\"{RadarConst}\".PadLeft(12)"); regExtTest.TypeRegistry.RegisterType(typeof(StringExtensions)); Assert.IsTrue(regExtTest.ExecuteFunction().Trim().Equals(RadarConst)); System.Console.WriteLine($"Context Type for '{nameof(regExtTest)}': {regExtTest.TypeRegistry.GetContextType<string, object>()?.FullName}"); System.Console.WriteLine($"Expression for '{nameof(regExtTest)}': {regExtTest}"); System.Console.WriteLine($"Generated Context Type Count = {TypeRegistry.GeneratedContextTypeCount:N0}"); }
public void DoubleExpressionTests() { ExpressionCompiler <double> piConst = new ExpressionCompiler <double>("Math.PI"); ExpressionCompiler <double> cosExpr = new ExpressionCompiler <double>("Math.Cos(Math.PI)"); Assert.IsTrue(piConst.ExecuteFunction() == Math.PI); Assert.IsTrue(cosExpr.ExecuteFunction() == -1.0D); System.Console.WriteLine($"Context Type for '{nameof(piConst)}': {piConst.TypeRegistry.GetContextType<double, object>()?.FullName}"); System.Console.WriteLine($"Expression for '{nameof(piConst)}': {piConst}"); System.Console.WriteLine($"Context Type for '{nameof(cosExpr)}': {cosExpr.TypeRegistry.GetContextType<double, object>()?.FullName}"); System.Console.WriteLine($"Expression for '{nameof(cosExpr)}': {cosExpr}"); System.Console.WriteLine($"Generated Context Type Count = {TypeRegistry.GeneratedContextTypeCount:N0}"); }
public void BoolExpressionTests() { ExpressionCompiler <bool> boolTrue = new ExpressionCompiler <bool>("true"); ExpressionCompiler <bool> boolFalse = new ExpressionCompiler <bool>("false"); Assert.IsTrue(boolTrue.ExecuteFunction()); Assert.IsFalse(boolFalse.ExecuteFunction()); System.Console.WriteLine($"Context Type for '{nameof(boolTrue)}': {boolTrue.TypeRegistry.GetContextType<bool, object>()?.FullName}"); System.Console.WriteLine($"Expression for '{nameof(boolTrue)}': {boolTrue}"); System.Console.WriteLine($"Context Type for '{nameof(boolFalse)}': {boolFalse.TypeRegistry.GetContextType<bool, object>()?.FullName}"); System.Console.WriteLine($"Expression for '{nameof(boolFalse)}': {boolFalse}"); System.Console.WriteLine($"Generated Context Type Count = {TypeRegistry.GeneratedContextTypeCount:N0}"); }
public void RegisteredSymbolInstanceAccessTests() { ExpressionCompiler regPropTest = new ExpressionCompiler($"Testing.RadarProperty == \"{RadarConst}\""); ExpressionCompiler regMethodTest = new ExpressionCompiler($"Testing.RadarMethod() == \"{RadarConst}\""); regPropTest.TypeRegistry.RegisterSymbol("Testing", this); regMethodTest.TypeRegistry.RegisterSymbol("Testing", this); Assert.IsTrue((bool)regPropTest.ExecuteFunction()); Assert.IsTrue((bool)regMethodTest.ExecuteFunction()); System.Console.WriteLine($"Context Type for '{nameof(regPropTest)}': {regPropTest.TypeRegistry.GetContextType<object, object>()?.FullName}"); System.Console.WriteLine($"Expression for '{nameof(regPropTest)}': {regPropTest}"); System.Console.WriteLine($"Context Type for '{nameof(regMethodTest)}': {regMethodTest.TypeRegistry.GetContextType<object, object>()?.FullName}"); System.Console.WriteLine($"Expression for '{nameof(regMethodTest)}': {regMethodTest}"); System.Console.WriteLine($"Generated Context Type Count = {TypeRegistry.GeneratedContextTypeCount:N0}"); }