public void TestClone(){ CodeParser parser1 = new CodeParser("abc__efg"){ IsWhiteSpace = chr => chr == '_' }; parser1.SkipTo('_').SkipSpaces(); Assert.AreEqual('e', parser1.Char); // cloned with same code CodeParser parser2 = parser1.Clone(); Assert.AreEqual('a', parser2.Char); parser2.SkipTo('_').SkipSpaces(); Assert.AreEqual('e', parser2.Char); // cloned with different code CodeParser parser3 = parser1.Clone("x_z"); Assert.AreEqual('x', parser3.Char); parser3.Skip().SkipSpaces(); Assert.AreEqual('z', parser3.Char); }
public void TestValidSkipAndRead(){ const string code = " \n x yz { content { more } abc }"; // base CodeParser parser = new CodeParser(code); Assert.AreEqual(' ', parser.Char); Assert.IsFalse(parser.IsEOF); parser.SkipSpaces(); Assert.AreEqual('x', parser.Char); parser.SkipTo('y'); Assert.AreEqual('y', parser.Char); Assert.AreEqual('z', parser.Next()); Assert.AreEqual('z', parser.Char); // block 1 CodeParser block1 = parser.ReadBlock('{', '}'); CodeParser block1Cloned = block1.Clone(); Assert.AreEqual(" content { more } abc ", block1.Contents); block1.SkipSpaces(); Assert.AreEqual('c', block1.Char); block1Cloned.SkipTo('}').SkipTo('a').Skip(); Assert.AreEqual('b', block1Cloned.Char); // block 2 CodeParser block2 = block1.ReadBlock('{', '}'); Assert.AreEqual(" more ", block2.Contents); // block 1 Assert.AreEqual(' ', block1.Char); Assert.IsFalse(block1.IsEOF); // base Assert.AreEqual('\0', parser.Char); Assert.IsTrue(parser.IsEOF); // reset + ReadTo CodeParser parserNew1 = new CodeParser(code); Assert.AreEqual("x y", parserNew1.SkipSpaces().ReadTo('z').Contents); Assert.AreEqual('z', parserNew1.Char); // reset + ReadToSkip CodeParser parserNew2 = new CodeParser(code); Assert.AreEqual("x y", parserNew2.SkipSpaces().ReadToSkip('z').Contents); Assert.AreEqual(' ', parserNew2.Char); }