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 @@ -16,7 +16,8 @@ namespace ICSharpCode.TextTemplating
var appDomainFactory = new TextTemplatingAppDomainFactory();
string applicationBase = GetAssemblyBaseLocation();
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;
}

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

@ -11,15 +11,18 @@ namespace ICSharpCode.TextTemplating @@ -11,15 +11,18 @@ namespace ICSharpCode.TextTemplating
ITextTemplatingAppDomainFactory appDomainFactory;
ITextTemplatingAppDomain templatingAppDomain;
ITextTemplatingAssemblyResolver assemblyResolver;
ITextTemplatingVariables templatingVariables;
string applicationBase;
public TextTemplatingHost(
ITextTemplatingAppDomainFactory appDomainFactory,
ITextTemplatingAssemblyResolver assemblyResolver,
ITextTemplatingVariables templatingVariables,
string applicationBase)
{
this.appDomainFactory = appDomainFactory;
this.assemblyResolver = assemblyResolver;
this.templatingVariables = templatingVariables;
this.applicationBase = applicationBase;
}
@ -48,5 +51,16 @@ namespace ICSharpCode.TextTemplating @@ -48,5 +51,16 @@ namespace ICSharpCode.TextTemplating
{
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 @@ -10,11 +10,13 @@ namespace TextTemplating.Tests.Helpers
{
public FakeTextTemplatingAppDomainFactory FakeTextTemplatingAppDomainFactory;
public FakeTextTemplatingAssemblyResolver FakeTextTemplatingAssemblyResolver;
public FakeTextTemplatingVariables FakeTextTemplatingVariables;
public TestableTextTemplatingHost(string applicationBase)
: this(
new FakeTextTemplatingAppDomainFactory(),
new FakeTextTemplatingAssemblyResolver(),
new FakeTextTemplatingVariables(),
applicationBase)
{
}
@ -22,16 +24,23 @@ namespace TextTemplating.Tests.Helpers @@ -22,16 +24,23 @@ namespace TextTemplating.Tests.Helpers
public TestableTextTemplatingHost(
FakeTextTemplatingAppDomainFactory appDomainFactory,
FakeTextTemplatingAssemblyResolver assemblyResolver,
FakeTextTemplatingVariables textTemplatingVariables,
string applicationBase)
: base(appDomainFactory, assemblyResolver, applicationBase)
: base(appDomainFactory, assemblyResolver, textTemplatingVariables, applicationBase)
{
FakeTextTemplatingAppDomainFactory = appDomainFactory;
FakeTextTemplatingAssemblyResolver = assemblyResolver;
FakeTextTemplatingVariables = textTemplatingVariables;
}
public string CallResolveAssemblyReference(string 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 @@ -13,9 +13,10 @@ namespace TextTemplating.Tests
public class TextTemplatingHostTests
{
TestableTextTemplatingHost host;
FakeTextTemplatingAppDomainFactory textTemplatingAppDomainFactory;
FakeTextTemplatingAppDomain textTemplatingAppDomain;
FakeTextTemplatingAssemblyResolver assemblyResolver;
FakeTextTemplatingAppDomainFactory fakeTextTemplatingAppDomainFactory;
FakeTextTemplatingAppDomain fakeTextTemplatingAppDomain;
FakeTextTemplatingAssemblyResolver fakeAssemblyResolver;
FakeTextTemplatingVariables fakeTextTemplatingVariables;
void CreateHost()
{
@ -25,9 +26,15 @@ namespace TextTemplating.Tests @@ -25,9 +26,15 @@ namespace TextTemplating.Tests
void CreateHost(string applicationBase)
{
host = new TestableTextTemplatingHost(applicationBase);
textTemplatingAppDomainFactory = host.FakeTextTemplatingAppDomainFactory;
textTemplatingAppDomain = textTemplatingAppDomainFactory.FakeTextTemplatingAppDomain;
assemblyResolver = host.FakeTextTemplatingAssemblyResolver;
fakeTextTemplatingAppDomainFactory = host.FakeTextTemplatingAppDomainFactory;
fakeTextTemplatingAppDomain = fakeTextTemplatingAppDomainFactory.FakeTextTemplatingAppDomain;
fakeAssemblyResolver = host.FakeTextTemplatingAssemblyResolver;
fakeTextTemplatingVariables = host.FakeTextTemplatingVariables;
}
void AddTemplateVariableValue(string variableName, string variableValue)
{
fakeTextTemplatingVariables.AddVariable(variableName, variableValue);
}
[Test]
@ -35,7 +42,7 @@ namespace TextTemplating.Tests @@ -35,7 +42,7 @@ namespace TextTemplating.Tests
{
CreateHost();
AppDomain expectedAppDomain = AppDomain.CreateDomain("TextTemplatingHostTests");
textTemplatingAppDomain.AppDomain = expectedAppDomain;
fakeTextTemplatingAppDomain.AppDomain = expectedAppDomain;
AppDomain actualAppDomain = host.ProvideTemplatingAppDomain("test");
@ -49,7 +56,7 @@ namespace TextTemplating.Tests @@ -49,7 +56,7 @@ namespace TextTemplating.Tests
host.ProvideTemplatingAppDomain("test");
host.Dispose();
Assert.IsTrue(textTemplatingAppDomain.IsDisposeCalled);
Assert.IsTrue(fakeTextTemplatingAppDomain.IsDisposeCalled);
}
[Test]
@ -66,7 +73,7 @@ namespace TextTemplating.Tests @@ -66,7 +73,7 @@ namespace TextTemplating.Tests
host.ProvideTemplatingAppDomain("test");
host.ProvideTemplatingAppDomain("test");
Assert.AreEqual(1, textTemplatingAppDomainFactory.CreateTextTemplatingAppDomainCallCount);
Assert.AreEqual(1, fakeTextTemplatingAppDomainFactory.CreateTextTemplatingAppDomainCallCount);
}
[Test]
@ -76,10 +83,10 @@ namespace TextTemplating.Tests @@ -76,10 +83,10 @@ namespace TextTemplating.Tests
host.ProvideTemplatingAppDomain("test");
host.Dispose();
textTemplatingAppDomain.IsDisposeCalled = false;
fakeTextTemplatingAppDomain.IsDisposeCalled = false;
host.Dispose();
Assert.IsFalse(textTemplatingAppDomain.IsDisposeCalled);
Assert.IsFalse(fakeTextTemplatingAppDomain.IsDisposeCalled);
}
[Test]
@ -89,7 +96,7 @@ namespace TextTemplating.Tests @@ -89,7 +96,7 @@ namespace TextTemplating.Tests
CreateHost(applicationBase);
host.ProvideTemplatingAppDomain("test");
string actualApplicationBase = textTemplatingAppDomainFactory.ApplicationBasePassedToCreateTextTemplatingAppDomain;
string actualApplicationBase = fakeTextTemplatingAppDomainFactory.ApplicationBasePassedToCreateTextTemplatingAppDomain;
Assert.AreEqual(applicationBase, actualApplicationBase);
}
@ -99,17 +106,27 @@ namespace TextTemplating.Tests @@ -99,17 +106,27 @@ namespace TextTemplating.Tests
CreateHost();
host.CallResolveAssemblyReference("MyReference");
Assert.AreEqual("MyReference", assemblyResolver.AssembyReferencePassedToResolve);
Assert.AreEqual("MyReference", fakeAssemblyResolver.AssembyReferencePassedToResolve);
}
[Test]
public void ResolveAssemblyReference_PassedMyAssemblyReference_ReturnsFileNameReturnedFromAssemblyResolverResolveMethod()
{
CreateHost();
assemblyResolver.ResolveReturnValue = @"d:\projects\references\MyReference.dll";
fakeAssemblyResolver.ResolveReturnValue = @"d:\projects\references\MyReference.dll";
string result = host.CallResolveAssemblyReference("MyReference");
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