Skip to content

Commit cbc9af1

Browse files
committed
Merge pull request SparkViewEngine#47 from bobpace/fixSharingGraph
Wired up the IPartialReferenceProvider so it can be provided via the container like the other services that feed the spark engine can
2 parents 702eef3 + 0d89f09 commit cbc9af1

8 files changed

+84
-15
lines changed

src/Spark.Tests/BatchCompilationTester.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
// limitations under the License.
1414
//
1515
using System;
16+
using System.Collections.Generic;
1617
using System.Linq;
1718
using System.Reflection;
1819
using System.Reflection.Emit;
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
using NUnit.Framework;
2+
using Rhino.Mocks;
3+
4+
namespace Spark.Tests
5+
{
6+
[TestFixture]
7+
public class PartialProviderTester
8+
{
9+
private SparkViewEngine _engine;
10+
private IPartialProvider _partialProvider;
11+
private string _viewPath;
12+
private string[] _result;
13+
14+
[SetUp]
15+
public void Init()
16+
{
17+
_viewPath = "fake/path";
18+
_partialProvider = MockRepository.GenerateMock<IPartialProvider>();
19+
_engine = new SparkViewEngine(new SparkSettings())
20+
{
21+
PartialProvider = _partialProvider
22+
};
23+
_result = new[] {"output"};
24+
}
25+
26+
[Test]
27+
public void DefaultPartialReferenceProviderWrapsPartialProvider()
28+
{
29+
_partialProvider.Expect(x => x.GetPaths(_viewPath)).Return(_result);
30+
var output = _engine.PartialReferenceProvider.GetPaths(_viewPath, true);
31+
_partialProvider.VerifyAllExpectations();
32+
Assert.AreEqual(_result, output);
33+
}
34+
35+
[Test]
36+
public void SettingNewPartialProviderPropogatesToDefaultPartialProvider()
37+
{
38+
var differentPartialProvider = MockRepository.GenerateMock<IPartialProvider>();
39+
_engine.PartialProvider = differentPartialProvider;
40+
41+
//should not call the original
42+
_partialProvider.Expect(x => x.GetPaths(_viewPath)).Repeat.Never();
43+
44+
//should call the newly provided instance
45+
differentPartialProvider.Expect(x => x.GetPaths(_viewPath)).Return(_result);
46+
47+
var output = _engine.PartialReferenceProvider.GetPaths(_viewPath, true);
48+
_partialProvider.VerifyAllExpectations();
49+
differentPartialProvider.VerifyAllExpectations();
50+
Assert.AreEqual(_result, output);
51+
}
52+
}
53+
}

src/Spark.Tests/Spark.Tests.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,7 @@
106106
<Compile Include="Parser\CharGrammarTester.cs" />
107107
<Compile Include="Parser\JavascriptAnonymousTypeGrammarTester.cs" />
108108
<Compile Include="Parser\OffsetGrammarTester.cs" />
109+
<Compile Include="PartialProviderTester.cs" />
109110
<Compile Include="Precompiled\ComplexPrecompileController.cs" />
110111
<Compile Include="Precompiled\SimplePrecompileController.cs" />
111112
<Compile Include="Compiler\SourceMappingTester.cs" />

src/Spark.Tests/SparkServiceContainerTester.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,9 @@ public void ContainerCreatesDefaultServices()
4343

4444
var partialProvider = container.GetService<IPartialProvider>();
4545
Assert.IsInstanceOf(typeof(DefaultPartialProvider), partialProvider);
46+
47+
var partialReferenceProvider = container.GetService<IPartialReferenceProvider>();
48+
Assert.IsInstanceOf(typeof(DefaultPartialReferenceProvider), partialReferenceProvider);
4649
}
4750

4851
[Test]
Lines changed: 20 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,26 @@
1-
using System;
2-
using System.Collections.Generic;
3-
using System.IO;
4-
1+
using System;
2+
using System.Collections.Generic;
3+
54
namespace Spark
65
{
76
public class DefaultPartialReferenceProvider : IPartialReferenceProvider
8-
{
9-
private IPartialProvider _proxy;
10-
public DefaultPartialReferenceProvider()
11-
{
12-
_proxy = new DefaultPartialProvider();
13-
}
14-
public IEnumerable<string> GetPaths(string viewPath, bool allowCustomReferencePath)
15-
{
16-
return _proxy.GetPaths(viewPath);
7+
{
8+
private readonly Func<IPartialProvider> _getProvider = () => null;
9+
10+
public DefaultPartialReferenceProvider(IPartialProvider partialProvider)
11+
: this(() => partialProvider)
12+
{
13+
}
14+
15+
public DefaultPartialReferenceProvider(Func<IPartialProvider> getProvider)
16+
{
17+
_getProvider = getProvider;
18+
}
19+
20+
public IEnumerable<string> GetPaths(string viewPath, bool allowCustomReferencePath)
21+
{
22+
var provider = _getProvider() ?? new DefaultPartialProvider();
23+
return provider.GetPaths(viewPath);
1724
}
1825
}
1926
}

src/Spark/Parser/ViewLoader.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,13 +68,14 @@ public IPartialProvider PartialProvider
6868
}
6969
set { partialProvider = value; }
7070
}
71+
7172
public IPartialReferenceProvider PartialReferenceProvider
7273
{
7374
get
7475
{
7576
if (partialReferenceProvider == null)
7677
{
77-
partialReferenceProvider = new DefaultPartialReferenceProvider();
78+
partialReferenceProvider = new DefaultPartialReferenceProvider(() => PartialProvider);
7879
};
7980
return partialReferenceProvider;
8081
}

src/Spark/SparkServiceContainer.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ public SparkServiceContainer(ISparkSettings settings)
5454
{typeof (IViewFolder), CreateDefaultViewFolder},
5555
{typeof (ICompiledViewHolder), c => new CompiledViewHolder()},
5656
{typeof (IPartialProvider), c => new DefaultPartialProvider()},
57+
{typeof (IPartialReferenceProvider), c => new DefaultPartialReferenceProvider(c.GetService<IPartialProvider>())},
5758
};
5859

5960

src/Spark/SparkViewEngine.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ public void Initialize(ISparkServiceContainer container)
5454
TemplateLocator = container.GetService<ITemplateLocator>();
5555
CompiledViewHolder = container.GetService<ICompiledViewHolder>();
5656
PartialProvider = container.GetService<IPartialProvider>();
57+
PartialReferenceProvider = container.GetService<IPartialReferenceProvider>();
5758
SetViewFolder(container.GetService<IViewFolder>());
5859
}
5960

@@ -105,13 +106,14 @@ public IPartialProvider PartialProvider
105106
}
106107
set { _partialProvider = value; }
107108
}
109+
108110
private IPartialReferenceProvider _partialReferenceProvider;
109111
public IPartialReferenceProvider PartialReferenceProvider
110112
{
111113
get
112114
{
113115
if (_partialReferenceProvider == null)
114-
_partialReferenceProvider = new DefaultPartialReferenceProvider();
116+
_partialReferenceProvider = new DefaultPartialReferenceProvider(() => PartialProvider);
115117
return _partialReferenceProvider;
116118
}
117119
set { _partialReferenceProvider = value; }

0 commit comments

Comments
 (0)