Пример #1
0
        public async Task ForEvaluatesMemberOptionsOffsetOnly()
        {
            var context = new TemplateContext()
                          .SetValue("offset", 3)
            ;

            var e = new ForStatement(
                new List <Statement> {
                CreateMemberStatement("i")
            },
                "i",
                new RangeExpression(
                    new LiteralExpression(NumberValue.Create(1)),
                    new LiteralExpression(NumberValue.Create(5))
                    ),
                null,
                new MemberExpression(new IdentifierSegment("offset")),
                true
                );

            var sw = new StringWriter();
            await e.WriteToAsync(sw, HtmlEncoder.Default, context);

            Assert.Equal("54", sw.ToString());
        }
Пример #2
0
        public async Task ShouldUseCurrentContext()
        {
            var e = new ForStatement(
                new List <Statement> {
                new AssignStatement("z", new LiteralExpression(NumberValue.Create(1)))
            },
                "i",
                new RangeExpression(
                    new LiteralExpression(NumberValue.Create(1)),
                    new LiteralExpression(NumberValue.Create(3))
                    ),
                null, null, false
                );

            var t = new TemplateContext();

            t.SetValue("z", 0);

            Assert.Equal(0, t.GetValue("z").ToNumberValue());

            var sw = new StringWriter();
            await e.WriteToAsync(sw, HtmlEncoder.Default, t);

            Assert.Equal(1, t.GetValue("z").ToNumberValue());
        }
Пример #3
0
        public async Task ForShouldProvideHelperVariables()
        {
            var e = new ForStatement(
                new List <Statement> {
                CreateMemberStatement("forloop.length"),
                CreateMemberStatement("forloop.index"),
                CreateMemberStatement("forloop.index0"),
                CreateMemberStatement("forloop.rindex"),
                CreateMemberStatement("forloop.rindex0"),
                CreateMemberStatement("forloop.first"),
                CreateMemberStatement("forloop.last")
            },
                "i",
                new MemberExpression(
                    new IdentifierSegment("items")
                    ),
                null, null, false
                );

            var sw      = new StringWriter();
            var context = new TemplateContext();

            context.SetValue("items", new[] { 1, 2, 3 });
            await e.WriteToAsync(sw, HtmlEncoder.Default, context);

            Assert.Equal("31023truefalse32112falsefalse33201falsetrue", sw.ToString());
        }
Пример #4
0
        public async Task ForShouldBeNestable()
        {
            var nested = new ForStatement(
                new List <Statement> {
                CreateMemberStatement("forloop.index")
            },
                "j",
                new MemberExpression(
                    new IdentifierSegment("items")
                    ),
                null, null, false
                );

            var outer = new ForStatement(
                new List <Statement> {
                CreateMemberStatement("forloop.index"),
                nested
            },
                "i",
                new MemberExpression(
                    new IdentifierSegment("items")
                    ),
                null, null, false
                );

            var sw      = new StringWriter();
            var context = new TemplateContext();

            context.SetValue("items", new[] { 1, 2, 3 });
            await outer.WriteToAsync(sw, HtmlEncoder.Default, context);

            Assert.Equal("112321233123", sw.ToString());
        }
Пример #5
0
        public async Task NegativeLimitShouldStripFromEnd()
        {
            var context = new TemplateContext()
                          .SetValue("limit", -3)
            ;

            var e = new ForStatement(
                new List <Statement> {
                CreateMemberStatement("i")
            },
                "i",
                new RangeExpression(
                    new LiteralExpression(NumberValue.Create(1)),
                    new LiteralExpression(NumberValue.Create(9))
                    ),
                new MemberExpression(new IdentifierSegment("limit")),
                offset: null,
                false
                );

            var sw = new StringWriter();
            await e.WriteToAsync(sw, HtmlEncoder.Default, context);

            Assert.Equal("123456", sw.ToString());
        }
        public async Task ShouldLoopRange()
        {
            var e = new ForStatement(
                new[] { new TextStatement("x") },
                "i",
                new RangeExpression(
                    new LiteralExpression(new NumberValue(1)),
                    new LiteralExpression(new NumberValue(3))
                    ),
                null, null, false
                );

            var sw = new StringWriter();
            await e.WriteToAsync(sw, HtmlEncoder.Default, new TemplateContext());

            Assert.Equal("xxx", sw.ToString());
        }
Пример #7
0
        public async Task ZeroBasedLoopRangeShouldNotHasExtraStep()
        {
            var e = new ForStatement(
                new List <Statement> {
                new TextStatement("x")
            },
                "i",
                new RangeExpression(
                    new LiteralExpression(NumberValue.Create(0)),
                    new LiteralExpression(NumberValue.Create(1))
                    ),
                null, null, false
                );

            var sw = new StringWriter();
            await e.WriteToAsync(sw, HtmlEncoder.Default, new TemplateContext());

            Assert.Equal("xx", sw.ToString());
        }
Пример #8
0
        public async Task InvalidRangeShouldNotRenderLoop()
        {
            var e = new ForStatement(
                new List <Statement> {
                new TextSpanStatement("x")
            },
                "i",
                new RangeExpression(
                    new LiteralExpression(NumberValue.Create(-10)),
                    new LiteralExpression(NumberValue.Create(-20))
                    ),
                null, null, false
                );

            var sw = new StringWriter();
            await e.WriteToAsync(sw, HtmlEncoder.Default, new TemplateContext());

            Assert.Equal("", sw.ToString());
        }
        public async Task ShouldLoopArrays()
        {
            var e = new ForStatement(
                new[] { new TextStatement("x") },
                "i",
                new MemberExpression(
                    new IdentifierSegment("items")
                    ),
                null, null, false
                );

            var sw      = new StringWriter();
            var context = new TemplateContext();

            context.SetValue("items", new[] { 1, 2, 3 });
            await e.WriteToAsync(sw, HtmlEncoder.Default, context);

            Assert.Equal("xxx", sw.ToString());
        }
        public async Task ForEvaluatesOptions()
        {
            var e = new ForStatement(
                new[] { CreateMemberStatement("i") },
                "i",
                new RangeExpression(
                    new LiteralExpression(new NumberValue(1)),
                    new LiteralExpression(new NumberValue(5))
                    ),
                new LiteralExpression(new NumberValue(3)),
                new LiteralExpression(new NumberValue(2)),
                true
                );

            var sw = new StringWriter();
            await e.WriteToAsync(sw, HtmlEncoder.Default, new TemplateContext());

            Assert.Equal("543", sw.ToString());
        }
Пример #11
0
        public async Task ShouldNotExecuteElseOnNonEmptyArray()
        {
            var e = new ForStatement(
                new List <Statement> {
                new TextSpanStatement("x")
            },
                "i",
                new MemberExpression(
                    new IdentifierSegment("items")
                    ),
                null, null, false,
                new ElseStatement(new List <Statement> {
                new TextSpanStatement("y")
            })
                );

            var sw      = new StringWriter();
            var context = new TemplateContext();

            context.SetValue("items", new int[] { 1, 2, 3 });
            await e.WriteToAsync(sw, HtmlEncoder.Default, context);

            Assert.Equal("xxx", sw.ToString());
        }