public void TestUseCombinedSkinsSchemaWhenNoDefaultTemplate() { var templateInfo = new StringTemplateInfo("test", ""); var templateInfo2 = new StringTemplateInfo("test2", ""); var schema1 = new JSchema(); var schema2 = new JSchema(); var templateSchemaProvider = new Mock<ISchemaProvider>(); templateSchemaProvider.Setup(f => f.GetSchemaFromTemplateAsync(templateInfo)).Returns(Task.FromResult(schema1)); templateSchemaProvider.Setup(f => f.GetSchemaFromTemplateAsync(templateInfo2)).Returns(Task.FromResult(schema2)); var combiner = new Mock<SchemaCombiner>(); combiner.Setup(c => c.Apply(It.Is<JSchema>(s => s == schema1), It.Is<JSchema>(s => s == schema2), It.IsAny<SchemaComparisionReport>(), It.IsAny<string>())) .Returns(new JSchema()); var moduleDefintion = new ModuleDefinition("testmod", null, new Dictionary<string, TemplateInfo> { {"skin1", templateInfo}, {"skin2", templateInfo2} }); var underTest = new DefaultModuleSchemaProvider(combiner.Object, templateSchemaProvider.Object); var result = underTest.GetSchemaFromModuleAsync(moduleDefintion); Assert.IsNotNull(result); combiner.Verify(); }
public void TestUseCombinedSkinsSchemaWhenNoDefaultTemplate() { var templateInfo = new StringTemplateInfo("test", ""); var templateInfo2 = new StringTemplateInfo("test2", ""); var schema1 = new JSchema(); var schema2 = new JSchema(); var templateSchemaProvider = new Mock <ISchemaProvider>(); templateSchemaProvider.Setup(f => f.GetSchemaFromTemplateAsync(templateInfo)).Returns(Task.FromResult(schema1)); templateSchemaProvider.Setup(f => f.GetSchemaFromTemplateAsync(templateInfo2)).Returns(Task.FromResult(schema2)); var combiner = new Mock <SchemaCombiner>(); combiner.Setup(c => c.Apply(It.Is <JSchema>(s => s == schema1), It.Is <JSchema>(s => s == schema2), It.IsAny <SchemaComparisionReport>(), It.IsAny <string>())) .Returns(new JSchema()); var moduleDefintion = new ModuleDefinition("testmod", null, new Dictionary <string, TemplateInfo> { { "skin1", templateInfo }, { "skin2", templateInfo2 } }); var underTest = new DefaultModuleSchemaProvider(combiner.Object, templateSchemaProvider.Object); var result = underTest.GetSchemaFromModuleAsync(moduleDefintion); Assert.IsNotNull(result); combiner.Verify(); }
public async Task TemplateEngineShouldUseSameNamingConventionForBinding() { var cacheProvider = new MemoryCacheProvider(); var handlerFactory = new Mock <IHelperHandlerFactory>(); handlerFactory.Setup(f => f.Create()).Returns(Enumerable.Empty <IHelperHandler>()); var namingRule = new NamingRule(); var schemaProvider = new HandlebarsViewSchemaProvider(null, new MemberLocatorFromNamingRule(namingRule)); var codeGenerator = new JsonSchemaCodeGenerator(namingRule); const string input = "<p>{{name}}</p><p>{{first_name}}</p>"; var templateInfo = new StringTemplateInfo("views/test", input); var schema = await schemaProvider.GetSchemaFromTemplateAsync(templateInfo).ConfigureAwait(false); var modelType = codeGenerator.Compile(schema); var viewEngine = new VeilViewEngine(cacheProvider, handlerFactory.Object, namingRule); var view = await viewEngine.CreateViewAsync(templateInfo, modelType).ConfigureAwait(false); var model = Activator.CreateInstance(modelType); modelType.GetProperty("Name").SetValue(model, "{{name}}"); modelType.GetProperty("FirstName").SetValue(model, "{{first_name}}"); var writer = new StringWriter(); view.Render(model, new RenderingContext(writer)); var stringResult = writer.ToString(); Assert.AreEqual(input, stringResult); }
protected async Task GetErrorPage(StreamWriter writer, Exception error, SourceLocation location) { var fileSystem = new EmbeddedResourceFileSystem(typeof(WebInitializer).Assembly); string content; using (var reader = new StreamReader(fileSystem.OpenRead(PathInfo.Create("Core/error_partial.html")))) { content = await reader.ReadToEndAsync(); } var templateInfo = new StringTemplateInfo("error", content); var view = await((IViewEngine)Resolver.GetService(typeof(IViewEngine))) .CreateViewAsync(templateInfo, typeof(ErrorViewModel)).ConfigureAwait(false); if (location == null) { var modelWithoutLocation = new ErrorViewModel { ErrorMessage = error.Message, Details = error.StackTrace }; view.Render(modelWithoutLocation, new RenderingContext(writer)); return; } var templateRepository = (ITemplateRepository)this.Resolver.GetService(typeof(ITemplateRepository)); var sourceTemplate = await templateRepository.GetTemplateAsync(location.TemplateId).ConfigureAwait(false); string sourceTemplateSource; using (var reader = new StreamReader(sourceTemplate.Open())) { sourceTemplateSource = await reader.ReadToEndAsync().ConfigureAwait(false); } var model = new ErrorViewModel { TemplateId = location.TemplateId, ErrorMessage = error.Message, Details = error.StackTrace, Before = sourceTemplateSource.Substring(0, location.Index), Node = sourceTemplateSource.Substring(location.Index, location.Length), After = sourceTemplateSource.Substring(location.Index + location.Length), Text = HttpUtility.JavaScriptStringEncode(sourceTemplateSource), Range = GetRange(sourceTemplateSource, location) }; view.Render(model, new RenderingContext(writer)); }
public async Task TestUseSchemaFromDefaultTemplateIfNoSkins() { var templateInfo = new StringTemplateInfo("test", ""); var schema = new JSchema(); var templateSchemaProvider = new Mock<ISchemaProvider>(); templateSchemaProvider.Setup(f => f.GetSchemaFromTemplateAsync(templateInfo)).Returns(Task.FromResult(schema)); var moduleDefintion = new ModuleDefinition("testmod", templateInfo, null); var underTest = new DefaultModuleSchemaProvider(templateSchemaProvider.Object); var result = await underTest.GetSchemaFromModuleAsync(moduleDefintion); Assert.AreEqual(schema, result); }
public async Task TestUseSchemaFromDefaultTemplateIfNoSkins() { var templateInfo = new StringTemplateInfo("test", ""); var schema = new JSchema(); var templateSchemaProvider = new Mock <ISchemaProvider>(); templateSchemaProvider.Setup(f => f.GetSchemaFromTemplateAsync(templateInfo)).Returns(Task.FromResult(schema)); var moduleDefintion = new ModuleDefinition("testmod", templateInfo, null); var underTest = new DefaultModuleSchemaProvider(templateSchemaProvider.Object); var result = await underTest.GetSchemaFromModuleAsync(moduleDefintion); Assert.AreEqual(schema, result); }
private static async Task <string> Execute(string input, string templateId, object model, Type modelType) { var cacheProvider = new MemoryCacheProvider(); var handlerFactory = new Mock <IHelperHandlerFactory>(); var namingRule = new NamingRule(); var templateInfo = new StringTemplateInfo(templateId, input); var viewEngine = new VeilViewEngine(cacheProvider, handlerFactory.Object, namingRule); var view = await viewEngine.CreateViewAsync(templateInfo, modelType) .ConfigureAwait(false); var builder = new StringBuilder(); using (var writer = new StringWriter(builder)) { var context = new RenderingContext(writer); view.Render(model, context); } return(builder.ToString()); }
public async Task EscapeNullStringLateBinding() { var cacheProvider = new MemoryCacheProvider(); var handlerFactory = new Mock <IHelperHandlerFactory>(); handlerFactory.Setup(f => f.Create()).Returns(Enumerable.Empty <IHelperHandler>()); var namingRule = new NamingRule(); const string input = "<p>{{{name}}}</p>"; var templateInfo = new StringTemplateInfo("views/test", input); var viewEngine = new VeilViewEngine(cacheProvider, handlerFactory.Object, namingRule); var view = await viewEngine.CreateViewAsync(templateInfo, typeof(object)).ConfigureAwait(false); var model = new TestModel(); var writer = new StringWriter(); view.Render(model, new RenderingContext(writer)); var stringResult = writer.ToString(); Assert.AreEqual("<p></p>", stringResult); }