Example #1
0
        private static LiquidTemplate CreateRenderer(IList<LiquidError> errors, string erroneousTemplate)
        {
            var liquidAstGenerator = new LiquidASTGenerator();
            OnParsingErrorEventHandler liquidAstGeneratorParsingErrorEventHandler = errors.Add;

            liquidAstGenerator.ParsingErrorEventHandler += liquidAstGeneratorParsingErrorEventHandler;
            var liquidAst = liquidAstGenerator.Generate(erroneousTemplate);

            var template = new LiquidTemplate(liquidAst);
            return template;
        }
Example #2
0
        public void It_Should_Allow_A_Variable_With_Int_Index()
        {
            // Arrange
            ITemplateContext ctx =
                new TemplateContext().WithAllFilters();
            LiquidCollection arr = new LiquidCollection {
                LiquidNumeric.Create(33)
            };

            ctx.DefineLocalVariable("bar", arr);
            var template = LiquidTemplate.Create("{{ 1 | plus: bar[0]  }}");

            // Act
            String result = template.LiquidTemplate.Render(ctx).Result;

            Logger.Log(result);

            // Assert
            Assert.That(result, Is.EqualTo("34"));
        }
        public void It_Should_Render_A_Table_Row_From_A_String()
        {
            // Arrange
            TemplateContext ctx = new TemplateContext();

            ctx.DefineLocalVariable("numbers", DictionaryFactory.CreateArrayFromJson("[1, 2, 3, 4, 5, 6]"));
            var template = LiquidTemplate.Create(@"{% tablerow n in ""Test"" cols:2%}ITER{{n}}{% endtablerow %}");

            // Act
            String result = template.LiquidTemplate.Render(ctx).Result;

            Logger.Log(result);
            String expected =
                "<tr class=\"row1\">\r\n<td class=\"col1\">ITERTest</td></tr>";

            // Act

            // Assert
            Assert.Contains(expected, result);
        }
Example #4
0
        public void Poco_Object_Should_Be_Serialized()
        {
            ITemplateContext ctx = new TemplateContext()
                                   .DefineLocalVariable("poco", new MyPoco
            {
                MyStringField          = "A string field",
                MyNullableIntField     = 123,
                MyOtherField           = "Some Other Field",
                MyIgnoredField         = "This Shouldn't Show Up",
                MyIgnoreIfNotNullField = null,
                NestedPoco             = new MyPoco {
                    MyStringField = "Nested Poco"
                }
            }.ToLiquid());

            var parsingResult   = LiquidTemplate.Create("Poco Result: {{ poco }}");
            var renderingResult = parsingResult.LiquidTemplate.Render(ctx);

            Assert.Contains(@"Poco Result: { ""mystringfield"" : ""A string field"", ""mynullableintfield"" : 123, ""myrenamedfield"" : ""Some Other Field"", ""nestedpoco"" : { ""mystringfield"" : ""Nested Poco"", ""mynullableintfield"" : null, ""myrenamedfield"" : null } }", renderingResult.Result);
        }
        public void Render_TemplateNotSet_Throws()
        {
            Person model = new Person()
            {
                Firstname = "Jim",
                Lastname  = "Bob",
            };
            TemplateContext context = new TemplateContext("p", model);

            try
            {
                LiquidTemplate target = new LiquidTemplate();
                target.RegisterType(typeof(Person));
                target.Render(context);
            }
            catch (InvalidOperationException ex)
            {
                Assert.AreEqual("The template has not been parsed.", ex.Message);
                throw;
            }
        }
        public void It_Should_Register_A_Rendering_Error()
        {
            // Arrange
            var ctx = CreateContext(new Dictionary <String, String>
            {
                { "test", "problem: {{ 1 | divided_by: 0}}" }
            }).WithAllFilters();

            const String template = "{% include 'test' %}";

            // Act

            //var parsingResult = new LiquidASTGenerator().Generate(template);

            var liquidTemplate = LiquidTemplate.Create(template);

            var result = liquidTemplate.LiquidTemplate.Render(ctx);

            Assert.True(result.HasRenderingErrors);
            Assert.Contains("divided by 0", result.RenderingErrors[0].Message);
        }
        public void It_Should_Render_A_Table_Row_With_A_Generator()
        {
            // Arrange
            TemplateContext ctx      = new TemplateContext();
            var             template = LiquidTemplate.Create(@"{% tablerow n in (1..6) cols:2%}ITER{{n}}{% endtablerow %}");

            // Act
            String result = template.LiquidTemplate.Render(ctx).Result;

            Logger.Log(result);
            String expected =
                "<tr class=\"row1\">\r\n" +
                @"<td class=""col1"">ITER1</td><td class=""col2"">ITER2</td></tr>" + "\r\n" +
                @"<tr class=""row2""><td class=""col1"">ITER3</td><td class=""col2"">ITER4</td></tr>" + "\r\n" +
                @"<tr class=""row3""><td class=""col1"">ITER5</td><td class=""col2"">ITER6</td></tr>";

            // Act

            // Assert
            Assert.That(result, Is.StringContaining(expected));
        }
        public ActionResult ReminderPreview(ReminderJSON reminder)
        {
            var template = db.fees_templates.SingleOrDefault(x => x.id == reminder.templateid);

            if (template == null)
            {
                return(SendJsonErrorResponse("Template not found"));
            }

            var viewmodel = new Reminder();

            viewmodel.Initialise(reminder);

            var liquid = new LiquidTemplate(template.body);

            liquid.AddParameters("reminder", viewmodel);

            var view = liquid.Render();

            return(Json(view.ToJsonOKData()));
        }
        public void It_Should_Include_Name_Of_VirtualFile_With_ParsingErrors()
        {
            // Arrange
            var ctx = CreateContext(new Dictionary <String, String> {
                { "test", "{% if .wefiouhwef %}" }
            });

            const String str = "{% include 'test' %}";
            //IList<LiquidError> renderingErrors = new List<LiquidError>();
            //IList<LiquidError> parsingErrors = new List<LiquidError>();
            // Act

            var template = LiquidTemplate.Create(str);

            var result = template.LiquidTemplate.Render(ctx);

            //RenderingHelper.RenderTemplate(str, ctx, renderingErrors.Add, parsingErrors.Add);

            Assert.False(result.RenderingErrors.Any());
            Assert.True(result.ParsingErrors.Any());
            Assert.Equal("test", result.ParsingErrors[0].TokenSource);
        }
Example #10
0
        public void It_Should_Lookup_An_Array_In_A_Dictionary()
        {
            // Arrange
            ITemplateContext ctx = new TemplateContext().WithAllFilters();
            var arr = new LiquidCollection {
                LiquidString.Create("HELLO")
            };

            ctx.DefineLocalVariable("a", new LiquidHash {
                { "b", arr }
            });
            //var template = LiquidTemplate.Create("{% assign x = 1 | plus: bar.foo %} 1 + {{ bar.foo }} = {{ x }}");
            var template = LiquidTemplate.Create("{{ a.b[0] }} WORLD");

            // Act
            String result = template.LiquidTemplate.Render(ctx).Result;

            Logger.Log(result);

            // Assert
            Assert.That(result, Is.EqualTo("HELLO WORLD"));
        }
Example #11
0
        public void It_Should_Extend_An_Object()
        {
            // Arrange
            var obj = new LiquidValueConverterTests.ClassWithAttributes {
                Ok = "To Liquid"
            };
            var templateContext = new TemplateContext()
                                  .ErrorWhenValueMissing()
                                  .DefineLocalVariable("test", obj.ToLiquid());

            // Act
            var parserResult = LiquidTemplate.Create("Hello {{ test.ok }}");

            Assert.That(parserResult.HasParsingErrors, Is.False);
            var renderingResult = parserResult.LiquidTemplate.Render(templateContext);

            Assert.That(renderingResult.HasParsingErrors, Is.False);
            Console.WriteLine(String.Join(",", renderingResult.RenderingErrors.Select(x => x.Message)));
            Assert.That(renderingResult.HasRenderingErrors, Is.False);

            // Assert
            Assert.That(renderingResult.Result, Is.EqualTo("Hello To Liquid"));
        }
        public void It_Should_Register_A_Parsing_Error_At_Rendering_Time_When_Invalid_Syntax()
        {
            // Arrange
            var ctx = CreateContext(new Dictionary <String, String>
            {
                { "test", "problem: {% unterminated" }
            }).WithAllFilters();

            const String template = "{% include 'test' %}";

            // Act

            //var parsingResult = new LiquidASTGenerator().Generate(template);
            //Assert.False(parsingResult.HasParsingErrors);
            var liquidTemplate = LiquidTemplate.Create(template);

            var result = liquidTemplate.LiquidTemplate.Render(ctx);

            //Console.WriteLine(result.Result);

            Assert.True(result.HasParsingErrors);
            Assert.Contains("missing TAGEND", result.ParsingErrors[0].Message);
        }
Example #13
0
        public void It_Should_Allow_Variables_In_Args()
        {
            // Arrange
            const string    templateString = "Result : {%for i in array limit: x offset: y %}{{ i }}{%endfor%}";
            TemplateContext ctx            = new TemplateContext();
            var             arr            = new LiquidCollection();

            for (var index = 1; index < 10; index++)
            {
                arr.Add(LiquidNumeric.Create(index));
            }
            ctx.DefineLocalVariable("array", arr);

            ctx.DefineLocalVariable("x", LiquidNumeric.Create(2));
            ctx.DefineLocalVariable("y", LiquidNumeric.Create(2));
            var template = LiquidTemplate.Create(templateString);

            // Act
            String result = template.LiquidTemplate.Render(ctx).Result;

            // Assert
            Assert.Equal("Result : 34", result);
        }
        public void It_Should_Render_A_Table_Row()
        {
            // Arrange
            TemplateContext ctx = new TemplateContext();

            ctx.DefineLocalVariable("numbers", DictionaryFactory.CreateArrayFromJson("[1, 2, 3, 4, 5, 6]"));
            var template = LiquidTemplate.Create(@"{% tablerow n in numbers cols:2%}ITER{{n}}{% endtablerow %}");

            // Act
            String result = template.LiquidTemplate.Render(ctx).Result;

            Logger.Log(result);
            String expected =
                "<tr class=\"row1\">\r\n" +
                @"<td class=""col1"">ITER1</td><td class=""col2"">ITER2</td></tr>" + "\r\n" +
                @"<tr class=""row2""><td class=""col1"">ITER3</td><td class=""col2"">ITER4</td></tr>" + "\r\n" +
                @"<tr class=""row3""><td class=""col1"">ITER5</td><td class=""col2"">ITER6</td></tr>";

            // Act

            // Assert
            Assert.That(result, Is.StringContaining(expected));
        }
        public void It_Should_Parse_Two_Filter_Arguments()
        {
            // Arrange
            LiquidHash dict = new LiquidHash {
                { "foo", LiquidNumeric.Create(22) }, { "bar", LiquidNumeric.Create(23) }
            };

            ITemplateContext ctx =
                new TemplateContext().WithAllFilters()
                .WithFilter <FilterFactoryTests.MockStringToStringFilter>("mockfilter")
                .DefineLocalVariable("bar", dict)
                .DefineLocalVariable("foo", dict);
            //LiquidCollection arr = new LiquidCollection(new List<ILiquidValue> { new LiquidNumeric(33) });
            //ctx.DefineLocalVariable("bar", arr);
            var template = LiquidTemplate.Create("{{ 1 | mockfilter: bar.foo, foo.bar  }}");

            // Act
            String result = template.LiquidTemplate.Render(ctx).Result;

            Logger.Log(result);

            // Assert
            Assert.Equal("1 22 23", result);
        }
Example #16
0
        public void It_Should_Parse_A_Variable_And_A_Value(String liquid, String expected)
        {
            // Arrange
            LiquidHash dict = new LiquidHash {
                { "foo", LiquidNumeric.Create(22) }, { "bar", LiquidNumeric.Create(23) }
            };

            ITemplateContext ctx =
                new TemplateContext().WithAllFilters()
                .WithFilter <FilterFactoryTests.MockStringToStringFilter>("mockfilter")
                .DefineLocalVariable("bar", dict)
                .DefineLocalVariable("foo", dict);
            //LiquidCollection arr = new LiquidCollection(new List<ILiquidValue> { new LiquidNumeric(33) });
            //ctx.DefineLocalVariable("bar", arr);
            var template = LiquidTemplate.Create(liquid);

            // Act
            String result = template.LiquidTemplate.Render(ctx).Result;

            Logger.Log(result);

            // Assert
            Assert.That(result, Is.EqualTo(expected));
        }
Example #17
0
 public override object ParseLoremIpsum()
 {
     return(LiquidTemplate.Create(_source3));
 }
Example #18
0
 public override object ParseSample()
 {
     return(LiquidTemplate.Create(_source1));
 }
Example #19
0
 public LiquidNetBenchmarks()
 {
     _sampleTemplateLiquidNet = LiquidTemplate.Create(_source1);
 }
Example #20
0
 public override object Parse()
 {
     return(LiquidTemplate.Create(TextTemplate));
 }
        public ActionResult ReminderSend(ReminderJSON reminder)
        {
            var template = db.fees_templates.SingleOrDefault(x => x.id == reminder.templateid);

            if (template == null)
            {
                return(SendJsonErrorResponse("Template not found"));
            }

            var viewmodel = new Reminder();

            viewmodel.Initialise(reminder);

            var parent = repository.GetUser(reminder.parentid);

            if (parent == null)
            {
                return(SendJsonErrorResponse("Could not locate parent"));
            }

            if (reminder.useEmail && string.IsNullOrEmpty(parent.email))
            {
                return(SendJsonErrorResponse("Selected parent has no email address. Select another parent."));
            }

            if (reminder.useSMS && string.IsNullOrEmpty(parent.phone_cell))
            {
                return(SendJsonErrorResponse("Selected parent has no cell phone number. Select another parent."));
            }

            if (reminder.useEmail)
            {
                var liquid = new LiquidTemplate(template.body);
                liquid.AddParameters("reminder", viewmodel);

                var emailbody = liquid.Render();

                new Thread(() => Email.SendMail(" School", "*****@*****.**", parent.ToName(false), parent.email, template.title, emailbody, false, null)).Start();
            }

            // save reminder params into db
            foreach (var feeid in reminder.children.SelectMany(x => x.feeids))
            {
                var dbentry = new fees_reminder();
                dbentry.templatename = template.title;
                dbentry.created      = DateTime.UtcNow;
                dbentry.paymentdue   = reminder.date_due;
                dbentry.receiver     = parent.id;
                dbentry.sender       = sessionid.Value;
                dbentry.feeid        = feeid;
                dbentry.uniqueid     = viewmodel.uniqueid;
                db.fees_reminders.InsertOnSubmit(dbentry);
            }


            repository.Save();

            // return view
            var view = this.RenderViewToString("Alerts",
                                               new[]
            {
                new LateFeeAlertSiblings(
                    reminder.children.Select(x => x.studentid))
            }).ToJsonOKData();

            view.message = "Reminder sent successfully";

            return(Json(view));
        }
Example #22
0
 public LiquidParsingResult ParseLoremIpsumLiquidNet()
 {
     return(LiquidTemplate.Create(_source3));
 }
Example #23
0
 public LiquidParsingResult ParseSampleLiquidNet()
 {
     return(LiquidTemplate.Create(_source1));
 }
Example #24
0
        protected LiquidTemplate CreateLiquidTemplate(string templateName, string page_title)
        {
            var template = new LiquidTemplate(MASTERdomain, (bool)Session[BrowserCapability.IsMobileSession]);
            template.InitLayoutTemplate("layout/theme.liquid");
            if (!string.IsNullOrEmpty(page_title))
            {
                template.AddParameters("page_title", page_title);
            }
            template.AddParameters("template", templateName);
            template.AddParameters("linklists", new LinkLists(MASTERdomain));
            template.AddParameters("pages", new Pages(MASTERdomain));
            template.AddParameters("blogs", new Blogs(MASTERdomain));
            template.AddParameters("collections", new Collections(MASTERdomain, sessionid));
            template.AddParameters("powered_by_link", "<a href='http://www.tradelr.com'>This online store is powered by tradelr</a>");

            // settings
            var settings_file = string.Format("{0}/{1}/config/settings_data.json", GeneralConstants.APP_ROOT_DIR, template.handler.GetThemeUrl());
            template.AddParameters("settings", template.ReadThemeSettings(settings_file));

            // cart
            var cartid = GetCartIdFromCookie();
            var liquidCart = new Cart();
            if (!string.IsNullOrEmpty(cartid))
            {
                var cart = MASTERdomain.carts.SingleOrDefault(x => x.id.ToString() == cartid);
                if (cart != null)
                {
                    if (cart.orderid.HasValue)
                    {
                        // cart already processed. clear cookie
                        Response.Cookies["cart"].Expires = DateTime.UtcNow.AddMonths(-1);
                    }
                    else
                    {
                        liquidCart = cart.ToLiquidModel(sessionid);
                    }
                }
            }
            template.AddParameters("cart", liquidCart);
            template.AddParameters("shop", MASTERdomain.ToLiquidModel());

            template.AddHeaderContent(MASTERdomain.metaTagVerification);

            // login panel
            template.AddParameters("login_for_store",
                                   this.RenderViewToString("~/Views/store/liquid/loginPanel.ascx",
                                                           new LoginPanel()
                                                               {
                                                                   isLoggedIn =sessionid.HasValue,
                                                                   hostName = accountHostname.ToDomainUrl()
                                                               }));
            // add filters
            // currency
            var currency = MASTERdomain.currency.ToCurrency();
            template.AddFilterValues("currency", currency);

            // add registers
            template.AddRegisters("current_url", Request.Url);

            // add term form date
            if (TempData["form"] != null)
            {
                template.AddParameters("posted_contact_form", TempData["form"]);
            }

            return template;
        }
Example #25
0
 public override object ParseBig()
 {
     return(LiquidTemplate.Create(BlogPostTemplate));
 }
Example #26
0
 public LiquidNetBenchmarks()
 {
     _liquidNetTemplate = LiquidTemplate.Create(ProductTemplate);
 }