Exemplo n.º 1
0
        public virtual ViewCompiler CreateViewCompiler(ISparkViewEngine engine, SparkViewDescriptor descriptor)
        {
            var pageBaseType = engine.Settings.PageBaseType;
            if (string.IsNullOrEmpty(pageBaseType))
                pageBaseType = engine.DefaultPageBaseType;

            ViewCompiler viewCompiler;
            switch (descriptor.Language)
            {
                case LanguageType.Default:
                case LanguageType.CSharp:
                    viewCompiler = new DefaultViewCompiler();
                    break;
                case LanguageType.Javascript:
                    viewCompiler = new JavascriptViewCompiler();
                    break;
                default:
                    throw new CompilerException(string.Format("Unknown language type {0}", descriptor.Language));
            }

            viewCompiler.BaseClass = pageBaseType;
            viewCompiler.Descriptor = descriptor;
            viewCompiler.Debug = engine.Settings.Debug;
            viewCompiler.NullBehaviour = engine.Settings.NullBehaviour;
            viewCompiler.UseAssemblies = engine.Settings.UseAssemblies;
            viewCompiler.UseNamespaces = engine.Settings.UseNamespaces;
            return viewCompiler;
        }
Exemplo n.º 2
0
 public void GlobalVariables()
 {
     var compiler = new DefaultViewCompiler { BaseClass = "Spark.AbstractSparkView" };
     DoCompileView(compiler, new Chunk[]
                          	{
                          		new SendExpressionChunk{Code="title"},
                          		new AssignVariableChunk{ Name="item", Value="8"},
                          		new SendLiteralChunk{ Text=":"},
                          		new SendExpressionChunk{Code="item"},
                          		new GlobalVariableChunk{ Name="title", Value="\"hello world\""},
                          		new GlobalVariableChunk{ Name="item", Value="3"}
                          	});
     var instance = compiler.CreateInstance();
     var contents = instance.RenderView();
     Assert.AreEqual("hello world:8", contents);
 }
Exemplo n.º 3
0
        public void IfElseFalseCondition()
        {
            var compiler = new DefaultViewCompiler { BaseClass = "Spark.AbstractSparkView" };

            var trueChunks = new Chunk[] { new SendLiteralChunk { Text = "wastrue" } };
            var falseChunks = new Chunk[] { new SendLiteralChunk { Text = "wasfalse" } };

            DoCompileView(compiler, new Chunk[]
                         	{
                                new SendLiteralChunk {Text = "<p>"},
                                new LocalVariableChunk{Name="arg", Value="5"},
                                new ConditionalChunk{Type=ConditionalType.If, Condition="arg==6", Body=trueChunks},
                                new ConditionalChunk{Type=ConditionalType.Else, Body=falseChunks},
                                new SendLiteralChunk {Text = "</p>"}
                         	});
            var instance = compiler.CreateInstance();
            var contents = instance.RenderView();
            Assert.AreEqual("<p>wasfalse</p>", contents);
        }
Exemplo n.º 4
0
 public void ForEachLoop()
 {
     var compiler = new DefaultViewCompiler { BaseClass = "Spark.AbstractSparkView" };
     DoCompileView(compiler, new Chunk[]
                          	{
                          		new LocalVariableChunk {Name = "data", Value = "new[]{3,4,5}"},
                          		new SendLiteralChunk {Text = "<ul>"},
                          		new ForEachChunk
                          			{
                          				Code = "var item in data",
                          				Body = new Chunk[]
                          				       	{
                          				       		new SendLiteralChunk {Text = "<li>"},
                          				       		new SendExpressionChunk {Code = "item"},
                          				       		new SendLiteralChunk {Text = "</li>"}
                          				       	}
                          			},
                          		new SendLiteralChunk {Text = "</ul>"}
                          	});
     var instance = compiler.CreateInstance();
     var contents = instance.RenderView();
     Assert.AreEqual("<ul><li>3</li><li>4</li><li>5</li></ul>", contents);
 }
Exemplo n.º 5
0
 private static void DoCompileView(DefaultViewCompiler compiler, IList<Chunk> chunks)
 {
     compiler.CompileView(new[] { chunks }, new[] { chunks });
 }
Exemplo n.º 6
0
        public void UnsafeLiteralCharacters()
        {
            var text = "hello\t\r\n\"world";
            var compiler = new DefaultViewCompiler { BaseClass = "Spark.AbstractSparkView" };
            DoCompileView(compiler, new[] { new SendLiteralChunk { Text = text } });

            Assert.That(compiler.SourceCode.Contains("Write(\"hello\\t\\r\\n\\\"world\")"));

            var instance = compiler.CreateInstance();
            string contents = instance.RenderView();

            Assert.AreEqual(text, contents);
        }
Exemplo n.º 7
0
 public void TargetNamespace()
 {
     var compiler = new DefaultViewCompiler
                        {
                            BaseClass = "Spark.AbstractSparkView",
                            Descriptor = new SparkViewDescriptor { TargetNamespace = "Testing.Target.Namespace" }
                        };
     DoCompileView(compiler, new Chunk[] { new SendLiteralChunk { Text = "Hello" } });
     var instance = compiler.CreateInstance();
     Assert.AreEqual("Testing.Target.Namespace", instance.GetType().Namespace);
 }
Exemplo n.º 8
0
 public void StrictNullUsesException()
 {
     var compiler = new DefaultViewCompiler()
     {
         BaseClass = "Spark.Tests.Stubs.StubSparkView",
         NullBehaviour = NullBehaviour.Strict
     };
     var chunks = new Chunk[]
                      {
                          new ViewDataChunk { Name="comment", Type="Spark.Tests.Models.Comment"},
                          new SendExpressionChunk {Code = "comment.Text", SilentNulls = false}
                      };
     compiler.CompileView(new[] { chunks }, new[] { chunks });
     Assert.That(compiler.SourceCode.Contains("catch(System.NullReferenceException ex)"));
     Assert.That(compiler.SourceCode.Contains("ArgumentNullException("));
     Assert.That(compiler.SourceCode.Contains(", ex);"));
 }
Exemplo n.º 9
0
 public void SimpleOutput()
 {
     var compiler = new DefaultViewCompiler { BaseClass = "Spark.AbstractSparkView" };
     DoCompileView(compiler, new[] { new SendExpressionChunk { Code = "3 + 4" } });
     var instance = compiler.CreateInstance();
     string contents = instance.RenderView();
     Assert.AreEqual("7", contents);
 }
Exemplo n.º 10
0
 public void PageBaseTypeWorksWithOptionalModel()
 {
     var compiler = new DefaultViewCompiler()
                    {
                        BaseClass = "Spark.Tests.Stubs.StubSparkView",
                        NullBehaviour = NullBehaviour.Strict
                    };
     DoCompileView(compiler, new Chunk[]
                             {
                                 new PageBaseTypeChunk {BaseClass = "Spark.Tests.Stubs.StubSparkView2"},
                                 new ViewDataModelChunk {TModel = "Spark.Tests.Models.Comment"},
                                 new SendLiteralChunk {Text = "Hello world"}
                             });
     var instance = compiler.CreateInstance();
     Assert.That(instance, Is.InstanceOfType(typeof(StubSparkView2)));
     Assert.That(instance, Is.InstanceOfType(typeof(StubSparkView2<Comment>)));
 }
Exemplo n.º 11
0
 public void PageBaseTypeWorksWithGenericParametersIncluded()
 {
     var compiler = new DefaultViewCompiler()
     {
         BaseClass = "Spark.Tests.Stubs.StubSparkView",
         NullBehaviour = NullBehaviour.Strict
     };
     DoCompileView(compiler, new Chunk[]
                             {
                                 new PageBaseTypeChunk {BaseClass = "Spark.Tests.Stubs.StubSparkView3<Spark.Tests.Models.Comment, string>"},
                                 new SendLiteralChunk {Text = "Hello world"}
                             });
     var instance = compiler.CreateInstance();
     Assert.That(instance, Is.InstanceOfType(typeof(StubSparkView2)));
     Assert.That(instance, Is.InstanceOfType(typeof(StubSparkView2<Comment>)));
     Assert.That(instance, Is.InstanceOfType(typeof(StubSparkView3<Comment, string>)));
 }
Exemplo n.º 12
0
 public void PageBaseTypeOverridesBaseClass()
 {
     var compiler = new DefaultViewCompiler()
     {
         BaseClass = "Spark.Tests.Stubs.StubSparkView",
         NullBehaviour = NullBehaviour.Strict
     };
     DoCompileView(compiler, new Chunk[]
                      {
                          new PageBaseTypeChunk {  BaseClass="Spark.Tests.Stubs.StubSparkView2"},
                          new SendLiteralChunk{ Text = "Hello world"}
                      });
     var instance = compiler.CreateInstance();
     Assert.That(instance, Is.InstanceOfType(typeof(StubSparkView2)));
 }
Exemplo n.º 13
0
        public void MakeAndCompile()
        {
            var compiler = new DefaultViewCompiler { BaseClass = "Spark.AbstractSparkView" };

            DoCompileView(compiler, new[] { new SendLiteralChunk { Text = "hello world" } });

            var instance = compiler.CreateInstance();
            string contents = instance.RenderView();

            Assert.That(contents.Contains("hello world"));
        }
Exemplo n.º 14
0
        public void LocalVariableDecl()
        {
            var compiler = new DefaultViewCompiler { BaseClass = "Spark.AbstractSparkView" };
            DoCompileView(compiler, new Chunk[]
                                 	{
                                 		new LocalVariableChunk { Name = "i", Value = "5" },
                                 		new SendExpressionChunk { Code = "i" }
                                 	});
            var instance = compiler.CreateInstance();
            string contents = instance.RenderView();

            Assert.AreEqual("5", contents);
        }
Exemplo n.º 15
0
 public void LenientSilentNullDoesNotCauseWarningCS0168()
 {
     var compiler = new DefaultViewCompiler()
     {
         BaseClass = "Spark.Tests.Stubs.StubSparkView",
         NullBehaviour = NullBehaviour.Lenient
     };
     var chunks = new Chunk[]
                      {
                          new ViewDataChunk { Name="comment", Type="Spark.Tests.Models.Comment"},
                          new SendExpressionChunk {Code = "comment.Text", SilentNulls = true}
                      };
     compiler.CompileView(new[] { chunks }, new[] { chunks });
     Assert.That(compiler.SourceCode.Contains("catch(System.NullReferenceException)"));
 }
Exemplo n.º 16
0
 public void ProvideFullException()
 {
     var compiler = new DefaultViewCompiler { BaseClass = "Spark.AbstractSparkView" };
     DoCompileView(compiler, new Chunk[]
                          	{
                          		new SendExpressionChunk {Code = "NoSuchVariable"}
                          	});
 }
 public DefaultViewCompilerProvider(
     ApplicationPartManager applicationPartManager,
     ILoggerFactory loggerFactory)
 {
     _compiler = new DefaultViewCompiler(applicationPartManager, loggerFactory.CreateLogger <DefaultViewCompiler>());
 }