Ejemplo n.º 1
0
        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}");
        }
Ejemplo n.º 2
0
        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}");
        }
Ejemplo n.º 3
0
        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}");
        }
Ejemplo n.º 4
0
        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}");
        }
Ejemplo n.º 5
0
        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}");
        }
Ejemplo n.º 6
0
        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}");
        }