private void ParserTest(string content, Block document, TagProvidersCollection providers = null) { providers = providers ?? TagProvidersCollection.Default; var output = new StringBuilder(); using (var reader = new StringReader(content)) { using (var source = new SeekableTextReader(reader)) { var errors = new ParserErrorSink(); var parser = new HandlebarsParser(); var context = new ParserContext(source, parser, errors, providers); parser.Context = context; parser.ParseDocument(); var results = context.CompleteParse(); var comparer = new EquivalanceComparer(output, 0); Assert.True(comparer.Equals(document, results.Document), output.ToString()); } } }
public void CollapsesPreviousWhiteSpace() { var factory = new Factory(); // "Hello {{~test}}" var document = factory.Document( factory.Text("Hello"), factory.WhiteSpace(1), factory.Expression( factory.MetaCode("{{", T.OpenTag), factory.MetaCode("~", T.Tilde), factory.Span(SpanKind.Expression, factory.Symbol("this", T.Identifier)), factory.MetaCode("}}", T.CloseTag))); factory = new Factory(); // "Hello{{~test}}" var expected = factory.Document( factory.Text("Hello"), factory.WhiteSpace(1, collapsed: true), factory.Expression( factory.MetaCode("{{", T.OpenTag), factory.MetaCode("~", T.Tilde), factory.Span(SpanKind.Expression, factory.Symbol("this", T.Identifier)), factory.MetaCode("}}", T.CloseTag))); var visitor = new WhiteSpaceCollapsingParserVisitor(); visitor.VisitBlock(document); var builder = new StringBuilder(); var comparer = new EquivalanceComparer(builder, 0); Assert.True(comparer.Equals(expected, document), builder.ToString()); }
public void CollapsesWhiteSpaceInParentBlocks() { var factory = new Factory(); // "Message:{{#this~}} Hello {{~/this~}} There" var document = factory.Document( factory.Text("Message:"), factory.Tag("this", factory.TagElement("this", factory.MetaCode("{{", T.OpenTag), factory.MetaCode("#", T.Hash), factory.Expression(factory.Parameter("this")), factory.MetaCode("~", T.Tilde), factory.MetaCode("}}", T.CloseTag)), factory.WhiteSpace(1), factory.Text("Hello"), factory.WhiteSpace(1), factory.TagElement("this", factory.MetaCode("{{", T.OpenTag), factory.MetaCode("~", T.Tilde), factory.MetaCode("/", T.Slash), factory.Expression(factory.Parameter("this")), factory.MetaCode("~", T.Tilde), factory.MetaCode("}}", T.CloseTag))), factory.WhiteSpace(1), factory.Text("There")); factory = new Factory(); // "Message:{{#this~}}Hello{{~/this~}}There" var expected = factory.Document( factory.Text("Message:"), factory.Tag("this", factory.TagElement("this", factory.MetaCode("{{", T.OpenTag), factory.MetaCode("#", T.Hash), factory.Expression(factory.Parameter("this")), factory.MetaCode("~", T.Tilde), factory.MetaCode("}}", T.CloseTag)), factory.WhiteSpace(1, collapsed: true), factory.Text("Hello"), factory.WhiteSpace(1, collapsed: true), factory.TagElement("this", factory.MetaCode("{{", T.OpenTag), factory.MetaCode("~", T.Tilde), factory.MetaCode("/", T.Slash), factory.Expression(factory.Parameter("this")), factory.MetaCode("~", T.Tilde), factory.MetaCode("}}", T.CloseTag))), factory.WhiteSpace(1, collapsed: true), factory.Text("There")); var visitor = new WhiteSpaceCollapsingParserVisitor(); visitor.VisitBlock(document); var builder = new StringBuilder(); var comparer = new EquivalanceComparer(builder, 0); Assert.True(comparer.Equals(expected, document), builder.ToString()); }