Ejemplo n.º 1
0
        public void CommentParsingTest()
        {
            const string testString =
                "<!--Comment--><tag><!-- New Comment with <tag> and \t\n\t some whitespace --></tag>";

            var expectedLexemes = new[]
            {
                LexemeType.Comment,
                LexemeType.LessThanSymbol,
                LexemeType.Identifier,
                LexemeType.GreaterThanSymbol,
                LexemeType.Comment,
                LexemeType.LessThanSymbol,
                LexemeType.SlashSymbol,
                LexemeType.Identifier,
                LexemeType.GreaterThanSymbol
            };

            var bufferReader = new StringBufferReader(testString);
            var lexemeReader = new DfaLexemeReader(new DefaultDfaStateContainer(bufferReader.AdvanceBuffer), bufferReader);

            foreach (var lexemeType in expectedLexemes)
            {
                var lexeme = lexemeReader.GetNextLexemeFromBuffer(lexemeType);
                Assert.AreEqual(lexemeType, lexeme.Type);
            }
        }
Ejemplo n.º 2
0
        public void DfaTerminalLexemeReadingTest()
        {
            const string testString = ":\"'=/><?";

            var expectedLexemes = new[]
            {
                LexemeType.ColonSymbol,
                LexemeType.DoubleQuoteSymbol,
                LexemeType.SingleQuoteSymbol,
                LexemeType.EqualSymbol,
                LexemeType.SlashSymbol,
                LexemeType.GreaterThanSymbol,
                LexemeType.LessThanSymbol,
                LexemeType.QuestionMarkSymbol,
                LexemeType.Eof
            };

            var bufferReader = new StringBufferReader(testString);

            var lexemeReader = new DfaLexemeReader(new DefaultDfaStateContainer(bufferReader.AdvanceBuffer), bufferReader);

            foreach (var lexemeType in expectedLexemes)
            {
                var lexeme = lexemeReader.GetNextLexemeFromBuffer();
                Assert.AreEqual(lexemeType, lexeme.Type);
            }
        }
Ejemplo n.º 3
0
        public void XmlPrologLexemeizingTest()
        {
            const string testString = "<?xml version=\"1.0\" encoding='UTF-8'?>";

            var expectedLexemes = new[]
            {
                LexemeType.LessThanSymbol,
                LexemeType.QuestionMarkSymbol,
                LexemeType.Identifier,
                LexemeType.WhitespaceSymbol,
                LexemeType.Identifier,
                LexemeType.EqualSymbol,
                LexemeType.DoubleQuoteSymbol,
                LexemeType.Version,
                LexemeType.DoubleQuoteSymbol,
                LexemeType.WhitespaceSymbol,
                LexemeType.Identifier,
                LexemeType.EqualSymbol,
                LexemeType.SingleQuoteSymbol,
                LexemeType.Identifier,
                LexemeType.SingleQuoteSymbol,
                LexemeType.QuestionMarkSymbol,
                LexemeType.GreaterThanSymbol,
                LexemeType.Eof
            };

            var expectedIdentifiers = new[]
            {
                "xml",
                "version",
                "encoding",
                "UTF-8"
            };

            var expectedIdentifierIndex = 0;

            var bufferReader = new StringBufferReader(testString);
            var lexemeReader = new DfaLexemeReader(new DefaultDfaStateContainer(bufferReader.AdvanceBuffer), bufferReader);

            foreach (var lexemeType in expectedLexemes)
            {
                var lexeme = lexemeReader.GetNextLexemeFromBuffer(lexemeType);
                Assert.AreEqual(lexemeType, lexeme.Type);

                if (lexeme.Type == LexemeType.Identifier)
                {
                    Assert.AreEqual(expectedIdentifiers[expectedIdentifierIndex++], lexeme.Literal);
                }
            }
        }
Ejemplo n.º 4
0
        public void DfaWhitespaceOnlyLexemeReadingTest()
        {
            const string testString = " \t\n  ";

            var expectedLexemes = new[]
            {
                LexemeType.WhitespaceSymbol,
                LexemeType.Eof
            };

            var bufferReader = new StringBufferReader(testString);

            var lexemeReader = new DfaLexemeReader(new DefaultDfaStateContainer(bufferReader.AdvanceBuffer), bufferReader);

            foreach (var lexemeType in expectedLexemes)
            {
                var lexeme = lexemeReader.GetNextLexemeFromBuffer();
                Assert.AreEqual(lexemeType, lexeme.Type);
            }
        }
Ejemplo n.º 5
0
        public void TagParsingTest()
        {
            const string testString =
                "<Parent attrib=\"New Attribute\">\n\t<Child/>\n\t<Child>Some info</Child><Child id='2'/>\n</Parent>";

            var expectedLexemes = new[]
            {
                LexemeType.LessThanSymbol,
                LexemeType.Identifier,
                LexemeType.WhitespaceSymbol,
                LexemeType.Identifier,
                LexemeType.EqualSymbol,
                LexemeType.DoubleQuoteSymbol,
                LexemeType.Data,
                LexemeType.DoubleQuoteSymbol,
                LexemeType.GreaterThanSymbol,
                LexemeType.WhitespaceSymbol,
                LexemeType.LessThanSymbol,
                LexemeType.Identifier,
                LexemeType.SlashSymbol,
                LexemeType.GreaterThanSymbol,
                LexemeType.WhitespaceSymbol,
                LexemeType.LessThanSymbol,
                LexemeType.Identifier,
                LexemeType.GreaterThanSymbol,
                LexemeType.Data,
                LexemeType.LessThanSymbol,
                LexemeType.SlashSymbol,
                LexemeType.Identifier,
                LexemeType.GreaterThanSymbol,
                LexemeType.LessThanSymbol,
                LexemeType.Identifier,
                LexemeType.WhitespaceSymbol,
                LexemeType.Identifier,
                LexemeType.EqualSymbol,
                LexemeType.SingleQuoteSymbol,
                LexemeType.Data,
                LexemeType.SingleQuoteSymbol,
                LexemeType.SlashSymbol,
                LexemeType.GreaterThanSymbol,
                LexemeType.WhitespaceSymbol,
                LexemeType.LessThanSymbol,
                LexemeType.SlashSymbol,
                LexemeType.Identifier,
                LexemeType.GreaterThanSymbol,
                LexemeType.Eof
            };

            var expectedLiterals = new[]
            {
                "Parent",
                "attrib",
                "New Attribute",
                "Child",
                "Child",
                "Some info",
                "Child",
                "Child",
                "id",
                "2",
                "Parent"
            };

            var expectedIdentifierIndex = 0;

            var bufferReader = new StringBufferReader(testString);
            var lexemeReader = new DfaLexemeReader(new DefaultDfaStateContainer(bufferReader.AdvanceBuffer), bufferReader);

            foreach (var lexemeType in expectedLexemes)
            {
                var lexeme = lexemeReader.GetNextLexemeFromBuffer(lexemeType);
                Assert.AreEqual(lexemeType, lexeme.Type);

                if (lexeme.Type == LexemeType.Identifier ||
                    lexeme.Type == LexemeType.Data)
                {
                    Assert.AreEqual(expectedLiterals[expectedIdentifierIndex++], lexeme.Literal);
                }
            }
        }