Skip to content

Commit

Permalink
Extracting the ViewDescriptorBuilder functionality into it's own serv…
Browse files Browse the repository at this point in the history
…ice class

Seperates that concern, offers a new extensibility point for controlling view location, and helper prepare for some FindView optimization

git-svn-id: http://dev.dejardin.org/svn/spark/branches/spike-1.1@315 0f556331-6e29-4ecb-911f-9ab3f335dbaa

Conflicts:

	src/Spark.Web.Mvc/JavascriptViewResult.cs
	src/Spark/CompiledViewEntry.cs
	src/Spark/CompositeViewEntry.cs
	src/Spark/SparkViewEngine.cs
  • Loading branch information
loudej committed Apr 2, 2009
1 parent 5488c03 commit 8fb0789
Show file tree
Hide file tree
Showing 21 changed files with 494 additions and 325 deletions.
Expand Up @@ -156,7 +156,7 @@ public void Rescue404Rendering()
Assert.AreEqual("<p>404 message rendered</p>\r\n", output.ToString());
}

[Test]
[Test, Ignore("Controller Type effects are no longer supported in 1.1")]
public void ControllerHelperAttributeCanBeUsed()
{
controller = new Helpers.HomeController();
Expand Down
8 changes: 4 additions & 4 deletions src/Spark.Tests/BatchCompilationTester.cs
Expand Up @@ -86,8 +86,8 @@ public void DescriptorsAreEqual()
var attribs = types[0].GetCustomAttributes(typeof(SparkViewAttribute), false);
var sparkViewAttrib = (SparkViewAttribute)attribs[0];

var key0 = new CompiledViewHolder.Key { Descriptor = descriptor };
var key1 = new CompiledViewHolder.Key { Descriptor = sparkViewAttrib.BuildDescriptor() };
var key0 = descriptor;
var key1 = sparkViewAttrib.BuildDescriptor();

Assert.AreEqual(key0, key1);
}
Expand All @@ -105,8 +105,8 @@ public void DescriptorsWithNoTargetNamespace()
var attribs = types[0].GetCustomAttributes(typeof(SparkViewAttribute), false);
var sparkViewAttrib = (SparkViewAttribute)attribs[0];

var key0 = new CompiledViewHolder.Key { Descriptor = descriptor };
var key1 = new CompiledViewHolder.Key { Descriptor = sparkViewAttrib.BuildDescriptor() };
var key0 = descriptor;
var key1 = sparkViewAttrib.BuildDescriptor();

Assert.AreEqual(key0, key1);
}
Expand Down
17 changes: 7 additions & 10 deletions src/Spark.Tests/CompiledViewHolderTester.cs
Expand Up @@ -30,15 +30,12 @@ public void Init()
holder = new CompiledViewHolder();
}

private CompiledViewHolder.Key BuildKey(params string[] templates)
private SparkViewDescriptor BuildKey(params string[] templates)
{
return new CompiledViewHolder.Key
{
Descriptor = new SparkViewDescriptor
{
Templates = templates
}
};
return new SparkViewDescriptor
{
Templates = templates
};
}

[Test]
Expand All @@ -53,7 +50,7 @@ public void LookupNonExistantReturnsNull()
public void LookupReturnsStoredInstance()
{
var key = BuildKey("c\\v", "shared\\m");
var entry = new CompiledViewHolder.Entry { Key = key, Loader = new ViewLoader() };
var entry = new CompiledViewEntry { Descriptor = key, Loader = new ViewLoader() };
Assert.IsNull(holder.Lookup(key));
holder.Store(entry);
Assert.AreSame(entry, holder.Lookup(key));
Expand Down Expand Up @@ -91,7 +88,7 @@ public void ExpiredEntryReturnsNull()
loader.Stub(x => x.IsCurrent()).Do(foo);

var key = BuildKey("c\\v", "shared\\m");
var entry = new CompiledViewHolder.Entry { Key = key, Loader = loader };
var entry = new CompiledViewEntry { Descriptor = key, Loader = loader };
holder.Store(entry);
Assert.AreSame(entry, holder.Lookup(key));
isCurrent = false;
Expand Down
4 changes: 2 additions & 2 deletions src/Spark.Tests/SparkExtensionTester.cs
Expand Up @@ -41,8 +41,8 @@ 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"));
var entry = engine.CreateEntry(descriptor);
Assert.That(entry.SourceCode.Contains("//this was a test"));
}
}

Expand Down
13 changes: 4 additions & 9 deletions src/Spark.Web.Mvc.Pdf.Tests/PdfViewResultTests.cs
@@ -1,9 +1,5 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing;
using NUnit.Framework;
Expand Down Expand Up @@ -33,8 +29,7 @@ public void PdfResultShouldFindPartialViewAndRenderIt()
var controllerContext = GetControllerContext(stream);

IView view;
var viewEngine = MockViewEngine(controllerContext, out view);

var viewEngine = MockViewEngine(controllerContext, out view);

var result = new PdfViewResult
{
Expand All @@ -48,13 +43,13 @@ public void PdfResultShouldFindPartialViewAndRenderIt()
view.VerifyAllExpectations();
}

private IViewEngine MockViewEngine(ControllerContext controllerContext, out IView view)
private static IViewEngine MockViewEngine(ControllerContext controllerContext, out IView view)
{
var viewEngine = MockRepository.GenerateMock<IViewEngine>();
view = MockRepository.GenerateMock<IView>();

viewEngine
.Expect(x => x.FindPartialView(controllerContext, "quux", true))
.Expect(x => x.FindView(controllerContext, "quux", "", true))
.Return(new ViewEngineResult(view, viewEngine));

view
Expand Down
3 changes: 3 additions & 0 deletions src/Spark.Web.Mvc.Pdf/PdfViewResult.cs
Expand Up @@ -17,6 +17,9 @@ public class PdfViewResult : ViewResult
protected override ViewEngineResult FindView(ControllerContext context)
{
var result = base.FindView(context);
if (result.View == null)
return result;

var pdfView = new PdfView(result);
return new ViewEngineResult(pdfView, pdfView);
}
Expand Down
61 changes: 61 additions & 0 deletions src/Spark.Web.Mvc.Tests/DescriptorBuildingTester.cs
Expand Up @@ -36,6 +36,8 @@ public class DescriptorBuildingTester
[SetUp]
public void Init()
{
CompiledViewHolder.Current = null;

_factory = new SparkViewFactory();
_viewFolder = new InMemoryViewFolder();
_factory.ViewFolder = _viewFolder;
Expand Down Expand Up @@ -225,5 +227,64 @@ public void PartialViewFromAreaIgnoresLayout()
result, searchedLocations,
@"Admin\Home\Index.spark");
}

[Test]
public void UseMasterCreatesTemplateChain()
{
_routeData.Values.Add("controller", "Home");
_viewFolder.Add(@"Home\Index.spark", "<use master='Green'/>");
_viewFolder.Add(@"Layouts\Red.spark", "<use master='Blue'/>");
_viewFolder.Add(@"Layouts\Green.spark", "<use master='Red'/>");
_viewFolder.Add(@"Layouts\Blue.spark", "");
_viewFolder.Add(@"Layouts\Application.spark", "");
_viewFolder.Add(@"Layouts\Home.spark", "");

var searchedLocations = new List<string>();
var result = _factory.CreateDescriptor(_controllerContext, "Index", null, true, searchedLocations);
AssertDescriptorTemplates(
result, searchedLocations,
@"Home\Index.spark",
@"Layouts\Green.spark",
@"Layouts\Red.spark",
@"Layouts\Blue.spark");
}

[Test]
public void NamedMasterOverridesViewMaster()
{
_routeData.Values.Add("controller", "Home");
_viewFolder.Add(@"Home\Index.spark", "<use master='Green'/>");
_viewFolder.Add(@"Layouts\Red.spark", "<use master='Blue'/>");
_viewFolder.Add(@"Layouts\Green.spark", "<use master='Red'/>");
_viewFolder.Add(@"Layouts\Blue.spark", "");
_viewFolder.Add(@"Layouts\Application.spark", "");
_viewFolder.Add(@"Layouts\Home.spark", "");

var searchedLocations = new List<string>();
var result = _factory.CreateDescriptor(_controllerContext, "Index", "Red", true, searchedLocations);
AssertDescriptorTemplates(
result, searchedLocations,
@"Home\Index.spark",
@"Layouts\Red.spark",
@"Layouts\Blue.spark");
}

[Test]
public void PartialViewIgnoresUseMasterAndDefault()
{
_routeData.Values.Add("controller", "Home");
_viewFolder.Add(@"Home\Index.spark", "<use master='Green'/>");
_viewFolder.Add(@"Layouts\Red.spark", "<use master='Blue'/>");
_viewFolder.Add(@"Layouts\Green.spark", "<use master='Red'/>");
_viewFolder.Add(@"Layouts\Blue.spark", "");
_viewFolder.Add(@"Layouts\Application.spark", "");
_viewFolder.Add(@"Layouts\Home.spark", "");

var searchedLocations = new List<string>();
var result = _factory.CreateDescriptor(_controllerContext, "Index", null, false, searchedLocations);
AssertDescriptorTemplates(
result, searchedLocations,
@"Home\Index.spark");
}
}
}
51 changes: 19 additions & 32 deletions src/Spark.Web.Mvc.Tests/SparkViewFactoryTester.cs
Expand Up @@ -239,14 +239,11 @@ public void HtmlHelperWorksOnItsOwn()
[Test]
public void MasterApplicationIfPresent()
{
var viewFolder = MockRepository.GenerateMock<IViewFolder>();
viewFolder.Expect(x => x.HasView("Foo\\Baaz.spark")).Return(true);
viewFolder.Expect(x => x.HasView("Layouts\\Foo.spark")).Return(false);
viewFolder.Expect(x => x.HasView("Shared\\Foo.spark")).Return(false);
viewFolder.Expect(x => x.HasView("Layouts\\Application.spark")).Return(false);
viewFolder.Expect(x => x.HasView("Shared\\Application.spark")).Return(true);

factory.ViewFolder = viewFolder;
factory.ViewFolder = new InMemoryViewFolder
{
{"Foo\\Baaz.spark", ""},
{"Shared\\Application.spark", ""}
};



Expand All @@ -266,25 +263,17 @@ public void MasterApplicationIfPresent()
[Test]
public void MasterEmptyByDefault()
{
var viewSourceLoader = MockRepository.GenerateMock<IViewFolder>();
viewSourceLoader.Expect(x => x.HasView("Foo\\Baaz.spark")).Return(true);
viewSourceLoader.Expect(x => x.HasView("Layouts\\Foo.spark")).Return(false);
viewSourceLoader.Expect(x => x.HasView("Shared\\Foo.spark")).Return(false);
viewSourceLoader.Expect(x => x.HasView("Layouts\\Application.spark")).Return(false);
viewSourceLoader.Expect(x => x.HasView("Shared\\Application.spark")).Return(false);

factory.ViewFolder = viewSourceLoader;



factory.ViewFolder = new InMemoryViewFolder
{
{"Foo\\Baaz.spark", ""}
};

routeData.Values["controller"] = "Foo";
routeData.Values["action"] = "NotBaaz";


var descriptor = factory.CreateDescriptor(controllerContext, "Baaz", null, true, null);

//mocks.VerifyAll();

Assert.AreEqual(1, descriptor.Templates.Count);
Assert.AreEqual("Foo\\Baaz.spark", descriptor.Templates[0]);
Expand All @@ -293,12 +282,11 @@ public void MasterEmptyByDefault()
[Test]
public void MasterForControllerIfPresent()
{
var viewSourceLoader = MockRepository.GenerateMock<IViewFolder>();
viewSourceLoader.Expect(x => x.HasView("Foo\\Baaz.spark")).Return(true);
viewSourceLoader.Expect(x => x.HasView("Layouts\\Foo.spark")).Return(false);
viewSourceLoader.Expect(x => x.HasView("Shared\\Foo.spark")).Return(true);

factory.ViewFolder = viewSourceLoader;
factory.ViewFolder = new InMemoryViewFolder
{
{"Foo\\Baaz.spark", ""},
{"Shared\\Foo.spark",""}
};



Expand All @@ -308,8 +296,6 @@ public void MasterForControllerIfPresent()

var descriptor = factory.CreateDescriptor(controllerContext, "Baaz", null, true, null);

//mocks.VerifyAll();

Assert.AreEqual(2, descriptor.Templates.Count);
Assert.AreEqual("Foo\\Baaz.spark", descriptor.Templates[0]);
Assert.AreEqual("Shared\\Foo.spark", descriptor.Templates[1]);
Expand Down Expand Up @@ -370,10 +356,11 @@ public void RenderPlainView()
[Test]
public void TargetNamespaceFromController()
{
var viewSourceLoader = MockRepository.GenerateMock<IViewFolder>();
viewSourceLoader.Expect(x => x.HasView("Home\\Baaz.spark")).Return(true);
viewSourceLoader.Expect(x => x.HasView("Layouts\\Home.spark")).Return(true);
factory.ViewFolder = viewSourceLoader;
factory.ViewFolder = new InMemoryViewFolder
{
{"Home\\Baaz.spark", ""},
{"Layouts\\Home.spark",""}
};

controller = new StubController();
controllerContext = new ControllerContext(httpContext, routeData, controller);
Expand Down

0 comments on commit 8fb0789

Please sign in to comment.