Пример #1
0
        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());
                }
            }
        }
Пример #2
0
        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 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());
		}
Пример #4
0
        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());
        }
Пример #5
0
		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 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());
		}