Example #1
0
        public void DontTokenize()
        {
            TestParseLineDelimiter delims = new TestParseLineDelimiter();

            {	// everything inside {{ }} gets passed through as-is
                DelimiterList list = ParseLine.Do("asdf {{ qwert ( yuiop }} ghjkl", delims);
                Assert.AreEqual(ValueDelimiter.Line, list.Delimiter);
                Assert.AreEqual(3, list.Nodes.Count);
                Assert.AreEqual("asdf", list.Nodes[0].Token.Value);
                Assert.AreEqual("ghjkl", list.Nodes[2].Token.Value);

                DelimiterList sublist = list.Nodes[1].List;
                Assert.AreEqual("}}", sublist.Delimiter.End);
                Assert.AreEqual(1, sublist.Nodes.Count);
                Assert.AreEqual("qwert ( yuiop", sublist.Nodes[0].Token.Value);
            }

            {	// everything inside /* */ is a comment and is ignored
                DelimiterList list = ParseLine.Do("asdf /* qwert ( yuiop */ ghjkl", delims);
                Assert.AreEqual(ValueDelimiter.Line, list.Delimiter);
                Assert.AreEqual(2, list.Nodes.Count);
                Assert.AreEqual("asdf", list.Nodes[0].Token.Value);
                Assert.AreEqual("ghjkl", list.Nodes[1].Token.Value);
            }
        }
Example #2
0
        public void GlommedOn()
        {
            TestParseLineDelimiter delims = new TestParseLineDelimiter();

            {	// front delimiter is part of its first token
                DelimiterList list = ParseLine.Do("asdf (qwert yuiop ) ghjkl", delims);
                Assert.AreEqual(ValueDelimiter.Line, list.Delimiter);
                Assert.AreEqual(3, list.Nodes.Count);
                Assert.AreEqual("asdf", list.Nodes[0].Token.Value);
                Assert.AreEqual("ghjkl", list.Nodes[2].Token.Value);

                DelimiterList sublist = list.Nodes[1].List;
                Assert.AreEqual(")", sublist.Delimiter.End);
                Assert.AreEqual(2, sublist.Nodes.Count);
                Assert.AreEqual("qwert", sublist.Nodes[0].Token.Value);
                Assert.AreEqual("yuiop", sublist.Nodes[1].Token.Value);
            }

            {	// front delimiter is part of its first token
                DelimiterList list = ParseLine.Do(":a v= \"\"", delims);
                Assert.AreEqual(ValueDelimiter.Line, list.Delimiter);
                Assert.AreEqual(4, list.Nodes.Count);
                Assert.AreEqual(":a", list.Nodes[0].Token.Value);
                Assert.AreEqual("v=", list.Nodes[1].Token.Value);
                Assert.AreEqual("\"", list.Nodes[2].Token.Value);
                Assert.AreEqual("\"", list.Nodes[3].Token.Value);
            }

            {	// end delimiter is part of its last token
                DelimiterList list = ParseLine.Do("asdf ( qwert yuiop) ghjkl", delims);
                Assert.AreEqual(ValueDelimiter.Line, list.Delimiter);
                Assert.AreEqual(3, list.Nodes.Count);
                Assert.AreEqual("asdf", list.Nodes[0].Token.Value);
                Assert.AreEqual("ghjkl", list.Nodes[2].Token.Value);

                DelimiterList sublist = list.Nodes[1].List;
                Assert.AreEqual(")", sublist.Delimiter.End);
                Assert.AreEqual(2, sublist.Nodes.Count);
                Assert.AreEqual("qwert", sublist.Nodes[0].Token.Value);
                Assert.AreEqual("yuiop", sublist.Nodes[1].Token.Value);
            }

            {	// delimiter is part of both start & end tokens
                DelimiterList list = ParseLine.Do("asdf (qwert yuiop) ghjkl", delims);
                Assert.AreEqual(ValueDelimiter.Line, list.Delimiter);
                Assert.AreEqual(3, list.Nodes.Count);
                Assert.AreEqual("asdf", list.Nodes[0].Token.Value);
                Assert.AreEqual("ghjkl", list.Nodes[2].Token.Value);

                DelimiterList sublist = list.Nodes[1].List;
                Assert.AreEqual(")", sublist.Delimiter.End);
                Assert.AreEqual(2, sublist.Nodes.Count);
                Assert.AreEqual("qwert", sublist.Nodes[0].Token.Value);
                Assert.AreEqual("yuiop", sublist.Nodes[1].Token.Value);
            }

            {	// delimiter is part of both start & end tokens
                DelimiterList list = ParseLine.Do("asdf (qwert yuiop)", delims);
                Assert.AreEqual(ValueDelimiter.Line, list.Delimiter);
                Assert.AreEqual(2, list.Nodes.Count);
                Assert.AreEqual("asdf", list.Nodes[0].Token.Value);

                DelimiterList sublist = list.Nodes[1].List;
                Assert.AreEqual(")", sublist.Delimiter.End);
                Assert.AreEqual(2, sublist.Nodes.Count);
                Assert.AreEqual("qwert", sublist.Nodes[0].Token.Value);
                Assert.AreEqual("yuiop", sublist.Nodes[1].Token.Value);
            }
        }
Example #3
0
        public void SeparateDelimiters()
        {
            TestParseLineDelimiter delims = new TestParseLineDelimiter();

            {	// delimiters are separate tokens
                DelimiterList list = ParseLine.Do("asdf ( qwert yuiop ) ghjkl", delims);
                Assert.AreEqual(ValueDelimiter.Line, list.Delimiter);
                Assert.AreEqual(3, list.Nodes.Count);
                Assert.AreEqual("asdf", list.Nodes[0].Token.Value);
                Assert.AreEqual("ghjkl", list.Nodes[2].Token.Value);

                DelimiterList sublist = list.Nodes[1].List;
                Assert.AreEqual(")", sublist.Delimiter.End);
                Assert.AreEqual(2, sublist.Nodes.Count);
                Assert.AreEqual("qwert", sublist.Nodes[0].Token.Value);
                Assert.AreEqual("yuiop", sublist.Nodes[1].Token.Value);
            }

            {	// nested different delimiters
                DelimiterList list = ParseLine.Do("a ( b <[ c ]> d ) e", delims);
                Assert.AreEqual(ValueDelimiter.Line, list.Delimiter);
                Assert.AreEqual(3, list.Nodes.Count);
                Assert.AreEqual("a", list.Nodes[0].Token.Value);
                Assert.AreEqual("e", list.Nodes[2].Token.Value);

                DelimiterList sublist = list.Nodes[1].List;
                Assert.AreEqual(")", sublist.Delimiter.End);
                Assert.AreEqual(3, sublist.Nodes.Count);
                Assert.AreEqual("b", sublist.Nodes[0].Token.Value);
                Assert.AreEqual("d", sublist.Nodes[2].Token.Value);

                DelimiterList subsublist = sublist.Nodes[1].List;
                Assert.AreEqual("]>", subsublist.Delimiter.End);
                Assert.AreEqual(1, subsublist.Nodes.Count);
                Assert.AreEqual("c", subsublist.Nodes[0].Token.Value);
            }

            {	// nested same delimiters
                DelimiterList list = ParseLine.Do("a ( b ( c ) d ) e", delims);
                Assert.AreEqual(ValueDelimiter.Line, list.Delimiter);
                Assert.AreEqual(3, list.Nodes.Count);
                Assert.AreEqual("a", list.Nodes[0].Token.Value);
                Assert.AreEqual("e", list.Nodes[2].Token.Value);

                DelimiterList sublist = list.Nodes[1].List;
                Assert.AreEqual(")", sublist.Delimiter.End);
                Assert.AreEqual(3, sublist.Nodes.Count);
                Assert.AreEqual("b", sublist.Nodes[0].Token.Value);
                Assert.AreEqual("d", sublist.Nodes[2].Token.Value);

                DelimiterList subsublist = sublist.Nodes[1].List;
                Assert.AreEqual(")", subsublist.Delimiter.End);
                Assert.AreEqual(1, subsublist.Nodes.Count);
                Assert.AreEqual("c", subsublist.Nodes[0].Token.Value);
            }
        }