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();
		}
Ejemplo n.º 2
0
        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();
        }
Ejemplo n.º 3
0
        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);
        }
Ejemplo n.º 4
0
        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);
		}
Ejemplo n.º 6
0
        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);
        }
Ejemplo n.º 7
0
        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());
        }
Ejemplo n.º 8
0
        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);
        }