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); } }
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); } }
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); } }