Browse Source

T4 text templating host now implements IServiceProvider.

pull/23/head
Matt Ward 15 years ago
parent
commit
2658bc5edd
  1. 3
      src/AddIns/Misc/TextTemplating/Project/Src/TextTemplatingCustomTool.cs
  2. 10
      src/AddIns/Misc/TextTemplating/Project/Src/TextTemplatingHost.cs
  3. 15
      src/AddIns/Misc/TextTemplating/Project/Src/TextTemplatingServiceProvider.cs
  4. 1
      src/AddIns/Misc/TextTemplating/Project/TextTemplating.csproj
  5. 25
      src/AddIns/Misc/TextTemplating/Test/Helpers/FakeServiceProvider.cs
  6. 6
      src/AddIns/Misc/TextTemplating/Test/Helpers/TestableTextTemplatingHost.cs
  7. 17
      src/AddIns/Misc/TextTemplating/Test/Src/TextTemplatingHostTests.cs
  8. 30
      src/AddIns/Misc/TextTemplating/Test/Src/TextTemplatingServiceProviderTests.cs
  9. 2
      src/AddIns/Misc/TextTemplating/Test/TextTemplating.Tests.csproj

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

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

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

@ -6,23 +6,26 @@ using Mono.TextTemplating; @@ -6,23 +6,26 @@ using Mono.TextTemplating;
namespace ICSharpCode.TextTemplating
{
public class TextTemplatingHost : TemplateGenerator, ITextTemplatingHost
public class TextTemplatingHost : TemplateGenerator, ITextTemplatingHost, IServiceProvider
{
ITextTemplatingAppDomainFactory appDomainFactory;
ITextTemplatingAppDomain templatingAppDomain;
ITextTemplatingAssemblyResolver assemblyResolver;
ITextTemplatingVariables templatingVariables;
IServiceProvider serviceProvider;
string applicationBase;
public TextTemplatingHost(
ITextTemplatingAppDomainFactory appDomainFactory,
ITextTemplatingAssemblyResolver assemblyResolver,
ITextTemplatingVariables templatingVariables,
IServiceProvider serviceProvider,
string applicationBase)
{
this.appDomainFactory = appDomainFactory;
this.assemblyResolver = assemblyResolver;
this.templatingVariables = templatingVariables;
this.serviceProvider = serviceProvider;
this.applicationBase = applicationBase;
}
@ -62,5 +65,10 @@ namespace ICSharpCode.TextTemplating @@ -62,5 +65,10 @@ namespace ICSharpCode.TextTemplating
{
return templatingVariables.ExpandVariables(path);
}
object IServiceProvider.GetService(Type serviceType)
{
return serviceProvider.GetService(serviceType);
}
}
}

15
src/AddIns/Misc/TextTemplating/Project/Src/TextTemplatingServiceProvider.cs

@ -0,0 +1,15 @@ @@ -0,0 +1,15 @@
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
namespace ICSharpCode.TextTemplating
{
public class TextTemplatingServiceProvider : IServiceProvider
{
public object GetService(Type serviceType)
{
return serviceType.Assembly.CreateInstance(serviceType.FullName);
}
}
}

1
src/AddIns/Misc/TextTemplating/Project/TextTemplating.csproj

@ -83,6 +83,7 @@ @@ -83,6 +83,7 @@
<Compile Include="Src\TextTemplatingHost.cs" />
<Compile Include="Src\TextTemplatingPathResolver.cs" />
<Compile Include="Src\TextTemplatingReflectionProjectContent.cs" />
<Compile Include="Src\TextTemplatingServiceProvider.cs" />
<Compile Include="Src\TextTemplatingStringParser.cs" />
<Compile Include="Src\TextTemplatingVariableLocation.cs" />
<Compile Include="Src\TextTemplatingVariables.cs" />

25
src/AddIns/Misc/TextTemplating/Test/Helpers/FakeServiceProvider.cs

@ -0,0 +1,25 @@ @@ -0,0 +1,25 @@
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
using System.Collections.Generic;
namespace TextTemplating.Tests.Helpers
{
public class FakeServiceProvider : IServiceProvider
{
public Dictionary<Type, object> Services = new Dictionary<Type, object>();
public void AddService(Type serviceType, object service)
{
Services.Add(serviceType, service);
}
public object GetService(Type serviceType)
{
object service = null;
Services.TryGetValue(serviceType, out service);
return service;
}
}
}

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

@ -11,12 +11,14 @@ namespace TextTemplating.Tests.Helpers @@ -11,12 +11,14 @@ namespace TextTemplating.Tests.Helpers
public FakeTextTemplatingAppDomainFactory FakeTextTemplatingAppDomainFactory;
public FakeTextTemplatingAssemblyResolver FakeTextTemplatingAssemblyResolver;
public FakeTextTemplatingVariables FakeTextTemplatingVariables;
public FakeServiceProvider FakeServiceProvider;
public TestableTextTemplatingHost(string applicationBase)
: this(
new FakeTextTemplatingAppDomainFactory(),
new FakeTextTemplatingAssemblyResolver(),
new FakeTextTemplatingVariables(),
new FakeServiceProvider(),
applicationBase)
{
}
@ -25,12 +27,14 @@ namespace TextTemplating.Tests.Helpers @@ -25,12 +27,14 @@ namespace TextTemplating.Tests.Helpers
FakeTextTemplatingAppDomainFactory appDomainFactory,
FakeTextTemplatingAssemblyResolver assemblyResolver,
FakeTextTemplatingVariables textTemplatingVariables,
FakeServiceProvider fakeServiceProvider,
string applicationBase)
: base(appDomainFactory, assemblyResolver, textTemplatingVariables, applicationBase)
: base(appDomainFactory, assemblyResolver, textTemplatingVariables, fakeServiceProvider, applicationBase)
{
FakeTextTemplatingAppDomainFactory = appDomainFactory;
FakeTextTemplatingAssemblyResolver = assemblyResolver;
FakeTextTemplatingVariables = textTemplatingVariables;
FakeServiceProvider = fakeServiceProvider;
}
public string CallResolveAssemblyReference(string assemblyReference)

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

@ -17,6 +17,7 @@ namespace TextTemplating.Tests @@ -17,6 +17,7 @@ namespace TextTemplating.Tests
FakeTextTemplatingAppDomain fakeTextTemplatingAppDomain;
FakeTextTemplatingAssemblyResolver fakeAssemblyResolver;
FakeTextTemplatingVariables fakeTextTemplatingVariables;
FakeServiceProvider fakeServiceProvider;
void CreateHost()
{
@ -30,6 +31,7 @@ namespace TextTemplating.Tests @@ -30,6 +31,7 @@ namespace TextTemplating.Tests
fakeTextTemplatingAppDomain = fakeTextTemplatingAppDomainFactory.FakeTextTemplatingAppDomain;
fakeAssemblyResolver = host.FakeTextTemplatingAssemblyResolver;
fakeTextTemplatingVariables = host.FakeTextTemplatingVariables;
fakeServiceProvider = host.FakeServiceProvider;
}
void AddTemplateVariableValue(string variableName, string variableValue)
@ -127,6 +129,19 @@ namespace TextTemplating.Tests @@ -127,6 +129,19 @@ namespace TextTemplating.Tests
string path = host.CallResolvePath("$(SolutionDir)");
Assert.AreEqual(@"d:\projects\MySolution\", path);
}
}
[Test]
public void GetService_HostPassedFakeServiceProvider_ReturnsServiceFromFakeServiceProvider()
{
CreateHost();
var expectedService = new StringWriter();
fakeServiceProvider.AddService(typeof(StringWriter), expectedService);
var hostServiceProvider = host as IServiceProvider;
StringWriter service = hostServiceProvider.GetService(typeof(StringWriter)) as StringWriter;
Assert.AreEqual(expectedService, service);
}
}
}

30
src/AddIns/Misc/TextTemplating/Test/Src/TextTemplatingServiceProviderTests.cs

@ -0,0 +1,30 @@ @@ -0,0 +1,30 @@
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
using ICSharpCode.TextTemplating;
using NUnit.Framework;
using TextTemplating.Tests.Helpers;
namespace TextTemplating.Tests
{
[TestFixture]
public class TextTemplatingServiceProviderTests
{
TextTemplatingServiceProvider serviceProvider;
void CreateServiceProvider()
{
serviceProvider = new TextTemplatingServiceProvider();
}
[Test]
public void GetService_TypeOfFakeServiceProvider_ReturnsNewFakeServiceProvider()
{
CreateServiceProvider();
FakeServiceProvider service = serviceProvider.GetService(typeof(FakeServiceProvider)) as FakeServiceProvider;
Assert.IsNotNull(service);
}
}
}

2
src/AddIns/Misc/TextTemplating/Test/TextTemplating.Tests.csproj

@ -57,6 +57,7 @@ @@ -57,6 +57,7 @@
<Compile Include="Configuration\AssemblyInfo.cs" />
<Compile Include="Helpers\FakeAssemblyParserService.cs" />
<Compile Include="Helpers\FakeReflectionProjectContent.cs" />
<Compile Include="Helpers\FakeServiceProvider.cs" />
<Compile Include="Helpers\FakeTextTemplatingAppDomain.cs" />
<Compile Include="Helpers\FakeTextTemplatingAppDomainFactory.cs" />
<Compile Include="Helpers\FakeTextTemplatingAssemblyResolver.cs" />
@ -84,6 +85,7 @@ @@ -84,6 +85,7 @@
<Compile Include="Src\TextTemplatingPathResolverTests.cs" />
<Compile Include="Src\TextTemplatingPreprocessorTests.cs" />
<Compile Include="Src\TextTemplatingReflectionProjectContentTests.cs" />
<Compile Include="Src\TextTemplatingServiceProviderTests.cs" />
<Compile Include="Src\TextTemplatingVariableLocationTests.cs" />
<Compile Include="Src\TextTemplatingVariablesTests.cs" />
</ItemGroup>

Loading…
Cancel
Save