|
1 | 1 | using System; |
| 2 | +using System.Collections.Generic; |
2 | 3 | using System.Linq; |
| 4 | +using System.Runtime.Remoting; |
3 | 5 | using Liquid.NET.Constants; |
| 6 | +using Liquid.NET.Filters; |
4 | 7 | using Liquid.NET.Utils; |
5 | 8 | using NUnit.Framework; |
6 | 9 |
|
@@ -141,5 +144,116 @@ public class MyPoco |
141 | 144 | } |
142 | 145 |
|
143 | 146 |
|
| 147 | + |
| 148 | + public class MyUpCaseFilter : FilterExpression<LiquidString, LiquidString> |
| 149 | + { |
| 150 | + public override LiquidExpressionResult ApplyTo(ITemplateContext ctx, LiquidString liquidExpression) |
| 151 | + { |
| 152 | + return LiquidExpressionResult.Success(liquidExpression.ToString().ToUpper()); |
| 153 | + } |
| 154 | + } |
| 155 | + |
| 156 | + [Test] |
| 157 | + public void It_Should_Render_In_Upper_Case() |
| 158 | + { |
| 159 | + // Arrange |
| 160 | + var ctx = new TemplateContext() |
| 161 | + .WithFilter<MyUpCaseFilter>("myupcase"); |
| 162 | + var parsingResult = LiquidTemplate.Create("Result : {{ \"test\" | myupcase }}"); |
| 163 | + |
| 164 | + // Act |
| 165 | + var renderingResult = parsingResult.LiquidTemplate.Render(ctx); |
| 166 | + |
| 167 | + // Assert |
| 168 | + Assert.That(renderingResult.Result, Is.EqualTo("Result : TEST")); |
| 169 | + } |
| 170 | + |
| 171 | + [Test] |
| 172 | + public void Test_Introductory_Example() |
| 173 | + { |
| 174 | + // create a template context that knows about the standard filters, |
| 175 | + // and define a string variable "myvariable" |
| 176 | + ITemplateContext ctx = new TemplateContext() |
| 177 | + .WithAllFilters() |
| 178 | + .DefineLocalVariable("myvariable", LiquidString.Create("Hello World")); |
| 179 | + |
| 180 | + // parse the template and check for errors |
| 181 | + var parsingResult = LiquidTemplate.Create("<div>{{myvariable}}</div>"); |
| 182 | + |
| 183 | + if (parsingResult.HasParsingErrors) |
| 184 | + { |
| 185 | + HandleErrors(parsingResult.ParsingErrors); |
| 186 | + return; |
| 187 | + } |
| 188 | + |
| 189 | + // merge the variables from the context into the template and check for errors |
| 190 | + var renderingResult = parsingResult.LiquidTemplate.Render(ctx); |
| 191 | + if (renderingResult.HasParsingErrors) |
| 192 | + { |
| 193 | + HandleErrors(renderingResult.ParsingErrors); |
| 194 | + return; |
| 195 | + } |
| 196 | + if (renderingResult.HasRenderingErrors) |
| 197 | + { |
| 198 | + HandleErrors(renderingResult.RenderingErrors); |
| 199 | + return; |
| 200 | + } |
| 201 | + |
| 202 | + Assert.That(renderingResult.Result, Is.EqualTo("<div>Hello World</div>")); |
| 203 | + |
| 204 | + } |
| 205 | + |
| 206 | + [Test] |
| 207 | + public void Test_Introductory_Example_With_Syntactic_Sugar() |
| 208 | + { |
| 209 | + // create a place to accumulate parsing and rendering errors. |
| 210 | + var errors = new List<LiquidError>(); |
| 211 | + |
| 212 | + // Note that you will still get a best-guess LiquidTemplate, even if you encounter errors. |
| 213 | + var liquidTemplate = LiquidTemplate.Create("<div>{{myvariable}}</div>") |
| 214 | + .OnParsingError(errors.Add) |
| 215 | + .LiquidTemplate; |
| 216 | + |
| 217 | + // [add code here to handle the parsing errors, return] |
| 218 | + Assert.That(errors.Any(), Is.False); |
| 219 | + |
| 220 | + var ctx = new TemplateContext() |
| 221 | + .WithAllFilters() |
| 222 | + .DefineLocalVariable("myvariable", LiquidString.Create("Hello World")); |
| 223 | + |
| 224 | + |
| 225 | + // The final String output will still be available in .Result, |
| 226 | + // even when parsing or rendering errors are encountered. |
| 227 | + var result = liquidTemplate.Render(ctx) |
| 228 | + .OnAnyError(errors.Add) // also available: .OnParsingError, .OnRenderingError |
| 229 | + .Result; |
| 230 | + |
| 231 | + // [add code here to handle the parsing and rendering errors] |
| 232 | + Assert.That(errors.Any(), Is.False); |
| 233 | + |
| 234 | + Console.WriteLine(result); |
| 235 | + Assert.That(result, Is.EqualTo("<div>Hello World</div>")); |
| 236 | + |
| 237 | + } |
| 238 | + |
| 239 | +// [Test] |
| 240 | +// public void It_Should_Throw_An_Error() |
| 241 | +// { |
| 242 | +// LiquidHash hash = new LiquidHash(); |
| 243 | +// ITemplateContext ctx = new TemplateContext() |
| 244 | +// .ErrorWhenValueMissing() |
| 245 | +// .DefineLocalVariable("myvariable", hash); |
| 246 | +// |
| 247 | +// var parsingResult = LiquidTemplate.Create("<div>{{myvariable.ss}}</div>"); |
| 248 | +// var renderingResult = parsingResult.LiquidTemplate.Render(ctx); |
| 249 | +// |
| 250 | +// Console.WriteLine("ERROR: " + String.Join("; ", renderingResult.RenderingErrors.Select(x => x.Message))); |
| 251 | +// Console.WriteLine(renderingResult.Result, "<div>ui</div>"); |
| 252 | +// } |
| 253 | + |
| 254 | + private void HandleErrors(IList<LiquidError> errors) |
| 255 | + { |
| 256 | + // ... |
| 257 | + } |
144 | 258 | } |
145 | 259 | } |
0 commit comments