Example #1
0
        public void Precompiler_Precompile_func_wParams_nested()
        {
            var parser  = new Parser();
            var tokens  = parser.Parse("getcity(Name == 'bob', getstate(ZipCode == 98033, Role == 'Engineer'))");
            var tokens2 = Precompiler.Precompile(tokens);

            Assert.IsNotNull(tokens2);
            Assert.AreEqual(6, tokens2.Count);
            Assert.AreEqual("getcity", tokens2[0].Value);
            Assert.AreEqual("(", tokens2[1].Value);
            Assert.AreEqual(Token.TokenType.Expression, tokens2[2].Type);
            Assert.AreEqual(",", tokens2[3].Value);
            Assert.AreEqual(Token.TokenType.Expression, tokens2[4].Type);
            Assert.AreEqual(")", tokens2[5].Value);

            var expr1 = tokens2[2] as ExpressionToken;
            var expr2 = tokens2[4] as ExpressionToken;

            Assert.AreEqual(3, expr1.Children.Count);
            Assert.AreEqual("Name", expr1.Children[0].Value);
            Assert.AreEqual("==", expr1.Children[1].Value);
            Assert.AreEqual("bob", expr1.Children[2].Value);

            Assert.AreEqual(6, expr2.Children.Count);
            Assert.AreEqual("getstate", expr2.Children[0].Value);
            Assert.AreEqual("(", expr2.Children[1].Value);
            Assert.AreEqual(Token.TokenType.Expression, expr2.Children[2].Type);
            Assert.AreEqual(",", expr2.Children[3].Value);
            Assert.AreEqual(Token.TokenType.Expression, expr2.Children[4].Type);
            Assert.AreEqual(")", expr2.Children[5].Value);
        }
Example #2
0
        public void Precompiler_Precompile_tertiary_complex_expression()
        {
            var parser  = new Parser();
            var tokens  = parser.Parse("Name == 'bob' && City == 'Seattle' ? 'Jones' : 'Anderson'");
            var tokens2 = Precompiler.Precompile(tokens);

            Assert.IsNotNull(tokens2);
            Assert.AreEqual(5, tokens2.Count);

            Assert.AreEqual(Token.TokenType.Expression, tokens2[0].Type);
            Assert.AreEqual("?", tokens2[1].Value);
            Assert.AreEqual("Jones", tokens2[2].Value);
            Assert.AreEqual(":", tokens2[3].Value);
            Assert.AreEqual("Anderson", tokens2[4].Value);

            var exprToken1 = tokens2[0] as ExpressionToken;

            Assert.AreEqual(3, exprToken1.Children.Count);

            Assert.AreEqual(Token.TokenType.Expression, exprToken1.Children[0].Type);
            Assert.AreEqual("&&", exprToken1.Children[1].Value);
            Assert.AreEqual(Token.TokenType.Expression, exprToken1.Children[2].Type);

            var exprToken3 = exprToken1.Children[0] as ExpressionToken;
            var exprToken4 = exprToken1.Children[2] as ExpressionToken;

            Assert.AreEqual("Name", exprToken3.Children[0].Value);
            Assert.AreEqual("==", exprToken3.Children[1].Value);
            Assert.AreEqual("bob", exprToken3.Children[2].Value);

            Assert.AreEqual("City", exprToken4.Children[0].Value);
            Assert.AreEqual("==", exprToken4.Children[1].Value);
            Assert.AreEqual("Seattle", exprToken4.Children[2].Value);
        }
Example #3
0
        public void Precompiler_Precompile_sortforeach_Success()
        {
            var parser  = new Parser();
            var tokens  = parser.Parse("#foreach(sort(Customers, Name), {})");
            var tokens2 = Precompiler.Precompile(tokens);

            Assert.IsNotNull(tokens2);
            Assert.AreEqual(6, tokens2.Count);
            Assert.AreEqual("#foreach", tokens2[0].Value);
            Assert.AreEqual("(", tokens2[1].Value);

            Assert.AreEqual(",", tokens2[3].Value);
            Assert.AreEqual("{}", tokens2[4].Value);
            Assert.AreEqual(")", tokens2[5].Value);

            var exprToken = tokens2[2] as ExpressionToken;

            Assert.IsNotNull(exprToken);
            Assert.AreEqual(6, exprToken.Children.Count);
            Assert.AreEqual("sort", exprToken.Children[0].Value);
            Assert.AreEqual("(", exprToken.Children[1].Value);
            Assert.AreEqual("Customers", exprToken.Children[2].Value);
            Assert.AreEqual(",", exprToken.Children[3].Value);
            Assert.AreEqual("Name", exprToken.Children[4].Value);
            Assert.AreEqual(")", exprToken.Children[5].Value);
        }
Example #4
0
        public void Precompiler_Precompile_complex_wParens_expression()
        {
            var parser  = new Parser();
            var tokens  = parser.Parse("(Name == 'bob') && (City == 'San Francisco')");
            var tokens2 = Precompiler.Precompile(tokens);

            Assert.IsNotNull(tokens2);
            Assert.AreEqual(3, tokens2.Count);

            Assert.AreEqual(Token.TokenType.Expression, tokens2[0].Type);
            Assert.AreEqual("&&", tokens2[1].Value);
            Assert.AreEqual(Token.TokenType.Expression, tokens2[2].Type);

            var exprToken1 = tokens2[0] as ExpressionToken;
            var exprToken2 = tokens2[2] as ExpressionToken;

            Assert.AreEqual(3, exprToken1.Children.Count);
            Assert.AreEqual(3, exprToken2.Children.Count);

            Assert.AreEqual("Name", exprToken1.Children[0].Value);
            Assert.AreEqual("==", exprToken1.Children[1].Value);
            Assert.AreEqual("bob", exprToken1.Children[2].Value);

            Assert.AreEqual("City", exprToken2.Children[0].Value);
            Assert.AreEqual("==", exprToken2.Children[1].Value);
            Assert.AreEqual("San Francisco", exprToken2.Children[2].Value);
        }
Example #5
0
        public void Precompiler_Precompile_multipart2_expression()
        {
            var parser  = new Parser();
            var tokens  = parser.Parse("$Customer.Name.Last");
            var tokens2 = Precompiler.Precompile(tokens);

            Assert.IsNotNull(tokens2);
            Assert.AreEqual(1, tokens2.Count);
            Assert.AreEqual("$Customer.Name.Last", tokens2[0].Value);
        }
Example #6
0
        public void Precompiler_Precompile_simple_wParens()
        {
            var parser  = new Parser();
            var tokens  = parser.Parse("(Name == 'bob')");
            var tokens2 = Precompiler.Precompile(tokens);

            Assert.IsNotNull(tokens2);
            Assert.AreEqual(1, tokens2.Count);
            Assert.AreEqual(Token.TokenType.Expression, tokens2[0].Type);
            Assert.IsTrue(tokens2[0] is ExpressionToken);
            Assert.AreEqual(3, (tokens2[0] as ExpressionToken).Children.Count);
        }
Example #7
0
        public void Precompiler_Precompile_multipart3_expression()
        {
            var parser  = new Parser();
            var tokens  = parser.Parse("$Customer.FirstName + $Customer.LastName");
            var tokens2 = Precompiler.Precompile(tokens);

            Assert.IsNotNull(tokens2);
            Assert.AreEqual(3, tokens2.Count);
            Assert.AreEqual("$Customer.FirstName", tokens2[0].Value);
            Assert.AreEqual("+", tokens2[1].Value);
            Assert.AreEqual("$Customer.LastName", tokens2[2].Value);
        }
Example #8
0
        public void Precompiler_Precompile_simple_expression()
        {
            var parser  = new Parser();
            var tokens  = parser.Parse("Name == 'bob'");
            var tokens2 = Precompiler.Precompile(tokens);

            Assert.IsNotNull(tokens2);
            Assert.AreEqual(3, tokens2.Count);
            Assert.AreEqual("Name", tokens2[0].Value);
            Assert.AreEqual("==", tokens2[1].Value);
            Assert.AreEqual("bob", tokens2[2].Value);
        }
Example #9
0
        public void Precompiler_Precompile_simple_func()
        {
            var parser  = new Parser();
            var tokens  = parser.Parse("getcity(Name == 'bob')");
            var tokens2 = Precompiler.Precompile(tokens);

            Assert.IsNotNull(tokens2);
            Assert.AreEqual(4, tokens2.Count);
            Assert.AreEqual("getcity", tokens2[0].Value);
            Assert.AreEqual("(", tokens2[1].Value);
            Assert.AreEqual(Token.TokenType.Expression, tokens2[2].Type);
            Assert.AreEqual(")", tokens2[3].Value);
        }
Example #10
0
        /****************************************************************************/
        internal static IList <IExpression> ParseElementParams(string elementName, string source, IList <bool> isExplicitParam)
        {
            var result  = new List <IExpression>();
            var parser  = new Parser();
            var tokens  = parser.Parse(source);
            var tokens2 = Precompiler.Precompile(tokens);

            if (tokens2[0].Value != ("#" + elementName))
            {
                throw new Transformer.SyntaxException("Error in parsing element parameters");
            }

            var start = 1;
            var end   = tokens2.Count;

            if (tokens2.Count > 1 && tokens2[1].Value == "(")
            {
                ++start;
                --end;
            }

            for (var i = start; i < end; i += 2)
            {
                var token    = tokens2[i];
                var compiler = new Compiler();

                if (token is ExpressionToken exprToken)
                {
                    result.Add(compiler.InnerCompile(exprToken.Children));
                }
                else if (IsExplicitParam(isExplicitParam, i - 2))
                {
                    result.Add(new Value(token));
                }
                else
                {
                    result.Add(compiler.InnerCompile(new Token[] { token }));
                }
            }

            return(result);
        }
Example #11
0
        public void Precompiler_Precompile_tertiary_nested_expression()
        {
            var parser  = new Parser();
            var tokens  = parser.Parse("Name == 'bob' ? 'Jones' : (City == 'Chicago' ? 'Anderson' : 'Bell')");
            var tokens2 = Precompiler.Precompile(tokens);

            Assert.IsNotNull(tokens2);
            Assert.AreEqual(5, tokens2.Count);

            Assert.AreEqual(Token.TokenType.Expression, tokens2[0].Type);
            Assert.AreEqual("?", tokens2[1].Value);
            Assert.AreEqual("Jones", tokens2[2].Value);
            Assert.AreEqual(":", tokens2[3].Value);
            Assert.AreEqual(Token.TokenType.Expression, tokens2[4].Type);

            var exprToken1 = tokens2[0] as ExpressionToken;
            var exprToken2 = tokens2[4] as ExpressionToken;

            Assert.AreEqual(3, exprToken1.Children.Count);

            Assert.AreEqual("Name", exprToken1.Children[0].Value);
            Assert.AreEqual("==", exprToken1.Children[1].Value);
            Assert.AreEqual("bob", exprToken1.Children[2].Value);

            Assert.AreEqual(5, exprToken2.Children.Count);

            Assert.AreEqual(Token.TokenType.Expression, exprToken2.Children[0].Type);
            Assert.AreEqual("?", exprToken2.Children[1].Value);
            Assert.AreEqual("Anderson", exprToken2.Children[2].Value);
            Assert.AreEqual(":", exprToken2.Children[3].Value);
            Assert.AreEqual("Bell", exprToken2.Children[4].Value);

            var exprToken3 = exprToken2.Children[0] as ExpressionToken;

            Assert.AreEqual("City", exprToken3.Children[0].Value);
            Assert.AreEqual("==", exprToken3.Children[1].Value);
            Assert.AreEqual("Chicago", exprToken3.Children[2].Value);
        }
Example #12
0
        private void Precompile()
        {
            if (!Precompiled)
            {
                // Undo the "PowerUI" precompiled module.
                Precompiler.Reverse("PowerUI");

                return;
            }

            List <string> paths = new List <string>();

            // Find PowerUI:
            string powerUIPath = PowerUIEditor.GetPowerUIPath();

            paths.Add(powerUIPath + "/Source");
            paths.Add(powerUIPath + "/Wrench");

            Precompiler.Precompile(
                paths,
                "PowerUI",
                EditorMode
                );
        }
Example #13
0
 public static string Precompile(string testCodeFilePath)
 {
     return(Precompiler.Precompile(new StringReader(File.OpenText("..\\..\\" + testCodeFilePath).ReadToEnd())));
 }