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

            var language = descriptor.Language;
            if (language == LanguageType.Default)
                language = engine.Settings.DefaultLanguage;

            ViewCompiler viewCompiler;
            switch (language)
            {
                case LanguageType.Default:
                case LanguageType.CSharp:
                    viewCompiler = new CSharpViewCompiler();
                    break;
                case LanguageType.VisualBasic:
                    viewCompiler = new VisualBasicViewCompiler();
                    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;
        }
 public void ForEachAutoVariables()
 {
     var compiler = new VisualBasicViewCompiler { BaseClass = "Spark.AbstractSparkView" };
     DoCompileView(compiler, new Chunk[]
                             {
                                 new LocalVariableChunk {Name = "data", Value = "new Integer(){3,4,5}"},
                                 new SendLiteralChunk {Text = "<ul>"},
                                 new ForEachChunk
                                 {
                                     Code = "item As Integer in data",
                                     Body = new Chunk[]
                                            {
                                                new SendLiteralChunk {Text = "<li>"},
                                                new SendExpressionChunk {Code = "item"},
                                                new SendExpressionChunk {Code = "itemIsFirst"},
                                                new SendExpressionChunk {Code = "itemIsLast"},
                                                new SendExpressionChunk {Code = "itemIndex"},
                                                new SendExpressionChunk {Code = "itemCount"},
                                                new SendLiteralChunk {Text = "</li>"}
                                            }
                                 },
                                 new SendLiteralChunk {Text = "</ul>"}
                             });
     var instance = compiler.CreateInstance();
     var contents = instance.RenderView();
     Assert.AreEqual("<ul><li>3TrueFalse03</li><li>4FalseFalse13</li><li>5FalseTrue23</li></ul>", contents);
 }
 public void ForEachLoop()
 {
     var compiler = new VisualBasicViewCompiler { BaseClass = "Spark.AbstractSparkView" };
     DoCompileView(compiler, new Chunk[]
                             {
                                 new LocalVariableChunk {Name = "data", Value = "new Integer(){3,4,5}"},
                                 new SendLiteralChunk {Text = "<ul>"},
                                 new ForEachChunk
                                 {
                                     Code = "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);
 }
 public void GlobalVariables()
 {
     var compiler = new VisualBasicViewCompiler { 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);
 }
        public void TargetNamespace()
        {
            var compiler = new VisualBasicViewCompiler
            {
                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);
        }
        public void StronglyTypedBase()
        {
            var compiler = new VisualBasicViewCompiler { BaseClass = "Spark.Tests.Stubs.StubSparkView" };

            DoCompileView(compiler, new Chunk[]
            {
                new SendLiteralChunk { Text = "hello world" },
                new ViewDataModelChunk { TModel="Global.System.String"}
            });

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

            Assert.That(contents.Contains("hello world"));
        }
 public void StrictNullUsesException()
 {
     var compiler = new VisualBasicViewCompiler()
                    {
                        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 ex As Global.System.NullReferenceException"));
     Assert.That(compiler.SourceCode.Contains("ArgumentNullException("));
     Assert.That(compiler.SourceCode.Contains(", ex)"));
 }
 public void SimpleOutput()
 {
     var compiler = new VisualBasicViewCompiler { BaseClass = "Spark.AbstractSparkView" };
     DoCompileView(compiler, new[] { new SendExpressionChunk { Code = "3 + 4" } });
     var instance = compiler.CreateInstance();
     string contents = instance.RenderView();
     Assert.AreEqual("7", contents);
 }
 public void ProvideFullException()
 {
     var compiler = new VisualBasicViewCompiler { BaseClass = "Spark.AbstractSparkView" };
     Assert.That(() =>
                 DoCompileView(compiler, new Chunk[]
                                             {
                                                 new SendExpressionChunk {Code = "NoSuchVariable"}
                                             }),
                 Throws.TypeOf<BatchCompilerException>());
 }
 public void PageBaseTypeWorksWithOptionalModel()
 {
     var compiler = new VisualBasicViewCompiler()
                    {
                        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.InstanceOf(typeof(StubSparkView2)));
     Assert.That(instance, Is.InstanceOf(typeof(StubSparkView2<Comment>)));
 }
 public void PageBaseTypeWorksWithGenericParametersIncluded()
 {
     var compiler = new VisualBasicViewCompiler()
                    {
                        BaseClass = "Spark.Tests.Stubs.StubSparkView",
                        NullBehaviour = NullBehaviour.Strict
                    };
     DoCompileView(compiler, new Chunk[]
                             {
                                 new PageBaseTypeChunk {BaseClass = "Spark.Tests.Stubs.StubSparkView3(Of Spark.Tests.Models.Comment, string)"},
                                 new SendLiteralChunk {Text = "Hello world"}
                             });
     var instance = compiler.CreateInstance();
     Assert.That(instance, Is.InstanceOf(typeof(StubSparkView2)));
     Assert.That(instance, Is.InstanceOf(typeof(StubSparkView2<Comment>)));
     Assert.That(instance, Is.InstanceOf(typeof(StubSparkView3<Comment, string>)));
 }
 public void PageBaseTypeOverridesBaseClass()
 {
     var compiler = new VisualBasicViewCompiler()
                    {
                        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.InstanceOf(typeof(StubSparkView2)));
 }
        public void LocalVariableDecl()
        {
            var compiler = new VisualBasicViewCompiler { 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);
        }
        public void IfTrueCondition()
        {
            var compiler = new VisualBasicViewCompiler { BaseClass = "Spark.AbstractSparkView" };

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

            DoCompileView(compiler, new Chunk[]
                                    {
                                        new SendLiteralChunk {Text = "<p>"},
                                        new LocalVariableChunk{Name="arg", Value="5"},
                                        new ConditionalChunk{Type=ConditionalType.If, Condition="arg=5", Body=trueChunks},
                                        new SendLiteralChunk {Text = "</p>"}
                                    });
            var instance = compiler.CreateInstance();
            var contents = instance.RenderView();
            Assert.AreEqual("<p>wastrue</p>", contents);
        }
 public void ProvideFullException()
 {
     var compiler = new VisualBasicViewCompiler { BaseClass = "Spark.AbstractSparkView" };
     DoCompileView(compiler, new Chunk[]
                             {
                                 new SendExpressionChunk {Code = "NoSuchVariable"}
                             });
 }
        public void TargetNamespace()
        {
            // TODO: Fix on Mono/Linux - ahjohannessen
            var platform = Environment.OSVersion.Platform;
            if(platform == PlatformID.Unix || platform == PlatformID.MacOSX)
            {
                Assert.Ignore();
            }

            var compiler = new VisualBasicViewCompiler
            {
                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);
        }