예제 #1
0
        public void IfFalseCondition()
        {
            var compiler = new OxygeneViewCompiler { BaseClass = "Spark.SparkViewBase" };

            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 = 6", Body=trueChunks},
                                        new SendLiteralChunk {Text = "</p>"}
                                    });
            var instance = compiler.CreateInstance();
            var contents = instance.RenderView();
            Assert.AreEqual("<p></p>", contents);
        }
예제 #2
0
        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;
                case LanguageType.Oxygene:
                    viewCompiler = new OxygeneViewCompiler();
                    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;
        }
예제 #3
0
 public void ForEachLoop()
 {
     var compiler = new OxygeneViewCompiler { BaseClass = "Spark.SparkViewBase" };
     DoCompileView(compiler, new Chunk[]
                             {
                                 new LocalVariableChunk {Name = "data", Value = "array of System.Object ([3,4,5])"},
                                 new SendLiteralChunk {Text = "<ul>"},
                                 new ForEachChunk
                                 {
                                     //Code = "var item in data",
                                     Code = "item in data", // for each 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);
 }
예제 #4
0
        public void UnsafeLiteralCharacters()
        {
            var text = "hello\t\r\n'world";
            var compiler = new OxygeneViewCompiler { BaseClass = "Spark.SparkViewBase" };
            DoCompileView(compiler, new[] { new SendLiteralChunk { Text = text } });

            Assert.That(compiler.SourceCode.Contains("Write('hello"));

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

            Assert.AreEqual(text, contents);
        }
예제 #5
0
 public void TargetNamespace()
 {
     var compiler = new OxygeneViewCompiler
     {
         BaseClass = "Spark.SparkViewBase",
         Descriptor = new SparkViewDescriptor { TargetNamespace = "Testing.Target.Namespace" },
         UseNamespaces = new List<string>() { "System.Collections.Generic" }
     };
     DoCompileView(compiler, new Chunk[] { new SendLiteralChunk { Text = "Hello" } });
     var instance = compiler.CreateInstance();
     Assert.AreEqual("Testing.Target.Namespace", instance.GetType().Namespace);
 }
예제 #6
0
 public void SimpleOutput()
 {
     var compiler = new OxygeneViewCompiler { BaseClass = "Spark.SparkViewBase" };
     DoCompileView(compiler, new[] { new SendExpressionChunk { Code = "3 + 4" } });
     var instance = compiler.CreateInstance();
     string contents = instance.RenderView();
     Assert.AreEqual("7", contents);
 }
예제 #7
0
 public void ProvideFullException()
 {
     var compiler = new OxygeneViewCompiler { BaseClass = "Spark.SparkViewBase" };
     DoCompileView(compiler, new Chunk[]
                             {
                                 new SendExpressionChunk {Code = "NoSuchVariable"}
                             });
 }
예제 #8
0
 public void PageBaseTypeWorksWithOptionalModel()
 {
     var compiler = new OxygeneViewCompiler()
     {
         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>)));
 }
예제 #9
0
 public void PageBaseTypeWorksWithGenericParametersIncluded()
 {
     var compiler = new OxygeneViewCompiler()
     {
         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>)));
 }
예제 #10
0
 public void PageBaseTypeOverridesBaseClass()
 {
     var compiler = new OxygeneViewCompiler()
     {
         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)));
 }
예제 #11
0
        public void MakeAndCompile()
        {
            var compiler = new OxygeneViewCompiler { BaseClass = "Spark.SparkViewBase" };

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

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

            Assert.That(contents.Contains("hello world"));
        }
예제 #12
0
        public void LocalVariableDecl()
        {
            var compiler = new OxygeneViewCompiler { BaseClass = "Spark.SparkViewBase" };
            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);
        }