예제 #1
0
        public void ParseMarkupMarkupStatementTest()
        {
            //Create parser
            StatementParser statementParser = new StatementParser(Init("tr td img(src=\"test.png\", width=300);"));
            Statement       parsedStatement = statementParser.ParseMarkupStatement();

            //Test statement
            Assert.AreEqual(typeof(MarkupMarkupStatement), parsedStatement.GetType());

            //Test MarkupMarkupStatement
            MarkupMarkupStatement statement = (MarkupMarkupStatement)parsedStatement;

            List <ISyntaxNode> .Enumerator markupEnumerator = statement.GetMarkups().GetEnumerator();

            //Test TR
            markupEnumerator.MoveNext();
            Assert.AreEqual("tr", ((Markup)markupEnumerator.Current).ToString());

            //Test TD
            markupEnumerator.MoveNext();
            Assert.AreEqual("td", ((Markup)markupEnumerator.Current).ToString());

            //Test IMG
            Assert.AreEqual("img(src=\"test.png\",width=300)", statement.GetMarkup().ToString());
        }
예제 #2
0
        public void ParseMarkupStatStatementTest()
        {
            //Create parser
            StatementParser statementParser = new StatementParser(Init("p { echo \"test\"; }"));
            Statement       parsedStatement = statementParser.ParseMarkupStatement();

            //Test Statement
            Assert.AreEqual(typeof(MarkupStatStatement), parsedStatement.GetType());

            //Test MarkupStatStatement
            MarkupStatStatement markupStatStatement = (MarkupStatStatement)parsedStatement;

            Assert.AreEqual(1, markupStatStatement.GetMarkups().Count);

            //Test markup
            Markup markup = (Markup)markupStatStatement.GetMarkups().Get(0);

            Assert.AreEqual("p", markup.GetDesignator().GetIdentifier());
            Assert.AreEqual(0, markup.GetArguments().Count);

            //Test statement
            Assert.AreEqual(typeof(BlockStatement), markupStatStatement.GetStatement().GetType());
            BlockStatement statement = (BlockStatement)markupStatStatement.GetStatement();

            Assert.AreEqual(1, statement.GetStatements().Count);

            Statement stmt = (Statement)statement.GetStatements().Get(0);

            Assert.AreEqual(typeof(EchoExpressionStatement), stmt.GetType());
            Assert.AreEqual("echo \"test\";", stmt.ToString());
        }
예제 #3
0
        public void ParseSimple()
        {
            Console.WriteLine("-- ParseSimple ------------------------------------------------");

            StatementParser     parser     = new StatementParser();
            StatementCollection statements = parser.Parse("SELECT * FROM dual");

            Assert.AreEqual(1, statements.Count);
            Console.WriteLine("S1=[" + statements[0] + "]");

            statements = parser.Parse("SELECT * FROM dual;");
            Assert.AreEqual(1, statements.Count);
            Console.WriteLine("S2=[" + statements[0] + "]");

            statements = parser.Parse("\nSELECT * FROM dual;\n/\n");
            Assert.AreEqual(1, statements.Count);
            Console.WriteLine("S3=[" + statements[0] + "]");

            statements = parser.Parse("\nSELECT * FROM dual;\nEXIT;\n");
            Assert.AreEqual(1, statements.Count);
            Console.WriteLine("S4=[" + statements[0] + "]");

            statements = parser.Parse("\nSELECT * FROM dual;\n/ SELECT  * FROM other ; \n");
            Assert.AreEqual(2, statements.Count);
            Console.WriteLine("S5=[" + statements[0] + "]");
            Console.WriteLine("S5=[" + statements[1] + "]");
        }
예제 #4
0
        public void ParseSemiComplex()
        {
            Console.WriteLine("-- ParseSemiComplex -------------------------------------------");

            string sql =
                @"CREATE TABLE SEC_DirectoryNode
(
	nodeID       char(32)      NOT NULL,
	modVersion   int           DEFAULT 1 NOT NULL
);

ALTER TABLE SEC_DirectoryNode ADD
(
	CONSTRAINT PK_SEC_DirectoryNode PRIMARY KEY (nodeID)
);

CREATE INDEX IX_SEC_DirectoryNode_typeID
    ON SEC_DirectoryNode (typeID);";

            StatementParser     parser     = new StatementParser();
            StatementCollection statements = parser.Parse(sql);

            Assert.AreEqual(3, statements.Count);

            foreach (string s in statements)
            {
                Console.WriteLine("S=[" + s + "]");
            }
        }
예제 #5
0
        private static TCommand Parse <TCommand>(string s) where TCommand : CommandStatement
        {
            var cmd = StatementParser.Parse(s);

            Assert.IsInstanceOfType(cmd, typeof(TCommand));
            return((TCommand)cmd);
        }
예제 #6
0
        public void ParserMarkupEmbeddingStatementTest()
        {
            //Create parser
            StatementParser statementParser = new StatementParser(Init("p p \"left<func1() \"text\">right\";"));
            Statement       parsedStatement = statementParser.ParseMarkupStatement();

            //Test statement
            Assert.AreEqual(typeof(MarkupEmbeddingStatement), parsedStatement.GetType());

            //Test MarkupEmbeddingStatement
            MarkupEmbeddingStatement markupEmbeddingStatement = (MarkupEmbeddingStatement)parsedStatement;

            Assert.AreEqual("p", markupEmbeddingStatement.GetMarkups().Get(0).ToString());
            Assert.AreEqual("p", markupEmbeddingStatement.GetMarkups().Get(1).ToString());

            //Test embedding
            Embedding embedding = markupEmbeddingStatement.GetEmbedding();

            Assert.AreEqual("\"left<", embedding.GetPreText().ToString());
            Assert.AreEqual(typeof(ExpressionEmbed), embedding.GetEmbed().GetType());

            ExpressionEmbed embed = (ExpressionEmbed)embedding.GetEmbed();

            Assert.AreEqual(1, embed.GetMarkups().Count);
            Assert.AreEqual("func1", embed.GetMarkups().Get(0).ToString());
            Assert.AreEqual(typeof(TextExpression), embed.GetExpression().GetType());
            Assert.AreEqual("\"text\"", embed.GetExpression().ToString());

            Assert.AreEqual(typeof(PostTextTail), embedding.GetTextTail().GetType());
            PostTextTail postTextTail = (PostTextTail)embedding.GetTextTail();

            Assert.AreEqual(">right\"", postTextTail.GetPostText().ToString());
        }
예제 #7
0
        public void ParseXmlType()
        {
            Console.WriteLine("-- ParseXmlType -----------------------------------------------");

            string sql = @"TEST';' TEST; TEST;";

            StatementParser parser = new StatementParser();

            parser.IsOptimized = true;
            StatementCollection statements = parser.Parse(sql);

            Assert.AreEqual(2, statements.Count);

            sql =
                @"INSERT INTO COR_Field
    (fieldID, fieldVersion, name, displayName, shortName, description, remarks, prefixResID,
    fieldType, fieldSource, sourceName, definition, valuePaths, processingStage, formulaID,
    isStandard, isCataloged, isSearchable, isRetrievable, isLocked, isObsolete)
VALUES
(
    'A91A2D673F9846689E2D4AA9B38D81C5',
    0,
    'BracketGroup',
    NULL,
    NULL,
    NULL,
    NULL,
    'BracketGroup,Waters.Lib.Resources,UDFResources',
    'String',
    'Class',
    NULL,
    xmltype('<definition>
  <columnNo>7</columnNo>
  <concatSeparator>;</concatSeparator>
</definition>'),
    xmltype('<valuePaths>
  <namespace prefix=""udf"">urn:www.waters.com/udf</namespace>
  <path purpose=""catalog"">/item/catalog/bracketGroup</path>
  <path purpose=""default"">quantitationProperties::bracketGroup</path>
  <path purpose=""udf"">quantitationProperties::bracketGroup</path>
  <path purpose=""xpath"">/udf:result/udf:sample/udf:propertyGroups/udf:quantitationProperties/udf:bracketGroup</path>
</valuePaths>'),
    NULL,
    '00000000000000000000000000000000',
    1,
    1,
    1,
    1,
    0,
    0
);";

            parser             = new StatementParser();
            parser.IsOptimized = true;
            statements         = parser.Parse(sql);
            Assert.AreEqual(1, statements.Count);

            Console.WriteLine("S=[" + statements[0] + "]");
        }
예제 #8
0
            public void IntegersAreParsedToAConstExpression()
            {
                var parser = new StatementParser(new FakeScanner(new[] { new Token("INTEGER", "1", 0, 0, 0) }));

                var result = parser.ParseAll();

                Assert.AreEqual(typeof(ConstantExpr), result.GetType());
            }
예제 #9
0
        public void ParsesSimpleSelectQueryInProcedure()
        {
            const string query      = "create procedure abc\r\n as\r\n begin\r\n select 1;\r\n end";
            var          parser     = new StatementParser(SqlServerVersion.Sql120);
            var          statements = parser.GetChildStatements(query, false);

            Assert.AreEqual(1, statements.Count);
        }
예제 #10
0
            public void FloatsAreParsedToAConstExpression()
            {
                var parser = new StatementParser(new FakeScanner(new[] { new Token("FLOAT", "2.34", 0, 0, 0) }));

                var result = parser.ParseAll();

                Assert.AreEqual(typeof(ConstantExpr), result.GetType());
            }
예제 #11
0
        public void IfThenElseStatementIsBrokenIntoParts()
        {
            const string query      = "create procedure abc\r\n as\r\n if\t   \t1 = 1 begin\r\n select 1;\r\n end\r\nelse\r\nselect 99;";
            var          parser     = new StatementParser(SqlServerVersion.Sql120);
            var          statements = parser.GetChildStatements(query, false);

            Assert.IsNotNull(statements.FirstOrDefault(p => p.Text == "select 99;"));
        }
예제 #12
0
        public void ParsesSimpleSelectQuery()
        {
            const string query      = "select 1";
            var          parser     = new StatementParser(SqlServerVersion.Sql120);
            var          statements = parser.GetChildStatements(query, false);

            Assert.AreEqual(1, statements.Count);
            Assert.AreEqual(query, statements.First().Text);
        }
예제 #13
0
        public Batch(StatementParser parser, bool quotedIdentifier, string text, string fileName, string objectName, int objectId)
        {
            QuotedIdentifier = quotedIdentifier;
            Text             = text;
            FileName         = fileName;
            ObjectName       = objectName;
            ObjectId         = objectId;

            Statements = parser.GetChildStatements(text, quotedIdentifier);
        }
예제 #14
0
        public void ParseEchoExpressionStatementTest()
        {
            //Create parser
            StatementParser statementParser     = new StatementParser(Init("echo \"test\";"));
            EchoStatement   parsedEchoStatement = statementParser.ParseEchoStatement();

            //Check echo statement
            Assert.AreEqual(typeof(EchoExpressionStatement), parsedEchoStatement.GetType());
            Assert.AreEqual("echo \"test\";", parsedEchoStatement.ToString());
        }
예제 #15
0
        public void ParseEchoEmbeddingStatementTest()
        {
            //Create parser
            StatementParser statementParser     = new StatementParser(Init("echo \"left<func1() \"text\">right\";"));
            EchoStatement   parsedEchoStatement = statementParser.ParseEchoStatement();

            //Check echo statement
            Assert.AreEqual(typeof(EchoEmbeddingStatement), parsedEchoStatement.GetType());
            Assert.AreEqual("echo \"left<func1\"text\">right\";", parsedEchoStatement.ToString());
        }
예제 #16
0
        public void ParseYieldStatementTest()
        {
            //Create parser
            StatementParser statementParser = new StatementParser(Init("yield;"));
            YieldStatement  parsedYield     = statementParser.ParseYieldStatement();

            //Test yield instance
            Assert.AreEqual(typeof(YieldStatement), parsedYield.GetType());
            Assert.AreEqual("yield;", parsedYield.ToString());
        }
예제 #17
0
        public void ParseComplexOptimized()
        {
            Console.WriteLine("-- ParseComplexOptimized --------------------------------------");

            string sql =
                @"-- ***********************************************************************************************
-- Copyright © 2005 Waters Corporation. All Rights Reserved.
--
-- Everest Security Subsystem Licensing package implementation.
--
-- ***********************************************************************************************

CREATE OR REPLACE PACKAGE BODY SEC_Licensing
AS
	-- Forward declaration

	PROCEDURE SaveLicense (
	    p_licenseID  IN OUT char,
	    p_name       IN  varchar2,
	    p_license    IN  xmltype,
	    p_modifierID IN  char,
	    p_modVersion IN  int,
		p_newID		 OUT char
	    );


	-- ===========================================================================================
	-- DeleteLicense()
	-- ===========================================================================================

	PROCEDURE DeleteLicense (
	    p_licenseID IN char
	    )
	IS
	BEGIN
	  IF (p_licenseID > SystemLicenseID) THEN
	    BEGIN
	      DELETE SEC_License
	       WHERE licenseID = p_licenseID;
	    END;
	  END IF;
	END DeleteLicense;

END SEC_Licensing;
/";

            StatementParser parser = new StatementParser();

            parser.IsOptimized = true;
            StatementCollection statements = parser.Parse(sql);

            Assert.AreEqual(1, statements.Count);

            Console.WriteLine("S=[" + statements[0] + "]");
        }
예제 #18
0
 internal static IEnumerable <Statement> Parse(this StatementParser parser, string input)
 {
     using (Scanner scanner = new Scanner(input))
     {
         scanner.MoveNext();
         foreach (var statement in parser.Parse(scanner))
         {
             yield return(statement);
         }
     }
 }
예제 #19
0
        public void ParseVarBindAssignmentTest()
        {
            //Create parser
            StatementParser   statementParser     = new StatementParser(Init("var1 = \"test\";"));
            VarBindAssignment parsedVarAssignment = statementParser.ParseVarBindAssignment();

            //Test VarBindAssignment
            Assert.AreEqual("var1", parsedVarAssignment.GetIdentifier());
            Assert.AreEqual(typeof(TextExpression), parsedVarAssignment.GetExpression().GetType());
            Assert.AreEqual("\"test\"", parsedVarAssignment.GetExpression().ToString());
        }
예제 #20
0
 public void ImplementsParse()
 {
     IParser target = new StatementParser(new FakeScanner(new[] { Token.Empty }));
     try
     {
         Expression actual = target.ParseAll();
         Assert.Fail("No tokens to parse");
     }
     catch (ParseException)
     {
     }
 }
예제 #21
0
        public static IReadOnlyList <YangStatement> ParseStatements(ReadOnlySpan <char> span)
        {
            var trace  = new ParserTrace();
            var result = StatementParser.Many(min: 1).Parse(span, trace);

            if (!result.Success)
            {
                throw new FormatException($"error parsing YANG statements at position: {trace.Position}");
            }

            return(result.Value);
        }
예제 #22
0
        void Test(int testNum, string exprToParse, int terminatingChar = -1)
        {
            ++_testsRun;
            var testName = string.Format("results-test-{0}.txt", testNum);

            using (var tw = File.CreateText(_testDir + testName)) {
                string tc = terminatingChar >= 0 ? ((char)terminatingChar).ToString() : "";
                tw.WriteLine("------ Test: {0} ------\t{1}\t{2}", testNum, tc, exprToParse.Replace("\n", "\r\n"));
                tw.WriteLine();
                var utf8Stream = CodePointStream.FromString(exprToParse);
                var scanner    = new ScanIt(utf8Stream, testName, tw);
                var parser     = new StatementParser(scanner, new NotMuchOfASymbolTable());
                var result     = parser.TryParse();
                scanner.Message("Parse End");
                tw.WriteLine();
                result.Dump(tw);
                tw.WriteLine();
            }

            using (var tr = new StreamReader(File.OpenRead(_testDir + testName))) {
                var trBytes = tr.ReadToEnd();
                System.Console.WriteLine();
                System.Console.WriteLine();
                System.Console.WriteLine(trBytes);
                StreamReader mr = null;
                try {
                    mr = new StreamReader(File.OpenRead(_masterDir + testName));
                    using ( mr ) {
                        var mrBytes = mr.ReadToEnd();
                        int len     = mrBytes.Length;
                        if (len != trBytes.Length)
                        {
                            System.Console.WriteLine("Test {0} FAILURE: lengths differ!!!!", testNum);
                            return;
                        }
                        for (int i = 0; i < len; i++)
                        {
                            if (trBytes [i] != mrBytes [i])
                            {
                                System.Console.WriteLine("Test {0} FAILURE: bytes differ!!!!", testNum);
                                return;
                            }
                        }
                    }
                } catch (System.Exception) {
                    System.Console.WriteLine("Test {0}: No Master!!!", testNum);
                    return;
                }
            }

            System.Console.WriteLine("Test {0}: SUCCESS!!", testNum);
            ++_testsPassed;
        }
예제 #23
0
            public void MoreComplexIdentifierExpression()
            {
                var parser = new StatementParser(new FakeScanner(new[] { Get("a"), Get("+"), Get(1), Get("*"), Get("b"), Get("-"), Get(4) }));

                var result = parser.ParseAll();

                Assert.AreEqual(typeof(MinusExpr), result.GetType());

                var expr = (MinusExpr)result;

                Assert.AreEqual(typeof(PlusExpr), expr.Left.GetType());
                Assert.AreEqual(typeof(ConstantExpr), expr.Right.GetType());
            }
예제 #24
0
        //========================================================================================
        // ShowOpenTransactions()
        //========================================================================================

        /// <summary>
        /// Opens a new query window and executes the SELECT FROM v$transaction statement.
        /// </summary>

        public void ShowOpenTransactions()
        {
            string formattedSQL =
                "SELECT vp.spid as pid, S.blocking_session blocker, S.sid, S.serial#,\n"
                + "       s.osuser, S.username, S.machine, S.program,\n"
                + "       Q.sql_fulltext as cur_sql, PQ.sql_fulltext as prev_sql,\n"
                + "       vt.used_urec, vt.start_date\n"
                + "  FROM v$session S\n"
                + "  LEFT JOIN v$sqlarea Q  on S.sql_id = Q.sql_id\n"
                + "  LEFT JOIN v$sqlarea PQ on S.prev_sql_id = PQ.sql_id\n"
                + "  LEFT JOIN v$process vp on s.paddr = vp.addr\n"
                + "  LEFT JOIN v$transaction vt on s.saddr = vt.ses_addr\n"
                + " ORDER BY S.username, S.machine\n";

            InsertText(formattedSQL);

            IsSaved = true;
            SetTitle();

            Logger.WriteLine("QueryWindow.ShowOpenTransactions");
            commander.ExecuteControls.IsEnabled = true;
            SetStatusMessage(RxExecutingStatus);

            resultsView.Clear();

            if (splitContainer.Panel2Collapsed)
            {
                DoToggleResults(null, null);
            }

            splitContainer.SplitterDistance = (int)(splitContainer.Height * 0.25);

            // catch up on Windows messages just to look better
            Application.DoEvents();

            queries.Clear();
            driver.Reset();

            var query  = new Database.Query(formattedSQL.Replace("\n", String.Empty));
            var parser = new StatementParser();

            parser.ParseStatement(dbase, query, browser);
            queries.Add(query);

            // execute query collection

            resultsView.Lock();

            driver.Execute(queries, basePath, 1);
        }
예제 #25
0
        public Parser(string path, string encoding = "utf-8")
        {
            //use specified encoding to read non latin-1 letters
            string text = File.ReadAllText(path, System.Text.Encoding.GetEncoding(encoding));

            //change file end of line to CRLF
            text = text.Replace("\r\n", "\n").Replace("\r", "\n").Replace("\n", "\r\n");
            //add missed - before :20: field if any
            text = text.Replace("\r\n:20:", "\r\n-\r\n:20:").Replace("\r\n-\r\n-", "\r\n-");
            //save to original file as utf-8 and than read again
            File.WriteAllText(path, text, System.Text.Encoding.GetEncoding("utf-8"));
            _reader          = new StreamReader(path, encoding: System.Text.Encoding.GetEncoding("utf-8"));
            _statementParser = new StatementParser(_reader);
        }
예제 #26
0
        public void ParseCombine()
        {
            Console.WriteLine("-- ParseCombine -----------------------------------------------");

            StatementParser     parser     = new StatementParser();
            StatementCollection statements = parser.Parse(
                "SELECT 'a' FROM dual;\nSELECT 'b' FROM dual;\nSELECT 'c' FROM dual;");

            Assert.AreEqual(3, statements.Count);

            string combined = statements.Combine();

            Console.WriteLine("combined=[" + combined + "]");
        }
예제 #27
0
            public void SimpleIdentifier()
            {
                var parser = new StatementParser(new FakeScanner(new[]
                {
                    Get("b")
                }));

                var result = parser.ParseAll();

                Assert.AreEqual(typeof(IdentifierExpr), result.GetType());
                var expr = (IdentifierExpr)result;

                Assert.AreEqual("b", expr.Name);
            }
예제 #28
0
 private void GetDynamicOrDefaultSql(QueryInfo info)
 {
     if (info.NamedQuery == null)
     {
         if (string.IsNullOrEmpty(info.CustomSQL))//从Type获取SQL
         {
             info.CustomSQL = GetMappedOrDefaultSql(info.GetMappingType());
         }
         else//已经制定SQL,动态化!
         {
             StatementParser.ParseDynamicSql(info);
         }
     }
 }
예제 #29
0
        public void ParseMarkupStatementTest()
        {
            //Create parser
            StatementParser statementParser = new StatementParser(Init("p();"));
            Statement       parsedStatement = statementParser.ParseMarkupStatement();

            //Test statatement
            Assert.AreEqual(typeof(MarkupStatement), parsedStatement.GetType());

            //Test MarkupStatement
            MarkupStatement statement = (MarkupStatement)parsedStatement;

            Assert.AreEqual("p", statement.GetMarkup().GetDesignator().GetIdentifier());
            Assert.AreEqual(0, statement.GetMarkup().GetArguments().Count);
        }
예제 #30
0
        public void WhileStatementIsBrokenIntoParts()
        {
            const string query = @"create procedure abc
as while		1 = 1 begin
 select 1;
  end
  select 99    ;

  select * from a_table;";

            var parser     = new StatementParser(SqlServerVersion.Sql120);
            var statements = parser.GetChildStatements(query, false);

            Assert.IsNotNull(statements.FirstOrDefault(p => p.Text == "while		1 = 1"));
        }
예제 #31
0
        ///获取xml中配置的 User.Select语句, 或者根据对象的属性映射生成语句
        private string GetMappedOrDefaultSql(Type type)
        {
            if (type == null)
            {
                throw new ArgumentNullException("MappingType", "QueryInfo未指定查询的对象类型!");
            }

            string key = type.Name + ".Select";
            string sql = StatementParser.GetMappedStaticSql(key);

            if (sql.Equals(key))
            {
                sql = (MappingInfo.GetMappingInfo(type).Select + "t");
            }
            return(sql);
        }
예제 #32
0
        public void ParseNotifications()
        {
            Console.WriteLine("-- ParseNotifications -----------------------------------------");

            StatementParser parser = new StatementParser();

            parser.ParseNotification += new NotificationEventHandler(parser_ParseNotification);
            StatementCollection statements = parser.Parse(
                "SELECT 'a' FROM dual;\nSELECT 'b' FROM dual; -- foo\nSELECT 'c' FROM dual;");

            Assert.AreEqual(3, statements.Count);

            Console.WriteLine("S0=[" + statements[0] + "]");
            Console.WriteLine("S1=[" + statements[1] + "]");
            Console.WriteLine("S2=[" + statements[2] + "]");
        }
예제 #33
0
        public void ParseWrap()
        {
            Console.WriteLine("-- ParseWrap --------------------------------------------------");

            StatementParser     parser     = new StatementParser();
            StatementCollection statements = parser.Parse(
                "SELECT 'a' FROM dual;\nSELECT 'b' FROM dual;\nSELECT 'c' FROM dual;");

            Assert.AreEqual(3, statements.Count);

            string wrapped = statements.Wrap("DefaultSchema");

            Assert.AreEqual(3, statements.Parameters.Count);

            Console.WriteLine("wrapped=[" + wrapped + "]");
        }
예제 #34
0
        static void Main(string[] args)
        {
            var variableValues = new Dictionary<string, string>
                {
                    { "VariableA", "Case5" },
                    { "VariableB", "CaseX" }
                };

            var inputTxt = string.Empty;
            using (StreamReader reader = new StreamReader("Input.txt"))
            {
                 inputTxt = reader.ReadToEnd();
            }
            ILanguageTranslator translator = new LanguageTranslator(
                new TextReader(inputTxt));

            var parser = new StatementParser(translator, variableValues);

            parser.Parse();
        }
예제 #35
0
            public void IfElseStatementNoBlock()
            {
                var parser = new StatementParser(new FakeScanner(new[]
                {
                    Get("if"), Get("("), Get(1), Get("!="), Get(3), Get(")"),
                        Get("a"), Get("="), Get("b"), Get("+"), Get(1), Get(";"),
                    Get("else"),
                        Get("c"), Get("="), Get("d"), Get("+"), Get(2), Get(";"),
                }));

                var result = parser.ParseAll();

                Assert.AreEqual(typeof(IfStmt), result.GetType());

                var stmt = (IfStmt)result;

                Assert.AreEqual(typeof(NotEqualsExpr), stmt.Condition.GetType());
                Assert.AreEqual(typeof(AssignmentExpr), stmt.ThenExpression.GetType());
                Assert.AreEqual(typeof(AssignmentExpr), stmt.ElseExpression.GetType());

                Assert.AreNotSame(stmt.ThenExpression, stmt.ElseExpression);
            }
예제 #36
0
            public void LogicalNotTest()
            {
                var parser = new StatementParser(new FakeScanner(new[] { Get("!"), Get(false) }));

                var result = parser.ParseAll();

                Assert.AreEqual(typeof(NotExpr), result.GetType());

                var expr = (NotExpr)result;

                Assert.AreEqual(typeof(ConstantExpr), expr.Right.GetType());
                Assert.AreEqual(false, ((ConstantExpr)expr.Right).Value);
            }
예제 #37
0
            public void SimpleDivision()
            {
                var parser = new StatementParser(new FakeScanner(new[] { Get(10), Get("/"), Get(5) }));

                var result = parser.ParseAll();

                Assert.AreEqual(typeof(DivExpr), result.GetType());

                var expr = (DivExpr)result;

                Assert.AreEqual(typeof(ConstantExpr), expr.Left.GetType());
                Assert.AreEqual(typeof(ConstantExpr), expr.Right.GetType());

                Assert.AreEqual(10, ((ConstantExpr)expr.Left).Value);
                Assert.AreEqual(5, ((ConstantExpr)expr.Right).Value);
            }
예제 #38
0
            public void MultPlusOperatorPrecedence()
            {
                var parser = new StatementParser(new FakeScanner(new[] { Get(3), Get("*"), Get(2), Get("+"), Get(5) }));

                var result = parser.ParseAll();

                Assert.AreEqual(typeof(PlusExpr), result.GetType());
            }
예제 #39
0
            public void FunctionDefinitionWithParametersTest()
            {
                var parser = new StatementParser(new FakeScanner(new[]
                {
                    Get("function"), Get("Multiply"), Get("("), Get("a"), Get(":"), Get("int"), Get(","), Get("b"), Get(":"), Get("int"), Get(")"),
                    Get("{"),
                        Get("return"), Get("a"), Get("*"), Get("b"), Get(";"),
                    Get("}")
                }));

                var result = parser.ParseAll();

                Assert.AreEqual(typeof(FunctionDefinitionExpr), result.GetType());

                var stmt = (FunctionDefinitionExpr)result;

                Assert.AreEqual("Multiply", stmt.Name);
                Assert.AreEqual(typeof(ScopeBlockStmt), stmt.Body.GetType());
            }
예제 #40
0
            public void FunctionCallWithMultipleParametersTest()
            {
                var parser = new StatementParser(new FakeScanner(new[]
                {
                    Get("Test"), Get("("), Get(1), Get(","), Get(2), Get(","), Get(3), Get(")"), Get(";"),
                }));

                var result = parser.ParseAll();

                Assert.AreEqual(typeof(FunctionCallExpr), result.GetType());

                var stmt = (FunctionCallExpr)result;

                Assert.AreEqual("Test", stmt.FunctionName.Name);
                Assert.AreEqual(3, stmt.Arguments.Count());

                Assert.AreEqual(1, ((ConstantExpr)stmt.Arguments.ElementAt(0)).Value);
                Assert.AreEqual(2, ((ConstantExpr)stmt.Arguments.ElementAt(1)).Value);
                Assert.AreEqual(3, ((ConstantExpr)stmt.Arguments.ElementAt(2)).Value);
            }
예제 #41
0
            public void SimpleParenthesis()
            {
                var parser = new StatementParser(new FakeScanner(new[] { Get("("), Get(1), Get(")") }));

                var result = parser.ParseAll();

                Assert.AreEqual(typeof(ConstantExpr), result.GetType());

                var expr = (ConstantExpr)result;

                Assert.AreEqual(1, expr.Value);
            }
예제 #42
0
            public void AndOrPrecedenceTest6()
            {
                var parser = new StatementParser(new FakeScanner(new[] { Get(true), Get("&&"), Get("("), Get(true), Get("||"), Get(false), Get(")") }));

                var result = parser.ParseAll();

                Assert.AreEqual(typeof(AndExpr), result.GetType());
            }
예제 #43
0
            public void NegationExpressionTest()
            {
                var parser = new StatementParser(new FakeScanner(new[] { Get("-"), Get(5) }));

                var result = parser.ParseAll();

                Assert.AreEqual(typeof(NegationExpr), result.GetType());

                var expr = (NegationExpr)result;

                Assert.AreEqual(typeof(ConstantExpr), expr.Right.GetType());
                Assert.AreEqual(5, ((ConstantExpr)expr.Right).Value);
            }
예제 #44
0
            public void NestedParenthesisOperatorPrecedence()
            {
                var parser = new StatementParser(new FakeScanner(new[] { Get("("), Get(2), Get("^"), Get("("), Get(3), Get("*"), Get(4), Get(")"), Get(")") }));

                var result = parser.ParseAll();

                Assert.AreEqual(typeof(PowExpr), result.GetType());
            }
예제 #45
0
            public void SubExpressionInAllPositionsTest()
            {
                var parser = new StatementParser(new FakeScanner(new[] { Get(true), Get("&&"), Get(false), Get("?"), Get(1234), Get("+"), Get(2345), Get(":"), Get(3), Get("^"), Get(2) }));

                var result = parser.ParseAll();

                Assert.AreEqual(typeof(ConditionalExpr), result.GetType());

                var expr = (ConditionalExpr)result;

                Assert.AreEqual(typeof(AndExpr), expr.Condition.GetType());
                Assert.AreEqual(typeof(PlusExpr), expr.ThenExpression.GetType());
                Assert.AreEqual(typeof(PowExpr), expr.ElseExpression.GetType());
            }
예제 #46
0
            public void ConditionalExpressionTest()
            {
                var parser = new StatementParser(new FakeScanner(new[] { Get(true), Get("?"), Get(1234), Get(":"), Get(5678) }));

                var result = parser.ParseAll();

                Assert.AreEqual(typeof(ConditionalExpr), result.GetType());

                var expr = (ConditionalExpr)result;

                Assert.AreEqual(typeof(ConstantExpr), expr.Condition.GetType());
                Assert.AreEqual(typeof(ConstantExpr), expr.ThenExpression.GetType());
                Assert.AreEqual(typeof(ConstantExpr), expr.ElseExpression.GetType());

                Assert.AreEqual(true, ((ConstantExpr)expr.Condition).Value);
                Assert.AreEqual(1234, ((ConstantExpr)expr.ThenExpression).Value);
                Assert.AreEqual(5678, ((ConstantExpr)expr.ElseExpression).Value);
            }
예제 #47
0
            public void LogicalNotPrecedenceTest()
            {
                var parser = new StatementParser(new FakeScanner(new[] { Get(true), Get("&&"), Get("!"), Get(false) }));

                var result = parser.ParseAll();

                Assert.AreEqual(typeof(AndExpr), result.GetType());

                var expr = (AndExpr)result;

                Assert.AreEqual(typeof(ConstantExpr), expr.Left.GetType());
                Assert.AreEqual(typeof(NotExpr), expr.Right.GetType());
            }
예제 #48
0
            public void IfIfElseStatementNoBlocks()
            {
                var parser = new StatementParser(new FakeScanner(new[]
                {
                    Get("if"), Get("("), Get(true), Get(")"),
                        Get("if"), Get("("), Get(false), Get(")"),
                            Get("a"), Get("="), Get("b"), Get("+"), Get(1), Get(";"),
                        Get("else"),
                            Get("c"), Get("="), Get("d"), Get("+"), Get(2), Get(";"),
                }));

                var result = parser.ParseAll();

                Assert.AreEqual(typeof(IfStmt), result.GetType());

                var stmt = (IfStmt)result;

                Assert.AreEqual(typeof(ConstantExpr), stmt.Condition.GetType());
                Assert.AreEqual(true, ((ConstantExpr)stmt.Condition).Value);

                Assert.AreEqual(typeof(IfStmt), stmt.ThenExpression.GetType());
                Assert.AreEqual(typeof(NoOpStatement), stmt.ElseExpression.GetType());

                var innerIf = (IfStmt)stmt.ThenExpression;
                Assert.AreEqual(typeof(ConstantExpr), innerIf.Condition.GetType());
                Assert.AreEqual(false, ((ConstantExpr)innerIf.Condition).Value);
            }
예제 #49
0
            public void FunctionCallTest()
            {
                var parser = new StatementParser(new FakeScanner(new[]
                {
                    Get("Test"), Get("("), Get(")"), Get(";"),
                }));

                var result = parser.ParseAll();

                Assert.AreEqual(typeof(FunctionCallExpr), result.GetType());

                var stmt = (FunctionCallExpr)result;

                Assert.AreEqual("Test", stmt.FunctionName.Name);
                Assert.AreEqual(0, stmt.Arguments.Count());
            }
예제 #50
0
            public void MoreComplexAssignment()
            {
                var parser = new StatementParser(new FakeScanner(new[] { Get("a"), Get("="), Get("b"), Get("+"), Get(1), Get("*"), Get(5), Get("-"), Get(4) }));

                var result = parser.ParseAll();

                Assert.AreEqual(typeof(AssignmentExpr), result.GetType());

                var expr = (AssignmentExpr)result;

                Assert.AreEqual(typeof(IdentifierExpr), expr.Left.GetType());
                Assert.AreEqual(typeof(MinusExpr), expr.Right.GetType());
            }
예제 #51
0
            public void FunctionCallWithMultipleExpressionParametersTest()
            {
                var parser = new StatementParser(new FakeScanner(new[]
                {
                    Get("Test"), Get("("), Get(1), Get("+"), Get(2), Get("*"), Get(5), Get(","), Get(1), Get("*"), Get(2), Get(")"), Get(";"),
                }));

                var result = parser.ParseAll();

                Assert.AreEqual(typeof(FunctionCallExpr), result.GetType());

                var stmt = (FunctionCallExpr)result;

                Assert.AreEqual("Test", stmt.FunctionName.Name);
                Assert.AreEqual(2, stmt.Arguments.Count());
                Assert.AreEqual(typeof(PlusExpr), stmt.Arguments.ElementAt(0).GetType());
                Assert.AreEqual(typeof(MultExpr), stmt.Arguments.ElementAt(1).GetType());
            }
예제 #52
0
            public void WhileStatementWithBlock()
            {
                var parser = new StatementParser(new FakeScanner(new[] { Get("while"), Get("("), Get(1), Get("!="), Get(3), Get(")"), Get("{"), Get("a"), Get("="), Get("b"), Get("+"), Get(1), Get(";"), Get("}") }));

                var result = parser.ParseAll();

                Assert.AreEqual(typeof(WhileStmt), result.GetType());

                var expr = (WhileStmt)result;

                Assert.AreEqual(typeof(NotEqualsExpr), expr.Condition.GetType());
                Assert.AreEqual(typeof(ScopeBlockStmt), expr.Block.GetType());

                var block = (ScopeBlockStmt)expr.Block;
                Assert.AreEqual(1, block.Statements.Count());
                Assert.AreEqual(typeof(AssignmentExpr), block.Statements.ElementAt(0).GetType());
            }
예제 #53
0
            public void PowDivOperatorPrecedence()
            {
                var parser = new StatementParser(new FakeScanner(new[] { Get(3), Get("^"), Get(2), Get("/"), Get(5) }));

                var result = parser.ParseAll();

                Assert.AreEqual(typeof(DivExpr), result.GetType());
            }
예제 #54
0
            public void WhileStatementSingle()
            {
                var parser = new StatementParser(new FakeScanner(new[] { Get("while"), Get("("), Get(1), Get("!="), Get(3), Get(")"), Get("a"), Get("="), Get("b"), Get("+"), Get(1), Get(";") }));

                var result = parser.ParseAll();

                Assert.AreEqual(typeof(WhileStmt), result.GetType());

                var expr = (WhileStmt)result;

                Assert.AreEqual(typeof(NotEqualsExpr), expr.Condition.GetType());
                Assert.AreEqual(typeof(AssignmentExpr), expr.Block.GetType());
            }
예제 #55
0
            public void SimplePower()
            {
                var parser = new StatementParser(new FakeScanner(new[] { Get(3), Get("^"), Get(2) }));

                var result = parser.ParseAll();

                Assert.AreEqual(typeof(PowExpr), result.GetType());

                var expr = (PowExpr)result;

                Assert.AreEqual(typeof(ConstantExpr), expr.Left.GetType());
                Assert.AreEqual(typeof(ConstantExpr), expr.Right.GetType());

                Assert.AreEqual(3, ((ConstantExpr)expr.Left).Value);
                Assert.AreEqual(2, ((ConstantExpr)expr.Right).Value);
            }
예제 #56
0
            public void WhileStatementWithExpressionBlock()
            {
                var parser = new StatementParser(new FakeScanner(new[] { Get("while"), Get("("), Get(1), Get("!="), Get(3), Get(")"), Get("{"), Get("b"), Get("+"), Get(1), Get(";"), Get("}") }));

                parser.ParseAll();
            }
예제 #57
0
            public void BlockStatement()
            {
                var parser = new StatementParser(new FakeScanner(new[] { Get("{"), Get("a"), Get("="), Get("b"), Get("+"), Get(1), Get(";"), Get("}") }));

                var result = parser.ParseAll();

                Assert.AreEqual(typeof(ScopeBlockStmt), result.GetType());
            }
예제 #58
0
            public void IfStatementWithBlock()
            {
                var parser = new StatementParser(new FakeScanner(new[]
                {
                    Get("if"), Get("("), Get(1), Get("!="), Get(3), Get(")"),
                    Get("{"),
                        Get("a"), Get("="), Get("b"), Get("+"), Get(1), Get(";"),
                    Get("}")
                }));

                var result = parser.ParseAll();

                Assert.AreEqual(typeof(IfStmt), result.GetType());

                var stmt = (IfStmt) result;

                Assert.AreEqual(typeof(NotEqualsExpr), stmt.Condition.GetType());
                Assert.AreEqual(typeof(ScopeBlockStmt), stmt.ThenExpression.GetType());
                Assert.AreEqual(typeof(NoOpStatement), stmt.ElseExpression.GetType());
            }
예제 #59
0
            public void DefaultOperatorPrecedenceAsCounterExampleToAbove()
            {
                var parser = new StatementParser(new FakeScanner(new[] { Get(2), Get("^"), Get(3), Get("*"), Get(4) }));

                var result = parser.ParseAll();

                Assert.AreEqual(typeof(MultExpr), result.GetType());
            }
예제 #60
0
            public void LessThanOrEqualToTest()
            {
                var parser = new StatementParser(new FakeScanner(new[] { Get(2), Get("<="), Get(3) }));

                var result = parser.ParseAll();

                Assert.AreEqual(typeof(LessThanOrEqualsExpr), result.GetType());

                var expr = (LessThanOrEqualsExpr)result;

                Assert.AreEqual(typeof(ConstantExpr), expr.Left.GetType());
                Assert.AreEqual(typeof(ConstantExpr), expr.Right.GetType());

                Assert.AreEqual(2, ((ConstantExpr)expr.Left).Value);
                Assert.AreEqual(3, ((ConstantExpr)expr.Right).Value);
            }