Esempio n. 1
0
 public void TestExtensions()
 {
     var descriptor = new SparkViewDescriptor();
     descriptor.Templates.Add("Home\\extensionelements.spark");
     var entry = engine.CreateEntry(engine.CreateKey(descriptor));
     Assert.That(entry.Compiler.SourceCode.Contains("//this was a test"));
 }
Esempio n. 2
0
        public override ViewCompiler CreateViewCompiler(ISparkViewEngine engine, SparkViewDescriptor descriptor)
        {
            ViewCompiler viewCompiler;
            switch (descriptor.Language)
            {
                case LanguageType.Default:
                case LanguageType.Python:
                    viewCompiler = new PythonViewCompiler();
                    break;
                default:
                    return base.CreateViewCompiler(engine, descriptor);
            }

            var pageBaseType = engine.Settings.PageBaseType;
            if (string.IsNullOrEmpty(pageBaseType))
                pageBaseType = engine.DefaultPageBaseType;

            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 CreatePythonViewCompiler()
        {
            var descriptor   = new SparkViewDescriptor().SetLanguage(LanguageType.Python);
            var viewCompiler = _engine.LanguageFactory.CreateViewCompiler(_engine, descriptor);

            Assert.IsAssignableFrom(typeof(PythonViewCompiler), viewCompiler);
        }
Esempio n. 4
0
        public void UseAssemblyAndNamespaceFromSettings()
        {
            var settings = new SparkSettings()
                           .AddNamespace("System.Web")
                           .AddAssembly("System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a")
                           .SetPageBaseType(typeof(StubSparkView));

            var views = new InMemoryViewFolder
            {
                { Path.Combine("home", "index.spark"), "<div>${ProcessStatus.Alive}</div>" }
            };

            var engine = new SparkViewEngine(settings)
            {
                ViewFolder = views
            };

            var descriptor = new SparkViewDescriptor();

            descriptor.Templates.Add(Path.Combine("home", "index.spark"));

            var contents = engine.CreateInstance(descriptor).RenderView();

            Assert.AreEqual("<div>Alive</div>", contents);
        }
Esempio n. 5
0
    static void Main(string[] args)
    {
        // following are one-time steps
        // create engine
        var settings = new SparkSettings()
                       .SetPageBaseType(typeof(EmailView));
        var templates = new InMemoryViewFolder();
        var engine    = new SparkViewEngine(settings)
        {
            ViewFolder = templates
        };

        // add templates
        templates.Add("sample.spark", @"Dear ${user.Name}, This is an email.Sincerely, Spark View Engine http://constanto.org/unsubscribe/${user.Id}");
        // following are per-render steps
        // render template
        var descriptor = new SparkViewDescriptor()
                         .AddTemplate("sample.spark");
        var view = (EmailView)engine.CreateInstance(descriptor);

        view.user = new User {
            Id = 655321, Name = "Alex"
        };
        view.RenderView(Console.Out);
        Console.ReadLine();
    }
 public void CreateEntryForView()
 {
     var descriptor = new SparkViewDescriptor().SetLanguage(LanguageType.Python);
     var entry = _engine.CreateEntry(descriptor);
     var view = entry.CreateInstance();
     Assert.IsInstanceOf(typeof(StubSparkView), view);
 }
Esempio n. 7
0
        public override ViewCompiler CreateViewCompiler(ISparkViewEngine engine, SparkViewDescriptor descriptor)
        {
            ViewCompiler viewCompiler;

            switch (descriptor.Language)
            {
            case LanguageType.Default:
            case LanguageType.Python:
                viewCompiler = new PythonViewCompiler();
                break;

            default:
                return(base.CreateViewCompiler(engine, descriptor));
            }

            var pageBaseType = engine.Settings.PageBaseType;

            if (string.IsNullOrEmpty(pageBaseType))
            {
                pageBaseType = engine.DefaultPageBaseType;
            }

            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);
        }
Esempio n. 8
0
        private SparkViewDescriptor BuildDescriptor(Template template, bool searchForMaster, ICollection<string> searchedLocations)
        {
            var descriptor = new SparkViewDescriptor
            {
                TargetNamespace = GetNamespaceEncodedPathViewPath(GetFullPath(template))
            };

            descriptor.Templates.Add(GetFullPath(template).Replace("\\", "/"));

            if (searchForMaster && TrailingUseMasterName(descriptor) == null)
            {
                LocatePotentialTemplate(
                    PotentialDefaultMasterLocations(template),
                    descriptor.Templates,
                    null);
            }

            var trailingUseMaster = TrailingUseMasterName(descriptor);
            while (searchForMaster && !string.IsNullOrEmpty(trailingUseMaster))
            {
                if (!LocatePotentialTemplate(
                    PotentialMasterLocations(template, trailingUseMaster),
                    descriptor.Templates,
                    searchedLocations))
                {
                    return null;
                }
                trailingUseMaster = TrailingUseMasterName(descriptor);
            }

            return descriptor;
        }
Esempio n. 9
0
 public SparkViewToken(ActionCall actionCall, SparkViewDescriptor matchedDescriptor, string actionName, string viewName)
 {
     _actionCall = actionCall;
     _matchedDescriptor = matchedDescriptor;
     _actionName = actionName;
     _viewName = viewName;
 }
Esempio n. 10
0
        public static string RenderTemplate(string template, ViewDataDictionary viewData)
        {
            // Set up your spark engine goodness.
            var settings = new SparkSettings().SetPageBaseType(typeof(SparkView));

            var engine = new SparkViewEngine(settings)
            {
                ViewFolder = new FileSystemViewFolder(AppDomain.CurrentDomain.BaseDirectory + @"\..\..\..\IntegrationTestingViews\Views")
            };

            // "Describe" the view (the template, it is a template after all), and its details.
            var descriptor = new SparkViewDescriptor().AddTemplate(template);

            // Create a spark view engine instance
            var view = (SparkView)engine.CreateInstance(descriptor);

            try
            {
                // Merge the view data.
                viewData.Keys.ToList().ForEach(x => view.ViewData[x] = viewData[x]);

                // Render the view to a text writer.
                var writer = new StringWriter();
                view.RenderView(writer);
                return(writer.ToString());
            }
            finally
            {
                engine.ReleaseInstance(view);
            }
        }
Esempio n. 11
0
        public string Convert(string templateName, ViewData data, string relativeOutputPath)
        {
            string template = templateName;

            if (template.StartsWith(templatePath))
            {
                template = template.Substring(templatePath.Length + 1);
            }

            SparkViewDescriptor descriptor = new SparkViewDescriptor()
                                             .AddTemplate(template);
            var view = (SparkTemplateBase)engine.CreateInstance(descriptor);

            using (var writer = new StringWriter())
            {
                try
                {
                    view.RelativeOutputPath = relativeOutputPath;
                    view.ViewData           = data;
                    view.RenderView(writer);
                }
                finally
                {
                    engine.ReleaseInstance(view);
                }

                return(writer.ToString());
            }
        }
Esempio n. 12
0
        public void EmptyMasterPreventsDefaultLayout()
        {
            var settings = new SparkSettings()
                           .SetPageBaseType(typeof(StubSparkView));
            var container = new SparkServiceContainer(settings);

            var viewFolder = new InMemoryViewFolder
            {
                { "Home\\Index.spark", "<use master=\"\"/><p>Hello world</p><content:title>bar</content:title>" },
                { "Layouts\\Application.spark", "<h1>alpha</h1><use:view/><p>beta</p>" }
            };

            container.SetServiceBuilder <IViewFolder>(c => viewFolder);

            var engine = container.GetService <ISparkViewEngine>();

            var descriptor = new SparkViewDescriptor()
                             .AddTemplate("Home\\Index.spark")
                             .AddTemplate("Layouts\\Application.spark");

            var view     = engine.CreateInstance(descriptor);
            var contents = view.RenderView();

            engine.ReleaseInstance(view);

            Assert.AreEqual("<p>Hello world</p>", contents);
        }
Esempio n. 13
0
        private string RenderView(SparkViewDescriptor descriptor)
        {
            var view     = _engine.CreateInstance(descriptor);
            var contents = view.RenderView();

            _engine.ReleaseInstance(view);
            return(contents);
        }
Esempio n. 14
0
 private void AddAccessor(SparkViewDescriptor descriptor, bool isNew, Type modelType, string propertyName, string baseExpression)
 {
     if (modelType.GetCustomAttributes(typeof(CompilerGlobalScopeAttribute), false).Any())
     {
         modelType = modelType.BaseType;
     }
     descriptor.AddAccessor((isNew ? "new " : "") + modelType + " " + propertyName, baseExpression + " as " + modelType);
 }
        public void CreateEntryForView()
        {
            var descriptor = new SparkViewDescriptor().SetLanguage(LanguageType.Python);
            var entry      = _engine.CreateEntry(descriptor);
            var view       = entry.CreateInstance();

            Assert.IsInstanceOf(typeof(StubSparkView), view);
        }
Esempio n. 16
0
        static string RenderView(ISparkViewEngine engine, string path)
        {
            var descriptor = new SparkViewDescriptor()
                             .AddTemplate(path);

            return(engine
                   .CreateInstance(descriptor)
                   .RenderView());
        }
Esempio n. 17
0
 private static void AssertDescriptorTemplates(SparkViewDescriptor descriptor, IEnumerable <string> searchedLocations, params string[] templates)
 {
     templates.ShouldHaveCount(descriptor.Templates.Count);
     for (var index = 0; index != templates.Length; ++index)
     {
         templates[index].ShouldEqual(descriptor.Templates[index]);
     }
     searchedLocations.ShouldHaveCount(0);
 }
Esempio n. 18
0
        public SparkRenderer()
        {
            var factory = new SparkViewEngineFactory();

            _engine = factory.CreateViewEngine();

            _report = new SparkViewDescriptor().AddTemplate(SparkViewEngineFactory.ReportTemplate);
            _index  = new SparkViewDescriptor().AddTemplate(SparkViewEngineFactory.IndexTemplate);
        }
Esempio n. 19
0
        public SparkViewToken(ActionCall actionCall, SparkViewDescriptor matchedDescriptor, string actionName, string viewName)
        {
            _actionCall        = actionCall;
            _matchedDescriptor = matchedDescriptor;
            _actionName        = actionName;
            _viewName          = viewName;

            _descriptors = new List <SparkViewDescriptor>();
        }
Esempio n. 20
0
        public void TestExtensions()
        {
            var descriptor = new SparkViewDescriptor();

            descriptor.Templates.Add("Home\\extensionelements.spark");
            var entry = engine.CreateEntry(descriptor);

            Assert.That(entry.SourceCode.Contains("//this was a test"));
        }
Esempio n. 21
0
        public void descriptors_with_normal_view_and_no_default_layout()
        {
            _actionContext.Params.Add("controller", "Bar");
            _viewFolder.Add(@"Bar\Index.spark", "");

            SparkViewDescriptor result = _factory.CreateDescriptor(_actionContext, "Index", null, true, new List <string>());

            AssertDescriptorTemplates(result, new List <string>(), @"Bar\Index.spark");
        }
Esempio n. 22
0
        protected override void beforeEach()
        {
            _cache      = new Dictionary <int, ISparkViewEntry>();
            _descriptor = new SparkViewDescriptor();
            _descriptor.AddTemplate("Views/Home/Home.spark");
            _engine = MockFor <ISparkViewEngine>();

            Services.Inject(_cache);
            Services.Inject(_descriptor);
        }
Esempio n. 23
0
        private static SparkViewDescriptor Desc(params string[] templates)
        {
            var desc = new SparkViewDescriptor();

            foreach (string template in templates)
            {
                desc.AddTemplate(template);
            }
            return(desc);
        }
Esempio n. 24
0
        public void descriptors_with_normal_view_and_empty_master()
        {
            _actionContext.Params.Add("controller", "Bar");
            _viewFolder.Add(@"Layouts\Application.spark", "");
            _viewFolder.Add(@"Bar\Index.spark", "<use master=''/>");

            SparkViewDescriptor result = _factory.CreateDescriptor(_actionContext, "Index", null, true, new List <string>());

            AssertDescriptorTemplates(result, new List <string>(), @"Bar\Index.spark");
        }
        public SparkRenderer()
        {
            var factory = new SparkViewEngineFactory();

            _engine = factory.CreateViewEngine();
            _engine.LoadBatchCompilation(Assembly.Load(factory.TemplateAssembly));

            _report = new SparkViewDescriptor().AddTemplate(SparkViewEngineFactory.ReportTemplate);
            _index  = new SparkViewDescriptor().AddTemplate(SparkViewEngineFactory.IndexTemplate);
        }
Esempio n. 26
0
        private static void appendMasterPage(SparkViewDescriptor descriptor, ISparkTemplate template)
        {
            if (template == null)
            {
                return;
            }

            descriptor.AddTemplate(template.ViewPath);
            appendMasterPage(descriptor, template.Master as ISparkTemplate);
        }
Esempio n. 27
0
        private SparkViewDescriptor createSparkDescriptor(bool useMaster)
        {
            var sparkDescriptor = new SparkViewDescriptor().AddTemplate(_descriptor.ViewPath);

            if (useMaster && _descriptor.Master != null)
            {
                sparkDescriptor.AddTemplate(_descriptor.Master.ViewPath);
            }

            return(sparkDescriptor);
        }
Esempio n. 28
0
        private static SparkViewDescriptor createSparkDescriptor(bool useMaster, ViewDescriptor viewDescriptor)
        {
            var sparkDescriptor = new SparkViewDescriptor().AddTemplate(viewDescriptor.ViewPath);

            if (useMaster && viewDescriptor.Master != null)
            {
                appendMasterPage(sparkDescriptor, viewDescriptor.Master);
            }

            return(sparkDescriptor);
        }
Esempio n. 29
0
        public virtual SparkViewDescriptor BuildDescriptor(BuildDescriptorParams buildDescriptorParams, ICollection <string> searchedLocations)
        {
            var descriptor = new SparkViewDescriptor
            {
                TargetNamespace = GetNamespaceEncodedPathViewPath(buildDescriptorParams.ViewPath)
            };

            if (!LocatePotentialTemplate(
                    PotentialViewLocations(buildDescriptorParams.ViewPath,
                                           buildDescriptorParams.ViewName,
                                           buildDescriptorParams.Extra),
                    descriptor.Templates,
                    searchedLocations))
            {
                return(null);
            }

            if (!string.IsNullOrEmpty(buildDescriptorParams.MasterName))
            {
                if (!LocatePotentialTemplate(
                        PotentialMasterLocations(buildDescriptorParams.MasterName,
                                                 buildDescriptorParams.Extra),
                        descriptor.Templates,
                        searchedLocations))
                {
                    return(null);
                }
            }
            else if (buildDescriptorParams.FindDefaultMaster && TrailingUseMasterName(descriptor) == null /*empty is a valid value*/)
            {
                LocatePotentialTemplate(
                    PotentialDefaultMasterLocations(buildDescriptorParams.ViewPath,
                                                    buildDescriptorParams.Extra),
                    descriptor.Templates,
                    null);
            }

            var trailingUseMaster = TrailingUseMasterName(descriptor);

            while (buildDescriptorParams.FindDefaultMaster && !string.IsNullOrEmpty(trailingUseMaster))
            {
                if (!LocatePotentialTemplate(
                        PotentialMasterLocations(trailingUseMaster,
                                                 buildDescriptorParams.Extra),
                        descriptor.Templates,
                        searchedLocations))
                {
                    return(null);
                }
                trailingUseMaster = TrailingUseMasterName(descriptor);
            }

            return(descriptor);
        }
Esempio n. 30
0
        private SparkViewDescriptor createSparkDescriptor(bool useMaster)
        {
            var sparkDescriptor = new SparkViewDescriptor().AddTemplate(ViewPath);

            if (useMaster && Master != null)
            {
                appendMasterPage(sparkDescriptor, (ISparkTemplate)Master);
            }

            return(sparkDescriptor);
        }
        public override ViewCompiler CreateViewCompiler(ISparkViewEngine engine, SparkViewDescriptor descriptor)
        {
            Initialize();
            var viewCompiler = base.CreateViewCompiler(engine, descriptor);

            if (viewCompiler is RubyViewCompiler)
            {
                ((RubyViewCompiler)viewCompiler).ScriptHeader = _scriptHeader;
            }
            return(viewCompiler);
        }
Esempio n. 32
0
        public void descriptors_with_route_area_present_should_default_to_normal_location()
        {
            _actionContext.Params.Add("area", "SomeFooArea");
            _actionContext.Params.Add("controller", "Bar");
            _viewFolder.Add(@"Bar\Index.spark", "");
            _viewFolder.Add(@"Layouts\Application.spark", "");

            SparkViewDescriptor result = _factory.CreateDescriptor(_actionContext, "Index", null, true, new List <string>());

            AssertDescriptorTemplates(result, new List <string>(), @"Bar\Index.spark", @"Layouts\Application.spark");
        }
Esempio n. 33
0
        public void RenderView(StubViewContext viewContext)
        {
            var descriptor = new SparkViewDescriptor();
            descriptor.Templates.Add(viewContext.ControllerName + "\\" + viewContext.ViewName + ".spark");
            if (viewContext.MasterName != null)
                descriptor.Templates.Add("Shared\\" + viewContext.MasterName + ".spark");

            var sparkView = Engine.CreateInstance(descriptor);
            ((StubSparkView)sparkView).ViewData = viewContext.Data;
            sparkView.RenderView(new StringWriter(viewContext.Output));
        }
Esempio n. 34
0
        public SparkViewDescriptor BuildDescriptor(BuildDescriptorParams buildDescriptorParams, ICollection <string> searchedLocations)
        {
            var descriptor = new SparkViewDescriptor
            {
                TargetNamespace = buildDescriptorParams.ActionNamespace
            };

            if (!LocatePotentialTemplate(
                    PotentialViewLocations(buildDescriptorParams.AcionName,
                                           buildDescriptorParams.ViewName,
                                           buildDescriptorParams.Extra),
                    descriptor.Templates,
                    searchedLocations))
            {
                return(null);
            }

            if (!string.IsNullOrEmpty(buildDescriptorParams.MasterName))
            {
                if (!LocatePotentialTemplate(
                        PotentialMasterLocations(buildDescriptorParams.MasterName,
                                                 buildDescriptorParams.Extra),
                        descriptor.Templates,
                        searchedLocations))
                {
                    return(null);
                }
            }
            else if (buildDescriptorParams.FindDefaultMaster && TrailingUseMasterName(descriptor) == null)
            {
                LocatePotentialTemplate(
                    PotentialDefaultMasterLocations(buildDescriptorParams.AcionName,
                                                    buildDescriptorParams.Extra),
                    descriptor.Templates,
                    null);
            }

            string trailingUseMaster = TrailingUseMasterName(descriptor);

            while (buildDescriptorParams.FindDefaultMaster && !string.IsNullOrEmpty(trailingUseMaster))
            {
                if (!LocatePotentialTemplate(
                        PotentialMasterLocations(trailingUseMaster,
                                                 buildDescriptorParams.Extra),
                        descriptor.Templates,
                        searchedLocations))
                {
                    return(null);
                }
                trailingUseMaster = TrailingUseMasterName(descriptor);
            }

            return(descriptor);
        }
Esempio n. 35
0
        public void GenerateSimpleTemplate()
        {
            var descriptor = new SparkViewDescriptor()
                .SetLanguage(LanguageType.Javascript)
                .AddTemplate("Clientside\\simple.spark");

            var engine = new SparkViewEngine { ViewFolder = new FileSystemViewFolder("Spark.Tests.Views") };
            var entry = engine.CreateEntry(descriptor);

            Assert.IsNotNull(entry.SourceCode);
            Assert.IsNotEmpty(entry.SourceCode);
        }
Esempio n. 36
0
        public virtual SparkViewDescriptor BuildDescriptor(BuildDescriptorParams buildDescriptorParams, ICollection<string> searchedLocations)
        {
            var descriptor = new SparkViewDescriptor
                                 {
                                     TargetNamespace = GetNamespaceEncodedPathViewPath(buildDescriptorParams.ViewPath)
                                 };

            if (!LocatePotentialTemplate(
                PotentialViewLocations(buildDescriptorParams.ViewPath,
                                       buildDescriptorParams.ViewName,
                                       buildDescriptorParams.Extra),
                descriptor.Templates,
                searchedLocations))
            {
                return null;
            }

            if (!string.IsNullOrEmpty(buildDescriptorParams.MasterName))
            {
                if (!LocatePotentialTemplate(
                    PotentialMasterLocations(buildDescriptorParams.MasterName,
                                             buildDescriptorParams.Extra),
                    descriptor.Templates,
                    searchedLocations))
                {
                    return null;
                }
            }
            else if (buildDescriptorParams.FindDefaultMaster && TrailingUseMasterName(descriptor) == null /*empty is a valid value*/)
            {
                LocatePotentialTemplate(
                    PotentialDefaultMasterLocations(buildDescriptorParams.ViewPath,
                                                    buildDescriptorParams.Extra),
                    descriptor.Templates,
                    null);
            }

            var trailingUseMaster = TrailingUseMasterName(descriptor);
            while (buildDescriptorParams.FindDefaultMaster && !string.IsNullOrEmpty(trailingUseMaster))
            {
                if (!LocatePotentialTemplate(
                    PotentialMasterLocations(trailingUseMaster,
                                             buildDescriptorParams.Extra ),
                    descriptor.Templates,
                    searchedLocations))
                {
                    return null;
                }
                trailingUseMaster = TrailingUseMasterName(descriptor);
            }

            return descriptor;
        }
Esempio n. 37
0
        public void descriptors_with_some_foo_area_folder_could_contain_controller_folder()
        {
            _actionContext.Params.Add("area", "SomeFooArea");
            _actionContext.Params.Add("controller", "Bar");
            _viewFolder.Add(@"Bar\Index.spark", "");
            _viewFolder.Add(@"Layouts\Application.spark", "");
            _viewFolder.Add(@"SomeFooArea\Bar\Index.spark", "");

            SparkViewDescriptor result = _factory.CreateDescriptor(_actionContext, "Index", null, true, new List <string>());

            AssertDescriptorTemplates(result, new List <string>(), @"SomeFooArea\Bar\Index.spark", @"Layouts\Application.spark");
        }
Esempio n. 38
0
        public void InMemoryViewFolderUsedByEngine()
        {
            var folder = new InMemoryViewFolder();
            folder.Add("home\\index.spark", "<p>Hello world</p>");
            var engine = new SparkViewEngine(new SparkSettings().SetPageBaseType(typeof (StubSparkView))){ViewFolder = folder};

            var descriptor = new SparkViewDescriptor();
            descriptor.Templates.Add("home\\index.spark");
            var view = engine.CreateInstance(descriptor);
            var contents = view.RenderView();
            Assert.AreEqual("<p>Hello world</p>", contents);
        }
        public virtual SparkViewDescriptor BuildDescriptor(BuildDescriptorParams buildDescriptorParams, ICollection<string> searchedLocations)
        {
            var descriptor = new SparkViewDescriptor
                                 {
                                     TargetNamespace = buildDescriptorParams.TargetNamespace
                                 };

            if (!LocatePotentialTemplate(
                     PotentialViewLocations(buildDescriptorParams.ControllerName,
                         buildDescriptorParams.ViewName,
                         buildDescriptorParams.Extra),
                     descriptor.Templates,
                     searchedLocations))
            {
                return null;
            }

            if (!string.IsNullOrEmpty(buildDescriptorParams.LayoutName))
            {
                if (!LocatePotentialTemplate(
                         PotentialMasterLocations(buildDescriptorParams.LayoutName,
                             buildDescriptorParams.Extra),
                         descriptor.Templates,
                         searchedLocations))
                {
                    return null;
                }
            }
            else if (buildDescriptorParams.FindDefaultMaster && string.IsNullOrEmpty(TrailingUseMasterName(descriptor)))
            {
                LocatePotentialTemplate(
                    PotentialDefaultMasterLocations(buildDescriptorParams.ControllerName,
                        buildDescriptorParams.Extra),
                    descriptor.Templates,
                    null);
            }

            var trailingUseMaster = TrailingUseMasterName(descriptor);
            while (buildDescriptorParams.FindDefaultMaster && !string.IsNullOrEmpty(trailingUseMaster))
            {
                if (!LocatePotentialTemplate(
                         PotentialMasterLocations(trailingUseMaster,
                            buildDescriptorParams.Extra),
                         descriptor.Templates,
                         searchedLocations))
                {
                    return null;
                }
                trailingUseMaster = TrailingUseMasterName(descriptor);
            }

            return descriptor;
        }
Esempio n. 40
0
        public void RenderView(StubViewContext viewContext, string extension = null)
        {
            var descriptor = new SparkViewDescriptor();
            descriptor.Templates.Add(Path.Combine(viewContext.ControllerName, viewContext.ViewName + (extension ?? Constants.DotSpark)));
            if (viewContext.MasterName != null)
                descriptor.Templates.Add(Path.Combine(Constants.Shared, viewContext.MasterName + (extension ?? Constants.DotSpark)));

            var sparkView = Engine.CreateInstance(descriptor);
            ((StubSparkView)sparkView).ViewData = viewContext.Data;
            ((StubSparkView)sparkView).CacheService = CacheService;
            sparkView.RenderView(new StringWriter(viewContext.Output));
        }
Esempio n. 41
0
        public void AnonymousTypeBecomesHashLikeObject()
        {
            var descriptor = new SparkViewDescriptor()
                .SetLanguage(LanguageType.Javascript)
                .AddTemplate("Clientside\\AnonymousTypeBecomesHashLikeObject.spark");

            var engine = new SparkViewEngine { ViewFolder = new FileSystemViewFolder("Spark.Tests.Views") };
            var entry = engine.CreateEntry(descriptor);

            Assert.IsNotNull(entry.SourceCode);
            Assert.IsNotEmpty(entry.SourceCode);

            Assert.That(entry.SourceCode, Text.Contains("x = {foo:\"bar\",quux:5}"));
            Assert.That(entry.SourceCode, Text.Contains("HelloWorld({id:23,data:x})"));
        }
Esempio n. 42
0
        public void CustomViewActivator()
        {
            var engine = new SparkViewEngine(
                new SparkSettings().SetPageBaseType(typeof(StubSparkView)))
                             {
                                 ViewActivatorFactory = new CustomFactory(),
                                 ViewFolder = new InMemoryViewFolder { { "hello/world.spark", "<p>hello world</p>" } }
                             };

            var descriptor = new SparkViewDescriptor().AddTemplate("hello/world.spark");
            var view = engine.CreateInstance(descriptor);

            Assert.IsNotNull(view);
            Assert.IsAssignableFrom(typeof(TestView), view);
        }
        public void UsingCSharpSyntaxInsideEngine()
        {
            // engine takes base class and IViewFolder
            var engine = new SparkViewEngine(
                new SparkSettings().SetPageBaseType("Spark.Tests.Stubs.StubSparkView")) { SyntaxProvider = _syntax, ViewFolder = new FileSystemViewFolder("Spark.Tests.Views") };

            // describe and instantiate view
            var descriptor = new SparkViewDescriptor();
            descriptor.Templates.Add("Code\\simplecode.spark");
            var view = (StubSparkView)engine.CreateInstance(descriptor);

            // provide data and render
            view.ViewData["hello"] = "world";
            var code = view.RenderView();

            Assert.IsNotNull(code);
        }
        public string RenderTemplate(string templateSource, object data)
        {
            SetTemplateSource(templateSource);
            var descriptor = new SparkViewDescriptor();
            descriptor.AddTemplate(TestingViewFolder.SingleTemplateName);
            var engine = sparkConfiguration.Container.GetService<ISparkViewEngine>();
            var view = (SparkResourceView) engine.CreateInstance(descriptor);

            view.ViewData = new ViewData(data);
            var builder = new StringBuilder();
            using (var writer = new StringWriter(builder))
            {
                view.RenderView(writer);
                writer.Flush();
            }
            return builder.ToString();
        }
Esempio n. 45
0
        public void ContextAndControllerContextAvailable()
        {
            mocks.ReplayAll();
            manager.Process("Home\\Index", output, engineContext, controller, controllerContext);

            var descriptor = new SparkViewDescriptor();
            descriptor.Templates.Add("Home\\Index.spark");
            descriptor.Templates.Add("Shared\\default.spark");
            var entry = factory.Engine.GetEntry(descriptor);
            var view = (SparkView)entry.CreateInstance();
            view.Contextualize(engineContext, controllerContext, factory, null);

            var result = new StringWriter();
            view.RenderView(result);
            Assert.AreEqual(result.ToString(), output.ToString());
            Assert.AreSame(engineContext, view.Context);
            Assert.AreSame(controllerContext, view.ControllerContext);
        }
Esempio n. 46
0
        public void DescriptorsAreEqual()
        {
            var descriptor = new SparkViewDescriptor()
                .SetTargetNamespace("Foo")
                .AddTemplate("Home\\Index.spark");

            var assembly = engine.BatchCompilation(new[] { descriptor });

            var types = assembly.GetTypes();
            Assert.AreEqual(1, types.Count());

            var attribs = types[0].GetCustomAttributes(typeof(SparkViewAttribute), false);
            var sparkViewAttrib = (SparkViewAttribute)attribs[0];

            var key0 = descriptor;
            var key1 = sparkViewAttrib.BuildDescriptor();

            Assert.AreEqual(key0, key1);
        }
Esempio n. 47
0
        public void UseAssemblyAndNamespaceFromSettings()
        {
            var settings = new SparkSettings()
                .AddNamespace("System.Web")
                .AddAssembly("System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a")
                .SetPageBaseType(typeof(StubSparkView));

            var views = new InMemoryViewFolder();
            views.Add("Home\\Index.spark", "<div>${ProcessStatus.Alive}</div>");

            var engine = new SparkViewEngine(settings) {ViewFolder = views};

            var descriptor = new SparkViewDescriptor();
            descriptor.Templates.Add("home\\index.spark");

            var contents = engine.CreateInstance(descriptor).RenderView();
            Assert.AreEqual("<div>Alive</div>", contents);
        }
 public string TrailingUseMasterName(SparkViewDescriptor descriptor)
 {
     var lastTemplate = descriptor.Templates.Last();
     var sourceContext = AbstractSyntaxProvider.CreateSourceContext(lastTemplate, _engine.ViewFolder);
     if (sourceContext == null)
         return null;
     var result = ParseUseMaster(new Position(sourceContext));
     return result == null ? null : result.Value;
 }
 private static void AssertDescriptorTemplates(SparkViewDescriptor descriptor, IEnumerable<string> searchedLocations, params string[] templates)
 {
     templates.ShouldHaveCount(descriptor.Templates.Count);
     for (int index = 0; index != templates.Length; ++index)
         templates[index].ShouldEqual(descriptor.Templates[index]);
     searchedLocations.ShouldHaveCount(0);
 }
Esempio n. 50
0
        public void SparkViewDescriptorTargetNamespaceNullAndEmptyAreEqual()
        {
            var desc1 = new SparkViewDescriptor()
                .AddTemplate("foo.spark")
                .SetTargetNamespace(null);

            var desc2 = new SparkViewDescriptor()
                .AddTemplate("foo.spark")
                .SetTargetNamespace("");

            Assert.That(desc1, Is.EqualTo(desc2));
        }
Esempio n. 51
0
        static string RenderView(ISparkViewEngine engine, string path)
        {
            var descriptor = new SparkViewDescriptor()
                .AddTemplate(path);

            return engine
                .CreateInstance(descriptor)
                .RenderView();
        }
Esempio n. 52
0
 private static void AssertDescriptorTemplates(
     SparkViewDescriptor descriptor,
     ICollection<string> searchedLocations,
     params string[] templates)
 {
     Assert.AreEqual(templates.Length, descriptor.Templates.Count, "Descriptor template count must match");
     for (var index = 0; index != templates.Length; ++index)
         Assert.AreEqual(templates[index], descriptor.Templates[index]);
     Assert.AreEqual(0, searchedLocations.Count, "searchedLocations must be empty");
 }
Esempio n. 53
0
        public override void Process(string templateName, TextWriter output, IEngineContext context, IController controller,
            IControllerContext controllerContext)
        {
            var descriptor = new SparkViewDescriptor();
            if (controller != null)
                descriptor.TargetNamespace = controller.GetType().Namespace;

            descriptor.Templates.Add(Path.ChangeExtension(templateName, ViewFileExtension));

            foreach (var layoutName in (controllerContext.LayoutNames ?? new string[0]).Reverse())
            {
                descriptor.Templates.Add(Path.ChangeExtension(LayoutPath(layoutName), ViewFileExtension));
            }

            if (controllerContext.ControllerDescriptor != null)
            {
                foreach (var helper in controllerContext.ControllerDescriptor.Helpers)
                {
                    var typeName = helper.HelperType.FullName;
                    var propertyName = helper.Name ?? helper.HelperType.Name;
                    descriptor.AddAccessor(
                        typeName + " " + propertyName,
                        "Helper<" + typeName + ">(\"" + propertyName + "\")");
                }
            }

            var entry = Engine.CreateEntry(descriptor);
            var view = (SparkView)entry.CreateInstance();
            view.Contextualize(context, controllerContext, this, null);
            if (view.Logger == null || view.Logger == NullLogger.Instance)
                view.Logger = Logger;
            view.RenderView(output);

            // proactively dispose named content. pools spoolwriter pages. avoids finalizers.
            foreach (var writer in view.Content.Values)
                writer.Close();

            view.Content.Clear();

            entry.ReleaseInstance(view);
        }
Esempio n. 54
0
        private SparkViewDescriptor CreateDescriptor(
            string targetNamespace,
            string controllerPath,
            string viewName,
            IList<string> layouts,
            IEnumerable<SparkViewDescriptor.Accessor> accessors)
        {
            var descriptor = new SparkViewDescriptor
            {
                TargetNamespace = targetNamespace
            };

            if (HasTemplate(string.Format("{0}{1}{2}.spark", controllerPath, Path.DirectorySeparatorChar, viewName)))
            {
                descriptor.Templates.Add(string.Format("{0}{1}{2}.spark", controllerPath, Path.DirectorySeparatorChar, viewName));
            }
            else
            {
                throw new CompilerException(string.Format("Unable to find templates {0}{1}{2}.spark", controllerPath, Path.DirectorySeparatorChar, viewName));
            }

            foreach (var layoutName in (layouts ?? new string[0]).Reverse())
            {
                if (HasTemplate(string.Format("Layouts{0}{1}", Path.DirectorySeparatorChar, layoutName)))
                {
                    descriptor.Templates.Add(Path.ChangeExtension(string.Format("Layouts{0}{1}", Path.DirectorySeparatorChar, layoutName), ViewFileExtension));
                }
                else if (HasTemplate(string.Format("Shared{0}{1}", Path.DirectorySeparatorChar, layoutName)))
                {
                    descriptor.Templates.Add(Path.ChangeExtension(string.Format("Shared{0}{1}", Path.DirectorySeparatorChar, layoutName), ViewFileExtension));
                }
                else
                {
                    throw new CompilerException(string.Format(
                                                    "Unable to find templates layouts{0}{1}.spark or shared{0}{1}.spark",
                                                    Path.DirectorySeparatorChar, layoutName));
                }
            }

            foreach (var accessor in accessors)
            {
                descriptor.AddAccessor(accessor.Property, accessor.GetValue);
            }

            return descriptor;
        }
Esempio n. 55
0
 private string RenderView(SparkViewDescriptor descriptor)
 {
     _entry = _engine.CreateEntry(descriptor);
     var view = _entry.CreateInstance();
     var contents = view.RenderView();
     _engine.ReleaseInstance(view);
     return contents;
 }
Esempio n. 56
0
 public void CreatePythonViewCompiler()
 {
     var descriptor = new SparkViewDescriptor().SetLanguage(LanguageType.Python);
     var viewCompiler = _engine.LanguageFactory.CreateViewCompiler(_engine, descriptor);
     Assert.IsAssignableFrom(typeof(PythonViewCompiler), viewCompiler);
 }
Esempio n. 57
0
        public void UseMasterLooksInLayoutFolder()
        {
            _viewFolder.Add("Home\\Index.spark", "<use master=\"foo\"/><p>Hello world</p>");
            _viewFolder.Add("Layouts\\foo.spark", "<h1>alpha</h1><use:view/><p>beta</p>");

            var descriptor = new SparkViewDescriptor()
                .AddTemplate("Home\\Index.spark");

            var contents = RenderView(descriptor);

            Assert.AreEqual("<h1>alpha</h1><p>Hello world</p><p>beta</p>", contents);
        }
Esempio n. 58
0
        public void EmptyMasterPreventsDefaultLayout()
        {
            var settings = new SparkSettings()
                .SetPageBaseType(typeof(StubSparkView));
            var container = new SparkServiceContainer(settings);

            var viewFolder = new InMemoryViewFolder
                             {
                                 {"Home\\Index.spark", "<use master=\"\"/><p>Hello world</p><content:title>bar</content:title>"},
                                 {"Layouts\\Application.spark", "<h1>alpha</h1><use:view/><p>beta</p>"}
                             };

            container.SetServiceBuilder<IViewFolder>(c => viewFolder);

            var engine = container.GetService<ISparkViewEngine>();

            var descriptor = new SparkViewDescriptor()
                .AddTemplate("Home\\Index.spark")
                .AddTemplate("Layouts\\Application.spark");

            var view = engine.CreateInstance(descriptor);
            var contents = view.RenderView();
            engine.ReleaseInstance(view);

            Assert.AreEqual("<p>Hello world</p>", contents);
        }
 public override ViewCompiler CreateViewCompiler(ISparkViewEngine engine, SparkViewDescriptor descriptor)
 {
     Initialize();
     return base.CreateViewCompiler(engine, descriptor);
 }
Esempio n. 60
0
        internal SparkViewDescriptor CreateDescriptorInternal(string targetNamespace, string areaName, string controllerName, string viewName, string masterName, bool findDefaultMaster, ICollection<string> searchedLocations)
        {
            var descriptor = new SparkViewDescriptor
                                 {
                                     TargetNamespace = targetNamespace
                                 };

            if (!LocatePotentialTemplate(
                PotentialViewLocations(areaName, controllerName, viewName),
                descriptor.Templates,
                searchedLocations))
            {
                return null;
            }

            if (!string.IsNullOrEmpty(masterName))
            {
                if (!LocatePotentialTemplate(
                    PotentialMasterLocations(areaName, masterName),
                    descriptor.Templates,
                    searchedLocations))
                {
                    return null;
                }
            }
            else if (findDefaultMaster)
            {
                LocatePotentialTemplate(
                    PotentialDefaultMasterLocations(areaName, controllerName),
                    descriptor.Templates,
                    null);
            }

            return descriptor;
        }