Browse Source

Create MvcTextTemplateHost in the same app domain as the T4 templating engine.

pull/18/head
Matt Ward 15 years ago
parent
commit
8ff8258526
  1. 7
      src/AddIns/BackendBindings/AspNet.Mvc/Project/AspNet.Mvc.csproj
  2. 19
      src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/CurrentAppDomain.cs
  3. 17
      src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/CurrentAppDomainFactory.cs
  4. 18
      src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/IMvcTextTemplateHostAppDomain.cs
  5. 13
      src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/IMvcTextTemplateHostAppDomainFactory.cs
  6. 5
      src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/IMvcTextTemplateHostFactory.cs
  7. 10
      src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/MvcControllerFileGenerator.cs
  8. 22
      src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/MvcFileGenerator.cs
  9. 17
      src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/MvcTextTemplateAssemblyResolver.cs
  10. 39
      src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/MvcTextTemplateHostAppDomain.cs
  11. 24
      src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/MvcTextTemplateHostAppDomainFactory.cs
  12. 20
      src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/MvcTextTemplateHostFactory.cs
  13. 8
      src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/MvcViewFileGenerator.cs
  14. 3
      src/AddIns/BackendBindings/AspNet.Mvc/Test/AspNet.Mvc.Tests.csproj
  15. 30
      src/AddIns/BackendBindings/AspNet.Mvc/Test/Helpers/FakeMvcTextTemplateAppDomain.cs
  16. 18
      src/AddIns/BackendBindings/AspNet.Mvc/Test/Helpers/FakeMvcTextTemplateAppDomainFactory.cs
  17. 4
      src/AddIns/BackendBindings/AspNet.Mvc/Test/Helpers/FakeMvcTextTemplateHostFactory.cs
  18. 28
      src/AddIns/BackendBindings/AspNet.Mvc/Test/Src/MvcControllerFileGeneratorTests.cs
  19. 31
      src/AddIns/BackendBindings/AspNet.Mvc/Test/Src/MvcTextTemplateAssemblyResolverTests.cs
  20. 28
      src/AddIns/BackendBindings/AspNet.Mvc/Test/Src/MvcViewFileGeneratorTests.cs

7
src/AddIns/BackendBindings/AspNet.Mvc/Project/AspNet.Mvc.csproj

@ -61,6 +61,8 @@
<Compile Include="Src\AddMvcViewToProjectViewModel.cs" /> <Compile Include="Src\AddMvcViewToProjectViewModel.cs" />
<Compile Include="Src\BooleanToVisibilityConverter.cs" /> <Compile Include="Src\BooleanToVisibilityConverter.cs" />
<Compile Include="Src\CloseDialogBehaviour.cs" /> <Compile Include="Src\CloseDialogBehaviour.cs" />
<Compile Include="Src\CurrentAppDomain.cs" />
<Compile Include="Src\CurrentAppDomainFactory.cs" />
<Compile Include="Src\DelegateCommand.cs" /> <Compile Include="Src\DelegateCommand.cs" />
<Compile Include="Src\FileSystem.cs" /> <Compile Include="Src\FileSystem.cs" />
<Compile Include="Src\IAddMvcItemToProjectView.cs" /> <Compile Include="Src\IAddMvcItemToProjectView.cs" />
@ -73,8 +75,10 @@
<Compile Include="Src\IMvcProject.cs" /> <Compile Include="Src\IMvcProject.cs" />
<Compile Include="Src\IMvcProjectContent.cs" /> <Compile Include="Src\IMvcProjectContent.cs" />
<Compile Include="Src\IMvcTextTemplateHost.cs" /> <Compile Include="Src\IMvcTextTemplateHost.cs" />
<Compile Include="Src\IMvcTextTemplateHostAppDomain.cs" />
<Compile Include="Src\IMvcTextTemplateHostFactory.cs" /> <Compile Include="Src\IMvcTextTemplateHostFactory.cs" />
<Compile Include="Src\IMvcTextTemplateRepository.cs" /> <Compile Include="Src\IMvcTextTemplateRepository.cs" />
<Compile Include="Src\IMvcTextTemplateHostAppDomainFactory.cs" />
<Compile Include="Src\IMvcViewFileGenerator.cs" /> <Compile Include="Src\IMvcViewFileGenerator.cs" />
<Compile Include="Src\ISelectedFolderNodeInProjectsView.cs" /> <Compile Include="Src\ISelectedFolderNodeInProjectsView.cs" />
<Compile Include="Src\ISelectedMvcFolder.cs" /> <Compile Include="Src\ISelectedMvcFolder.cs" />
@ -101,9 +105,12 @@
<Compile Include="Src\MvcProjectContent.cs" /> <Compile Include="Src\MvcProjectContent.cs" />
<Compile Include="Src\MvcProjectFile.cs" /> <Compile Include="Src\MvcProjectFile.cs" />
<Compile Include="Src\MvcProjectRazorFile.cs" /> <Compile Include="Src\MvcProjectRazorFile.cs" />
<Compile Include="Src\MvcTextTemplateAssemblyResolver.cs" />
<Compile Include="Src\MvcTextTemplateCriteria.cs" /> <Compile Include="Src\MvcTextTemplateCriteria.cs" />
<Compile Include="Src\MvcTextTemplateFileName.cs" /> <Compile Include="Src\MvcTextTemplateFileName.cs" />
<Compile Include="Src\MvcTextTemplateHost.cs" /> <Compile Include="Src\MvcTextTemplateHost.cs" />
<Compile Include="Src\MvcTextTemplateHostAppDomain.cs" />
<Compile Include="Src\MvcTextTemplateHostAppDomainFactory.cs" />
<Compile Include="Src\MvcTextTemplateHostFactory.cs" /> <Compile Include="Src\MvcTextTemplateHostFactory.cs" />
<Compile Include="Src\MvcTextTemplateLanguage.cs" /> <Compile Include="Src\MvcTextTemplateLanguage.cs" />
<Compile Include="Src\MvcTextTemplateLanguageConverter.cs" /> <Compile Include="Src\MvcTextTemplateLanguageConverter.cs" />

19
src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/CurrentAppDomain.cs

@ -0,0 +1,19 @@
// 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;
namespace ICSharpCode.AspNet.Mvc
{
public class CurrentAppDomain : ITextTemplatingAppDomain
{
public AppDomain AppDomain {
get { return AppDomain.CurrentDomain; }
}
public void Dispose()
{
}
}
}

17
src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/CurrentAppDomainFactory.cs

@ -0,0 +1,17 @@
// 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;
namespace ICSharpCode.AspNet.Mvc
{
[Serializable]
public class CurrentAppDomainFactory : ITextTemplatingAppDomainFactory
{
public ITextTemplatingAppDomain CreateTextTemplatingAppDomain(string applicationBase)
{
return new CurrentAppDomain();
}
}
}

18
src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/IMvcTextTemplateHostAppDomain.cs

@ -0,0 +1,18 @@
// 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;
namespace ICSharpCode.AspNet.Mvc
{
public interface IMvcTextTemplateHostAppDomain : ITextTemplatingAppDomain
{
string ApplicationBase { get; }
IMvcTextTemplateHost CreateMvcTextTemplateHost(
ITextTemplatingAppDomainFactory appDomainFactory,
ITextTemplatingAssemblyResolver assemblyResolver,
string applicationBase);
}
}

13
src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/IMvcTextTemplateHostAppDomainFactory.cs

@ -0,0 +1,13 @@
// 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;
namespace ICSharpCode.AspNet.Mvc
{
public interface IMvcTextTemplateHostAppDomainFactory
{
IMvcTextTemplateHostAppDomain CreateAppDomain();
}
}

5
src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/IMvcTextTemplateHostFactory.cs

@ -3,11 +3,14 @@
using System; using System;
using ICSharpCode.SharpDevelop.Project; using ICSharpCode.SharpDevelop.Project;
using ICSharpCode.TextTemplating;
namespace ICSharpCode.AspNet.Mvc namespace ICSharpCode.AspNet.Mvc
{ {
public interface IMvcTextTemplateHostFactory public interface IMvcTextTemplateHostFactory
{ {
IMvcTextTemplateHost CreateMvcTextTemplateHost(IMvcProject project); IMvcTextTemplateHost CreateMvcTextTemplateHost(
IMvcProject project,
IMvcTextTemplateHostAppDomain appDomain);
} }
} }

10
src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/MvcControllerFileGenerator.cs

@ -9,12 +9,16 @@ namespace ICSharpCode.AspNet.Mvc
public class MvcControllerFileGenerator : MvcFileGenerator, IMvcControllerFileGenerator public class MvcControllerFileGenerator : MvcFileGenerator, IMvcControllerFileGenerator
{ {
public MvcControllerFileGenerator() public MvcControllerFileGenerator()
: this(new MvcTextTemplateHostFactory()) : this(
new MvcTextTemplateHostFactory(),
new MvcTextTemplateHostAppDomainFactory())
{ {
} }
public MvcControllerFileGenerator(IMvcTextTemplateHostFactory hostFactory) public MvcControllerFileGenerator(
: base(hostFactory) IMvcTextTemplateHostFactory hostFactory,
IMvcTextTemplateHostAppDomainFactory appDomainFactory)
: base(hostFactory, appDomainFactory)
{ {
this.Template = new MvcControllerTextTemplate(); this.Template = new MvcControllerTextTemplate();
} }

22
src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/MvcFileGenerator.cs

@ -4,16 +4,21 @@
using System; using System;
using System.CodeDom.Compiler; using System.CodeDom.Compiler;
using ICSharpCode.SharpDevelop.Project; using ICSharpCode.SharpDevelop.Project;
using ICSharpCode.TextTemplating;
namespace ICSharpCode.AspNet.Mvc namespace ICSharpCode.AspNet.Mvc
{ {
public abstract class MvcFileGenerator public abstract class MvcFileGenerator
{ {
IMvcTextTemplateHostFactory hostFactory; IMvcTextTemplateHostFactory hostFactory;
IMvcTextTemplateHostAppDomainFactory appDomainFactory;
public MvcFileGenerator(IMvcTextTemplateHostFactory hostFactory) public MvcFileGenerator(
IMvcTextTemplateHostFactory hostFactory,
IMvcTextTemplateHostAppDomainFactory appDomainFactory)
{ {
this.hostFactory = hostFactory; this.hostFactory = hostFactory;
this.appDomainFactory = appDomainFactory;
} }
public MvcTextTemplateLanguage TemplateLanguage { get; set; } public MvcTextTemplateLanguage TemplateLanguage { get; set; }
@ -21,14 +26,21 @@ namespace ICSharpCode.AspNet.Mvc
public void GenerateFile(MvcFileName fileName) public void GenerateFile(MvcFileName fileName)
{ {
using (IMvcTextTemplateHost host = CreateHost()) { using (IMvcTextTemplateHostAppDomain appDomain = CreateAppDomain()) {
GenerateFile(host, fileName); using (IMvcTextTemplateHost host = CreateHost(appDomain)) {
GenerateFile(host, fileName);
}
} }
} }
IMvcTextTemplateHost CreateHost() IMvcTextTemplateHostAppDomain CreateAppDomain()
{ {
return hostFactory.CreateMvcTextTemplateHost(Project); return appDomainFactory.CreateAppDomain();
}
IMvcTextTemplateHost CreateHost(IMvcTextTemplateHostAppDomain appDomain)
{
return hostFactory.CreateMvcTextTemplateHost(Project, appDomain);
} }
void GenerateFile(IMvcTextTemplateHost host, MvcFileName fileName) void GenerateFile(IMvcTextTemplateHost host, MvcFileName fileName)

17
src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/MvcTextTemplateAssemblyResolver.cs

@ -0,0 +1,17 @@
// 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;
namespace ICSharpCode.AspNet.Mvc
{
[Serializable]
public class MvcTextTemplateAssemblyResolver : ITextTemplatingAssemblyResolver
{
public string Resolve(string assemblyReference)
{
return assemblyReference;
}
}
}

39
src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/MvcTextTemplateHostAppDomain.cs

@ -0,0 +1,39 @@
// 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.Reflection;
using ICSharpCode.TextTemplating;
namespace ICSharpCode.AspNet.Mvc
{
public class MvcTextTemplateHostAppDomain : TextTemplatingAppDomain, IMvcTextTemplateHostAppDomain
{
public MvcTextTemplateHostAppDomain(string applicationBase)
: base(applicationBase)
{
this.ApplicationBase = applicationBase;
}
public string ApplicationBase { get; private set; }
public IMvcTextTemplateHost CreateMvcTextTemplateHost(
ITextTemplatingAppDomainFactory appDomainFactory,
ITextTemplatingAssemblyResolver assemblyResolver,
string applicationBase)
{
Type type = typeof(MvcTextTemplateHost);
var args = new object[] { appDomainFactory, assemblyResolver, applicationBase };
return (MvcTextTemplateHost)AppDomain.CreateInstanceAndUnwrap(
type.Assembly.FullName,
type.FullName,
false,
BindingFlags.CreateInstance,
null,
args,
null,
null);
}
}
}

24
src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/MvcTextTemplateHostAppDomainFactory.cs

@ -0,0 +1,24 @@
// 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.IO;
using ICSharpCode.TextTemplating;
namespace ICSharpCode.AspNet.Mvc
{
public class MvcTextTemplateHostAppDomainFactory : IMvcTextTemplateHostAppDomainFactory
{
public IMvcTextTemplateHostAppDomain CreateAppDomain()
{
string applicationBase = GetAssemblyBaseLocation();
return new MvcTextTemplateHostAppDomain(applicationBase);
}
string GetAssemblyBaseLocation()
{
string location = GetType().Assembly.Location;
return Path.GetDirectoryName(location);
}
}
}

20
src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/MvcTextTemplateHostFactory.cs

@ -2,26 +2,18 @@
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt) // This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System; using System;
using System.IO;
using ICSharpCode.SharpDevelop.Project;
using ICSharpCode.TextTemplating;
namespace ICSharpCode.AspNet.Mvc namespace ICSharpCode.AspNet.Mvc
{ {
public class MvcTextTemplateHostFactory : IMvcTextTemplateHostFactory public class MvcTextTemplateHostFactory : IMvcTextTemplateHostFactory
{ {
public IMvcTextTemplateHost CreateMvcTextTemplateHost(IMvcProject mvcProject) public IMvcTextTemplateHost CreateMvcTextTemplateHost(
IMvcProject mvcProject,
IMvcTextTemplateHostAppDomain appDomain)
{ {
var appDomainFactory = new TextTemplatingAppDomainFactory(); var assemblyResolver = new MvcTextTemplateAssemblyResolver();
string applicationBase = GetAssemblyBaseLocation(); var appDomainFactory = new CurrentAppDomainFactory();
var assemblyResolver = new TextTemplatingAssemblyResolver(mvcProject.Project); return appDomain.CreateMvcTextTemplateHost(appDomainFactory, assemblyResolver, appDomain.ApplicationBase);
return new MvcTextTemplateHost(appDomainFactory, assemblyResolver, applicationBase);
}
string GetAssemblyBaseLocation()
{
string location = GetType().Assembly.Location;
return Path.GetDirectoryName(location);
} }
} }
} }

8
src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/MvcViewFileGenerator.cs

@ -13,14 +13,16 @@ namespace ICSharpCode.AspNet.Mvc
public MvcViewFileGenerator() public MvcViewFileGenerator()
: this( : this(
new MvcTextTemplateHostFactory(), new MvcTextTemplateHostFactory(),
new MvcTextTemplateRepository()) new MvcTextTemplateRepository(),
new MvcTextTemplateHostAppDomainFactory())
{ {
} }
public MvcViewFileGenerator( public MvcViewFileGenerator(
IMvcTextTemplateHostFactory hostFactory, IMvcTextTemplateHostFactory hostFactory,
MvcTextTemplateRepository textTemplateRepository) MvcTextTemplateRepository textTemplateRepository,
: base(hostFactory) IMvcTextTemplateHostAppDomainFactory appDomainFactory)
: base(hostFactory, appDomainFactory)
{ {
this.textTemplateRepository = textTemplateRepository; this.textTemplateRepository = textTemplateRepository;

3
src/AddIns/BackendBindings/AspNet.Mvc/Test/AspNet.Mvc.Tests.csproj

@ -62,6 +62,8 @@
<Compile Include="Helpers\FakeMvcParserService.cs" /> <Compile Include="Helpers\FakeMvcParserService.cs" />
<Compile Include="Helpers\FakeMvcProject.cs" /> <Compile Include="Helpers\FakeMvcProject.cs" />
<Compile Include="Helpers\FakeMvcProjectContent.cs" /> <Compile Include="Helpers\FakeMvcProjectContent.cs" />
<Compile Include="Helpers\FakeMvcTextTemplateAppDomain.cs" />
<Compile Include="Helpers\FakeMvcTextTemplateAppDomainFactory.cs" />
<Compile Include="Helpers\FakeMvcTextTemplateHost.cs" /> <Compile Include="Helpers\FakeMvcTextTemplateHost.cs" />
<Compile Include="Helpers\FakeMvcTextTemplateHostFactory.cs" /> <Compile Include="Helpers\FakeMvcTextTemplateHostFactory.cs" />
<Compile Include="Helpers\FakeMvcTextTemplateRepository.cs" /> <Compile Include="Helpers\FakeMvcTextTemplateRepository.cs" />
@ -93,6 +95,7 @@
<Compile Include="Src\MvcModelClassViewModelTests.cs" /> <Compile Include="Src\MvcModelClassViewModelTests.cs" />
<Compile Include="Src\MvcProjectRazorFileTests.cs" /> <Compile Include="Src\MvcProjectRazorFileTests.cs" />
<Compile Include="Src\MvcProjectTests.cs" /> <Compile Include="Src\MvcProjectTests.cs" />
<Compile Include="Src\MvcTextTemplateAssemblyResolverTests.cs" />
<Compile Include="Src\MvcTextTemplateHostTests.cs" /> <Compile Include="Src\MvcTextTemplateHostTests.cs" />
<Compile Include="Src\MvcTextTemplateRepositoryTests.cs" /> <Compile Include="Src\MvcTextTemplateRepositoryTests.cs" />
<Compile Include="Src\MvcViewFileNameTests.cs" /> <Compile Include="Src\MvcViewFileNameTests.cs" />

30
src/AddIns/BackendBindings/AspNet.Mvc/Test/Helpers/FakeMvcTextTemplateAppDomain.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.AspNet.Mvc;
using ICSharpCode.TextTemplating;
namespace AspNet.Mvc.Tests.Helpers
{
public class FakeMvcTextTemplateAppDomain : IMvcTextTemplateHostAppDomain
{
public string ApplicationBase { get; set; }
public AppDomain AppDomain { get; set; }
public IMvcTextTemplateHost CreateMvcTextTemplateHost(
ITextTemplatingAppDomainFactory appDomainFactory,
ITextTemplatingAssemblyResolver assemblyResolver,
string applicationBase)
{
return null;
}
public bool IsDisposed;
public void Dispose()
{
IsDisposed = true;
}
}
}

18
src/AddIns/BackendBindings/AspNet.Mvc/Test/Helpers/FakeMvcTextTemplateAppDomainFactory.cs

@ -0,0 +1,18 @@
// 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.AspNet.Mvc;
namespace AspNet.Mvc.Tests.Helpers
{
public class FakeMvcTextTemplateAppDomainFactory : IMvcTextTemplateHostAppDomainFactory
{
public FakeMvcTextTemplateAppDomain FakeAppDomain = new FakeMvcTextTemplateAppDomain();
public IMvcTextTemplateHostAppDomain CreateAppDomain()
{
return FakeAppDomain;
}
}
}

4
src/AddIns/BackendBindings/AspNet.Mvc/Test/Helpers/FakeMvcTextTemplateHostFactory.cs

@ -10,11 +10,13 @@ namespace AspNet.Mvc.Tests.Helpers
public class FakeMvcTextTemplateHostFactory : IMvcTextTemplateHostFactory public class FakeMvcTextTemplateHostFactory : IMvcTextTemplateHostFactory
{ {
public IMvcProject ProjectPassedToCreateMvcTextTemplateHost; public IMvcProject ProjectPassedToCreateMvcTextTemplateHost;
public IMvcTextTemplateHostAppDomain AppDomainPassedToCreateMvcTextTemplateHost;
public FakeMvcTextTemplateHost FakeMvcTextTemplateHost = new FakeMvcTextTemplateHost(); public FakeMvcTextTemplateHost FakeMvcTextTemplateHost = new FakeMvcTextTemplateHost();
public IMvcTextTemplateHost CreateMvcTextTemplateHost(IMvcProject project) public IMvcTextTemplateHost CreateMvcTextTemplateHost(IMvcProject project, IMvcTextTemplateHostAppDomain appDomain)
{ {
ProjectPassedToCreateMvcTextTemplateHost = project; ProjectPassedToCreateMvcTextTemplateHost = project;
AppDomainPassedToCreateMvcTextTemplateHost = appDomain;
return FakeMvcTextTemplateHost; return FakeMvcTextTemplateHost;
} }
} }

28
src/AddIns/BackendBindings/AspNet.Mvc/Test/Src/MvcControllerFileGeneratorTests.cs

@ -16,12 +16,14 @@ namespace AspNet.Mvc.Tests
FakeMvcProject projectUsedByGenerator; FakeMvcProject projectUsedByGenerator;
FakeMvcTextTemplateHostFactory fakeHostFactory; FakeMvcTextTemplateHostFactory fakeHostFactory;
FakeMvcTextTemplateHost fakeHost; FakeMvcTextTemplateHost fakeHost;
FakeMvcTextTemplateAppDomainFactory fakeAppDomainFactory;
void CreateGenerator() void CreateGenerator()
{ {
fakeHostFactory = new FakeMvcTextTemplateHostFactory(); fakeHostFactory = new FakeMvcTextTemplateHostFactory();
fakeHost = fakeHostFactory.FakeMvcTextTemplateHost; fakeHost = fakeHostFactory.FakeMvcTextTemplateHost;
generator = new MvcControllerFileGenerator(fakeHostFactory); fakeAppDomainFactory = new FakeMvcTextTemplateAppDomainFactory();
generator = new MvcControllerFileGenerator(fakeHostFactory, fakeAppDomainFactory);
projectUsedByGenerator = new FakeMvcProject(); projectUsedByGenerator = new FakeMvcProject();
generator.Project = projectUsedByGenerator; generator.Project = projectUsedByGenerator;
ProjectPassedToGeneratorIsCSharpProject(); ProjectPassedToGeneratorIsCSharpProject();
@ -176,5 +178,29 @@ namespace AspNet.Mvc.Tests
Assert.IsFalse(addActionMethods); Assert.IsFalse(addActionMethods);
} }
[Test]
public void GenerateFile_CSharpControllerTemplate_AppDomainIsDisposed()
{
CreateGenerator();
ProjectPassedToGeneratorIsCSharpProject();
GenerateFile();
bool disposed = fakeAppDomainFactory.FakeAppDomain.IsDisposed;
Assert.IsTrue(disposed);
}
[Test]
public void GenerateFile_CSharpControllerTemplate_MvcTextTemplateHostIsCreatedWithAppDomain()
{
CreateGenerator();
ProjectPassedToGeneratorIsCSharpProject();
GenerateFile();
IMvcTextTemplateHostAppDomain appDomain = fakeHostFactory.AppDomainPassedToCreateMvcTextTemplateHost;
FakeMvcTextTemplateAppDomain expectedAppDomain = fakeAppDomainFactory.FakeAppDomain;
Assert.AreEqual(expectedAppDomain, appDomain);
}
} }
} }

31
src/AddIns/BackendBindings/AspNet.Mvc/Test/Src/MvcTextTemplateAssemblyResolverTests.cs

@ -0,0 +1,31 @@
// 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.AspNet.Mvc;
using NUnit.Framework;
namespace AspNet.Mvc.Tests
{
[TestFixture]
public class MvcTextTemplateAssemblyResolverTests
{
MvcTextTemplateAssemblyResolver resolver;
void CreateResolver()
{
resolver = new MvcTextTemplateAssemblyResolver();
}
[Test]
public void Resolve_FullPathToAssemblyPassed_ReturnsFullPathToAssembly()
{
CreateResolver();
string expectedAssemblyPath = @"d:\projects\MyProject\bin\debug\MyProject.dll";
string resolvedAssemblyPath = resolver.Resolve(expectedAssemblyPath);
Assert.AreEqual(expectedAssemblyPath, resolvedAssemblyPath);
}
}
}

28
src/AddIns/BackendBindings/AspNet.Mvc/Test/Src/MvcViewFileGeneratorTests.cs

@ -17,6 +17,7 @@ namespace AspNet.Mvc.Tests
MvcTextTemplateRepository templateRepository; MvcTextTemplateRepository templateRepository;
FakeMvcTextTemplateHostFactory fakeHostFactory; FakeMvcTextTemplateHostFactory fakeHostFactory;
FakeMvcTextTemplateHost fakeHost; FakeMvcTextTemplateHost fakeHost;
FakeMvcTextTemplateAppDomainFactory fakeAppDomainFactory;
void CreateTemplateRepository(string templateRootDirectory) void CreateTemplateRepository(string templateRootDirectory)
{ {
@ -33,7 +34,8 @@ namespace AspNet.Mvc.Tests
{ {
fakeHostFactory = new FakeMvcTextTemplateHostFactory(); fakeHostFactory = new FakeMvcTextTemplateHostFactory();
fakeHost = fakeHostFactory.FakeMvcTextTemplateHost; fakeHost = fakeHostFactory.FakeMvcTextTemplateHost;
generator = new MvcViewFileGenerator(fakeHostFactory, templateRepository); fakeAppDomainFactory = new FakeMvcTextTemplateAppDomainFactory();
generator = new MvcViewFileGenerator(fakeHostFactory, templateRepository, fakeAppDomainFactory);
projectUsedByGenerator = new FakeMvcProject(); projectUsedByGenerator = new FakeMvcProject();
generator.Project = projectUsedByGenerator; generator.Project = projectUsedByGenerator;
ProjectPassedToGeneratorIsCSharpProject(); ProjectPassedToGeneratorIsCSharpProject();
@ -267,5 +269,29 @@ namespace AspNet.Mvc.Tests
Assert.AreEqual(expectedFileName, fileName); Assert.AreEqual(expectedFileName, fileName);
} }
[Test]
public void GenerateFile_CSharpEmptyViewTemplate_AppDomainIsDisposed()
{
CreateGenerator();
ProjectPassedToGeneratorIsCSharpProject();
GenerateFile();
bool disposed = fakeAppDomainFactory.FakeAppDomain.IsDisposed;
Assert.IsTrue(disposed);
}
[Test]
public void GenerateFile_CSharpEmptyViewTemplate_MvcTextTemplateHostIsCreatedWithAppDomain()
{
CreateGenerator();
ProjectPassedToGeneratorIsCSharpProject();
GenerateFile();
IMvcTextTemplateHostAppDomain appDomain = fakeHostFactory.AppDomainPassedToCreateMvcTextTemplateHost;
FakeMvcTextTemplateAppDomain expectedAppDomain = fakeAppDomainFactory.FakeAppDomain;
Assert.AreEqual(expectedAppDomain, appDomain);
}
} }
} }

Loading…
Cancel
Save