From 2658bc5edd523cf4f19bb3a0c0a25edbbcd06f29 Mon Sep 17 00:00:00 2001 From: Matt Ward Date: Thu, 29 Sep 2011 21:01:36 +0100 Subject: [PATCH] T4 text templating host now implements IServiceProvider. --- .../Project/Src/TextTemplatingCustomTool.cs | 3 +- .../Project/Src/TextTemplatingHost.cs | 10 ++++++- .../Src/TextTemplatingServiceProvider.cs | 15 ++++++++++ .../Project/TextTemplating.csproj | 1 + .../Test/Helpers/FakeServiceProvider.cs | 25 ++++++++++++++++ .../Helpers/TestableTextTemplatingHost.cs | 6 +++- .../Test/Src/TextTemplatingHostTests.cs | 17 ++++++++++- .../Src/TextTemplatingServiceProviderTests.cs | 30 +++++++++++++++++++ .../Test/TextTemplating.Tests.csproj | 2 ++ 9 files changed, 105 insertions(+), 4 deletions(-) create mode 100644 src/AddIns/Misc/TextTemplating/Project/Src/TextTemplatingServiceProvider.cs create mode 100644 src/AddIns/Misc/TextTemplating/Test/Helpers/FakeServiceProvider.cs create mode 100644 src/AddIns/Misc/TextTemplating/Test/Src/TextTemplatingServiceProviderTests.cs diff --git a/src/AddIns/Misc/TextTemplating/Project/Src/TextTemplatingCustomTool.cs b/src/AddIns/Misc/TextTemplating/Project/Src/TextTemplatingCustomTool.cs index aa8f14f239..9bb20b3825 100644 --- a/src/AddIns/Misc/TextTemplating/Project/Src/TextTemplatingCustomTool.cs +++ b/src/AddIns/Misc/TextTemplating/Project/Src/TextTemplatingCustomTool.cs @@ -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; } diff --git a/src/AddIns/Misc/TextTemplating/Project/Src/TextTemplatingHost.cs b/src/AddIns/Misc/TextTemplating/Project/Src/TextTemplatingHost.cs index f25e201911..71dbb59852 100644 --- a/src/AddIns/Misc/TextTemplating/Project/Src/TextTemplatingHost.cs +++ b/src/AddIns/Misc/TextTemplating/Project/Src/TextTemplatingHost.cs @@ -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 { return templatingVariables.ExpandVariables(path); } + + object IServiceProvider.GetService(Type serviceType) + { + return serviceProvider.GetService(serviceType); + } } } diff --git a/src/AddIns/Misc/TextTemplating/Project/Src/TextTemplatingServiceProvider.cs b/src/AddIns/Misc/TextTemplating/Project/Src/TextTemplatingServiceProvider.cs new file mode 100644 index 0000000000..11f4d0095c --- /dev/null +++ b/src/AddIns/Misc/TextTemplating/Project/Src/TextTemplatingServiceProvider.cs @@ -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); + } + } +} diff --git a/src/AddIns/Misc/TextTemplating/Project/TextTemplating.csproj b/src/AddIns/Misc/TextTemplating/Project/TextTemplating.csproj index 67fee77c77..02116dbbdf 100644 --- a/src/AddIns/Misc/TextTemplating/Project/TextTemplating.csproj +++ b/src/AddIns/Misc/TextTemplating/Project/TextTemplating.csproj @@ -83,6 +83,7 @@ + diff --git a/src/AddIns/Misc/TextTemplating/Test/Helpers/FakeServiceProvider.cs b/src/AddIns/Misc/TextTemplating/Test/Helpers/FakeServiceProvider.cs new file mode 100644 index 0000000000..86de1d9946 --- /dev/null +++ b/src/AddIns/Misc/TextTemplating/Test/Helpers/FakeServiceProvider.cs @@ -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 Services = new Dictionary(); + + 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; + } + } +} diff --git a/src/AddIns/Misc/TextTemplating/Test/Helpers/TestableTextTemplatingHost.cs b/src/AddIns/Misc/TextTemplating/Test/Helpers/TestableTextTemplatingHost.cs index e60b150b35..8e22d5d10a 100644 --- a/src/AddIns/Misc/TextTemplating/Test/Helpers/TestableTextTemplatingHost.cs +++ b/src/AddIns/Misc/TextTemplating/Test/Helpers/TestableTextTemplatingHost.cs @@ -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 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) diff --git a/src/AddIns/Misc/TextTemplating/Test/Src/TextTemplatingHostTests.cs b/src/AddIns/Misc/TextTemplating/Test/Src/TextTemplatingHostTests.cs index f67d1c4dc6..681ba9b1ed 100644 --- a/src/AddIns/Misc/TextTemplating/Test/Src/TextTemplatingHostTests.cs +++ b/src/AddIns/Misc/TextTemplating/Test/Src/TextTemplatingHostTests.cs @@ -17,6 +17,7 @@ namespace TextTemplating.Tests FakeTextTemplatingAppDomain fakeTextTemplatingAppDomain; FakeTextTemplatingAssemblyResolver fakeAssemblyResolver; FakeTextTemplatingVariables fakeTextTemplatingVariables; + FakeServiceProvider fakeServiceProvider; void CreateHost() { @@ -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 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); + } } } diff --git a/src/AddIns/Misc/TextTemplating/Test/Src/TextTemplatingServiceProviderTests.cs b/src/AddIns/Misc/TextTemplating/Test/Src/TextTemplatingServiceProviderTests.cs new file mode 100644 index 0000000000..d8393b457a --- /dev/null +++ b/src/AddIns/Misc/TextTemplating/Test/Src/TextTemplatingServiceProviderTests.cs @@ -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); + } + } +} diff --git a/src/AddIns/Misc/TextTemplating/Test/TextTemplating.Tests.csproj b/src/AddIns/Misc/TextTemplating/Test/TextTemplating.Tests.csproj index 6e665604eb..bddd0bf396 100644 --- a/src/AddIns/Misc/TextTemplating/Test/TextTemplating.Tests.csproj +++ b/src/AddIns/Misc/TextTemplating/Test/TextTemplating.Tests.csproj @@ -57,6 +57,7 @@ + @@ -84,6 +85,7 @@ +