Browse Source

Expand variables such as SolutionDir, ProjectDir in T4 include directives.

pull/23/head
Matt Ward 15 years ago
parent
commit
a22a110740
  1. 3
      src/AddIns/Misc/TextTemplating/Project/Src/TextTemplatingCustomTool.cs
  2. 14
      src/AddIns/Misc/TextTemplating/Project/Src/TextTemplatingHost.cs
  3. 11
      src/AddIns/Misc/TextTemplating/Test/Helpers/TestableTextTemplatingHost.cs
  4. 45
      src/AddIns/Misc/TextTemplating/Test/Src/TextTemplatingHostTests.cs

3
src/AddIns/Misc/TextTemplating/Project/Src/TextTemplatingCustomTool.cs

@ -16,7 +16,8 @@ namespace ICSharpCode.TextTemplating
var appDomainFactory = new TextTemplatingAppDomainFactory(); var appDomainFactory = new TextTemplatingAppDomainFactory();
string applicationBase = GetAssemblyBaseLocation(); string applicationBase = GetAssemblyBaseLocation();
var assemblyResolver = new TextTemplatingAssemblyResolver(project); var assemblyResolver = new TextTemplatingAssemblyResolver(project);
var host = new TextTemplatingHost(appDomainFactory, assemblyResolver, applicationBase); var textTemplatingVariables = new TextTemplatingVariables();
var host = new TextTemplatingHost(appDomainFactory, assemblyResolver, textTemplatingVariables, applicationBase);
return host; return host;
} }

14
src/AddIns/Misc/TextTemplating/Project/Src/TextTemplatingHost.cs

@ -11,15 +11,18 @@ namespace ICSharpCode.TextTemplating
ITextTemplatingAppDomainFactory appDomainFactory; ITextTemplatingAppDomainFactory appDomainFactory;
ITextTemplatingAppDomain templatingAppDomain; ITextTemplatingAppDomain templatingAppDomain;
ITextTemplatingAssemblyResolver assemblyResolver; ITextTemplatingAssemblyResolver assemblyResolver;
ITextTemplatingVariables templatingVariables;
string applicationBase; string applicationBase;
public TextTemplatingHost( public TextTemplatingHost(
ITextTemplatingAppDomainFactory appDomainFactory, ITextTemplatingAppDomainFactory appDomainFactory,
ITextTemplatingAssemblyResolver assemblyResolver, ITextTemplatingAssemblyResolver assemblyResolver,
ITextTemplatingVariables templatingVariables,
string applicationBase) string applicationBase)
{ {
this.appDomainFactory = appDomainFactory; this.appDomainFactory = appDomainFactory;
this.assemblyResolver = assemblyResolver; this.assemblyResolver = assemblyResolver;
this.templatingVariables = templatingVariables;
this.applicationBase = applicationBase; this.applicationBase = applicationBase;
} }
@ -48,5 +51,16 @@ namespace ICSharpCode.TextTemplating
{ {
return assemblyResolver.Resolve(assemblyReference); return assemblyResolver.Resolve(assemblyReference);
} }
protected override string ResolvePath(string path)
{
path = ExpandPath(path);
return base.ResolvePath(path);
}
string ExpandPath(string path)
{
return templatingVariables.Expand(path);
}
} }
} }

11
src/AddIns/Misc/TextTemplating/Test/Helpers/TestableTextTemplatingHost.cs

@ -10,11 +10,13 @@ namespace TextTemplating.Tests.Helpers
{ {
public FakeTextTemplatingAppDomainFactory FakeTextTemplatingAppDomainFactory; public FakeTextTemplatingAppDomainFactory FakeTextTemplatingAppDomainFactory;
public FakeTextTemplatingAssemblyResolver FakeTextTemplatingAssemblyResolver; public FakeTextTemplatingAssemblyResolver FakeTextTemplatingAssemblyResolver;
public FakeTextTemplatingVariables FakeTextTemplatingVariables;
public TestableTextTemplatingHost(string applicationBase) public TestableTextTemplatingHost(string applicationBase)
: this( : this(
new FakeTextTemplatingAppDomainFactory(), new FakeTextTemplatingAppDomainFactory(),
new FakeTextTemplatingAssemblyResolver(), new FakeTextTemplatingAssemblyResolver(),
new FakeTextTemplatingVariables(),
applicationBase) applicationBase)
{ {
} }
@ -22,16 +24,23 @@ namespace TextTemplating.Tests.Helpers
public TestableTextTemplatingHost( public TestableTextTemplatingHost(
FakeTextTemplatingAppDomainFactory appDomainFactory, FakeTextTemplatingAppDomainFactory appDomainFactory,
FakeTextTemplatingAssemblyResolver assemblyResolver, FakeTextTemplatingAssemblyResolver assemblyResolver,
FakeTextTemplatingVariables textTemplatingVariables,
string applicationBase) string applicationBase)
: base(appDomainFactory, assemblyResolver, applicationBase) : base(appDomainFactory, assemblyResolver, textTemplatingVariables, applicationBase)
{ {
FakeTextTemplatingAppDomainFactory = appDomainFactory; FakeTextTemplatingAppDomainFactory = appDomainFactory;
FakeTextTemplatingAssemblyResolver = assemblyResolver; FakeTextTemplatingAssemblyResolver = assemblyResolver;
FakeTextTemplatingVariables = textTemplatingVariables;
} }
public string CallResolveAssemblyReference(string assemblyReference) public string CallResolveAssemblyReference(string assemblyReference)
{ {
return base.ResolveAssemblyReference(assemblyReference); return base.ResolveAssemblyReference(assemblyReference);
} }
public string CallResolvePath(string path)
{
return base.ResolvePath(path);
}
} }
} }

45
src/AddIns/Misc/TextTemplating/Test/Src/TextTemplatingHostTests.cs

@ -13,9 +13,10 @@ namespace TextTemplating.Tests
public class TextTemplatingHostTests public class TextTemplatingHostTests
{ {
TestableTextTemplatingHost host; TestableTextTemplatingHost host;
FakeTextTemplatingAppDomainFactory textTemplatingAppDomainFactory; FakeTextTemplatingAppDomainFactory fakeTextTemplatingAppDomainFactory;
FakeTextTemplatingAppDomain textTemplatingAppDomain; FakeTextTemplatingAppDomain fakeTextTemplatingAppDomain;
FakeTextTemplatingAssemblyResolver assemblyResolver; FakeTextTemplatingAssemblyResolver fakeAssemblyResolver;
FakeTextTemplatingVariables fakeTextTemplatingVariables;
void CreateHost() void CreateHost()
{ {
@ -25,9 +26,15 @@ namespace TextTemplating.Tests
void CreateHost(string applicationBase) void CreateHost(string applicationBase)
{ {
host = new TestableTextTemplatingHost(applicationBase); host = new TestableTextTemplatingHost(applicationBase);
textTemplatingAppDomainFactory = host.FakeTextTemplatingAppDomainFactory; fakeTextTemplatingAppDomainFactory = host.FakeTextTemplatingAppDomainFactory;
textTemplatingAppDomain = textTemplatingAppDomainFactory.FakeTextTemplatingAppDomain; fakeTextTemplatingAppDomain = fakeTextTemplatingAppDomainFactory.FakeTextTemplatingAppDomain;
assemblyResolver = host.FakeTextTemplatingAssemblyResolver; fakeAssemblyResolver = host.FakeTextTemplatingAssemblyResolver;
fakeTextTemplatingVariables = host.FakeTextTemplatingVariables;
}
void AddTemplateVariableValue(string variableName, string variableValue)
{
fakeTextTemplatingVariables.AddVariable(variableName, variableValue);
} }
[Test] [Test]
@ -35,7 +42,7 @@ namespace TextTemplating.Tests
{ {
CreateHost(); CreateHost();
AppDomain expectedAppDomain = AppDomain.CreateDomain("TextTemplatingHostTests"); AppDomain expectedAppDomain = AppDomain.CreateDomain("TextTemplatingHostTests");
textTemplatingAppDomain.AppDomain = expectedAppDomain; fakeTextTemplatingAppDomain.AppDomain = expectedAppDomain;
AppDomain actualAppDomain = host.ProvideTemplatingAppDomain("test"); AppDomain actualAppDomain = host.ProvideTemplatingAppDomain("test");
@ -49,7 +56,7 @@ namespace TextTemplating.Tests
host.ProvideTemplatingAppDomain("test"); host.ProvideTemplatingAppDomain("test");
host.Dispose(); host.Dispose();
Assert.IsTrue(textTemplatingAppDomain.IsDisposeCalled); Assert.IsTrue(fakeTextTemplatingAppDomain.IsDisposeCalled);
} }
[Test] [Test]
@ -66,7 +73,7 @@ namespace TextTemplating.Tests
host.ProvideTemplatingAppDomain("test"); host.ProvideTemplatingAppDomain("test");
host.ProvideTemplatingAppDomain("test"); host.ProvideTemplatingAppDomain("test");
Assert.AreEqual(1, textTemplatingAppDomainFactory.CreateTextTemplatingAppDomainCallCount); Assert.AreEqual(1, fakeTextTemplatingAppDomainFactory.CreateTextTemplatingAppDomainCallCount);
} }
[Test] [Test]
@ -76,10 +83,10 @@ namespace TextTemplating.Tests
host.ProvideTemplatingAppDomain("test"); host.ProvideTemplatingAppDomain("test");
host.Dispose(); host.Dispose();
textTemplatingAppDomain.IsDisposeCalled = false; fakeTextTemplatingAppDomain.IsDisposeCalled = false;
host.Dispose(); host.Dispose();
Assert.IsFalse(textTemplatingAppDomain.IsDisposeCalled); Assert.IsFalse(fakeTextTemplatingAppDomain.IsDisposeCalled);
} }
[Test] [Test]
@ -89,7 +96,7 @@ namespace TextTemplating.Tests
CreateHost(applicationBase); CreateHost(applicationBase);
host.ProvideTemplatingAppDomain("test"); host.ProvideTemplatingAppDomain("test");
string actualApplicationBase = textTemplatingAppDomainFactory.ApplicationBasePassedToCreateTextTemplatingAppDomain; string actualApplicationBase = fakeTextTemplatingAppDomainFactory.ApplicationBasePassedToCreateTextTemplatingAppDomain;
Assert.AreEqual(applicationBase, actualApplicationBase); Assert.AreEqual(applicationBase, actualApplicationBase);
} }
@ -99,17 +106,27 @@ namespace TextTemplating.Tests
CreateHost(); CreateHost();
host.CallResolveAssemblyReference("MyReference"); host.CallResolveAssemblyReference("MyReference");
Assert.AreEqual("MyReference", assemblyResolver.AssembyReferencePassedToResolve); Assert.AreEqual("MyReference", fakeAssemblyResolver.AssembyReferencePassedToResolve);
} }
[Test] [Test]
public void ResolveAssemblyReference_PassedMyAssemblyReference_ReturnsFileNameReturnedFromAssemblyResolverResolveMethod() public void ResolveAssemblyReference_PassedMyAssemblyReference_ReturnsFileNameReturnedFromAssemblyResolverResolveMethod()
{ {
CreateHost(); CreateHost();
assemblyResolver.ResolveReturnValue = @"d:\projects\references\MyReference.dll"; fakeAssemblyResolver.ResolveReturnValue = @"d:\projects\references\MyReference.dll";
string result = host.CallResolveAssemblyReference("MyReference"); string result = host.CallResolveAssemblyReference("MyReference");
Assert.AreEqual(@"d:\projects\references\MyReference.dll", result); Assert.AreEqual(@"d:\projects\references\MyReference.dll", result);
} }
[Test]
public void ResolvePath_PathContainsSolutionDirProperty_SolutionDirExpanded()
{
CreateHost();
AddTemplateVariableValue("$(SolutionDir)", @"d:\projects\MySolution\");
string path = host.CallResolvePath("$(SolutionDir)");
Assert.AreEqual(@"d:\projects\MySolution\", path);
}
} }
} }

Loading…
Cancel
Save