Browse Source

Add MVC T4 processing errors to Errors window.

Add View and Add Controller dialogs now report T4 template processing errors to the Errors window instead of logging them to the console window.
pull/28/head
Matt Ward 14 years ago
parent
commit
356e7bfc6f
  1. 2
      src/AddIns/BackendBindings/AspNet.Mvc/Project/AspNet.Mvc.csproj
  2. 13
      src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/IMvcFileGenerationErrorReporter.cs
  3. 8
      src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/MvcControllerFileGenerator.cs
  4. 23
      src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/MvcFileGenerationErrorReporter.cs
  5. 12
      src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/MvcFileGenerator.cs
  6. 8
      src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/MvcViewFileGenerator.cs
  7. 28
      src/AddIns/BackendBindings/AspNet.Mvc/Test/Src/MvcControllerFileGeneratorTests.cs
  8. 28
      src/AddIns/BackendBindings/AspNet.Mvc/Test/Src/MvcViewFileGeneratorTests.cs

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

@ -173,6 +173,7 @@ @@ -173,6 +173,7 @@
<Compile Include="Src\IISAdministrator.cs" />
<Compile Include="Src\IISExpressAdministrator.cs" />
<Compile Include="Src\IISExpressProcessStartInfo.cs" />
<Compile Include="Src\IMvcFileGenerationErrorReporter.cs" />
<Compile Include="Src\IMvcModelClassLocator.cs" />
<Compile Include="Src\IMvcClass.cs" />
<Compile Include="Src\IMvcControllerFileGenerator.cs" />
@ -193,6 +194,7 @@ @@ -193,6 +194,7 @@
<Compile Include="Src\IsMvcViewFolderSelectedConditionEvaluator.cs" />
<Compile Include="Configuration\AssemblyInfo.cs" />
<Compile Include="Src\MvcControllerTextTemplate.cs" />
<Compile Include="Src\MvcFileGenerationErrorReporter.cs" />
<Compile Include="Src\MvcProjectMasterPageFile.cs" />
<Compile Include="Src\MvcModelClassLocator.cs" />
<Compile Include="Src\MvcAddViewTextTemplateFolder.cs" />

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

@ -0,0 +1,13 @@ @@ -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 System.CodeDom.Compiler;
namespace ICSharpCode.AspNet.Mvc
{
public interface IMvcFileGenerationErrorReporter
{
void ShowErrors(CompilerErrorCollection errors);
}
}

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

@ -11,14 +11,16 @@ namespace ICSharpCode.AspNet.Mvc @@ -11,14 +11,16 @@ namespace ICSharpCode.AspNet.Mvc
public MvcControllerFileGenerator()
: this(
new MvcTextTemplateHostFactory(),
new MvcTextTemplateHostAppDomainFactory())
new MvcTextTemplateHostAppDomainFactory(),
new MvcFileGenerationErrorReporter())
{
}
public MvcControllerFileGenerator(
IMvcTextTemplateHostFactory hostFactory,
IMvcTextTemplateHostAppDomainFactory appDomainFactory)
: base(hostFactory, appDomainFactory)
IMvcTextTemplateHostAppDomainFactory appDomainFactory,
IMvcFileGenerationErrorReporter errorReporter)
: base(hostFactory, appDomainFactory, errorReporter)
{
this.Template = new MvcControllerTextTemplate();
}

23
src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/MvcFileGenerationErrorReporter.cs

@ -0,0 +1,23 @@ @@ -0,0 +1,23 @@
// 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.CodeDom.Compiler;
using ICSharpCode.SharpDevelop;
using ICSharpCode.SharpDevelop.Gui;
using ICSharpCode.TextTemplating;
namespace ICSharpCode.AspNet.Mvc
{
public class MvcFileGenerationErrorReporter : IMvcFileGenerationErrorReporter
{
public void ShowErrors(CompilerErrorCollection errors)
{
TaskService.ClearExceptCommentTasks();
foreach (CompilerError error in errors) {
TaskService.Add(new CompilerErrorTask(error));
}
WorkbenchSingleton.Workbench.GetPad(typeof(ErrorListPad)).BringPadToFront();
}
}
}

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

@ -12,13 +12,16 @@ namespace ICSharpCode.AspNet.Mvc @@ -12,13 +12,16 @@ namespace ICSharpCode.AspNet.Mvc
{
IMvcTextTemplateHostFactory hostFactory;
IMvcTextTemplateHostAppDomainFactory appDomainFactory;
IMvcFileGenerationErrorReporter errorReporter;
public MvcFileGenerator(
IMvcTextTemplateHostFactory hostFactory,
IMvcTextTemplateHostAppDomainFactory appDomainFactory)
IMvcTextTemplateHostAppDomainFactory appDomainFactory,
IMvcFileGenerationErrorReporter errorReporter)
{
this.hostFactory = hostFactory;
this.appDomainFactory = appDomainFactory;
this.errorReporter = errorReporter;
}
public MvcTextTemplateLanguage TemplateLanguage { get; set; }
@ -56,11 +59,8 @@ namespace ICSharpCode.AspNet.Mvc @@ -56,11 +59,8 @@ namespace ICSharpCode.AspNet.Mvc
host.ProcessTemplate(templateFileName, outputViewFileName);
Errors = host.Errors;
if (host.Errors.Count > 0) {
CompilerError error = host.Errors[0];
Console.WriteLine("ProcessTemplate error: " + error.ErrorText);
Console.WriteLine("ProcessTemplate error: Line: " + error.Line);
if (HasErrors) {
errorReporter.ShowErrors(Errors);
}
}

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

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

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

@ -7,6 +7,7 @@ using AspNet.Mvc.Tests.Helpers; @@ -7,6 +7,7 @@ using AspNet.Mvc.Tests.Helpers;
using ICSharpCode.AspNet.Mvc;
using ICSharpCode.SharpDevelop.Project;
using NUnit.Framework;
using Rhino.Mocks;
namespace AspNet.Mvc.Tests
{
@ -18,13 +19,15 @@ namespace AspNet.Mvc.Tests @@ -18,13 +19,15 @@ namespace AspNet.Mvc.Tests
FakeMvcTextTemplateHostFactory fakeHostFactory;
FakeMvcTextTemplateHost fakeHost;
FakeMvcTextTemplateAppDomainFactory fakeAppDomainFactory;
IMvcFileGenerationErrorReporter fakeErrorReporter;
void CreateGenerator()
{
fakeHostFactory = new FakeMvcTextTemplateHostFactory();
fakeHost = fakeHostFactory.FakeMvcTextTemplateHost;
fakeAppDomainFactory = new FakeMvcTextTemplateAppDomainFactory();
generator = new MvcControllerFileGenerator(fakeHostFactory, fakeAppDomainFactory);
fakeErrorReporter = MockRepository.GenerateStub<IMvcFileGenerationErrorReporter>();
generator = new MvcControllerFileGenerator(fakeHostFactory, fakeAppDomainFactory, fakeErrorReporter);
projectUsedByGenerator = new FakeMvcProject();
generator.Project = projectUsedByGenerator;
ProjectPassedToGeneratorIsCSharpProject();
@ -244,5 +247,28 @@ namespace AspNet.Mvc.Tests @@ -244,5 +247,28 @@ namespace AspNet.Mvc.Tests
Assert.IsTrue(result);
}
[Test]
public void GenerateFile_TemplateProcessedWithCompilerError_ErrorsReported()
{
CreateGenerator();
ProjectPassedToGeneratorIsCSharpProject();
CompilerError error = AddCompilerErrorToTemplateHost();
GenerateFile();
fakeErrorReporter.AssertWasCalled(reporter => reporter.ShowErrors(generator.Errors));
}
[Test]
public void GenerateFile_TemplateProcessedNoErrors_NoErrorsReported()
{
CreateGenerator();
ProjectPassedToGeneratorIsCSharpProject();
GenerateFile();
fakeErrorReporter.AssertWasNotCalled(reporter => reporter.ShowErrors(Arg<CompilerErrorCollection>.Is.Anything));
}
}
}

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

@ -7,6 +7,7 @@ using AspNet.Mvc.Tests.Helpers; @@ -7,6 +7,7 @@ using AspNet.Mvc.Tests.Helpers;
using ICSharpCode.AspNet.Mvc;
using ICSharpCode.SharpDevelop.Project;
using NUnit.Framework;
using Rhino.Mocks;
namespace AspNet.Mvc.Tests
{
@ -19,6 +20,7 @@ namespace AspNet.Mvc.Tests @@ -19,6 +20,7 @@ namespace AspNet.Mvc.Tests
FakeMvcTextTemplateHostFactory fakeHostFactory;
FakeMvcTextTemplateHost fakeHost;
FakeMvcTextTemplateAppDomainFactory fakeAppDomainFactory;
IMvcFileGenerationErrorReporter fakeErrorReporter;
void CreateTemplateRepository(string templateRootDirectory)
{
@ -36,7 +38,8 @@ namespace AspNet.Mvc.Tests @@ -36,7 +38,8 @@ namespace AspNet.Mvc.Tests
fakeHostFactory = new FakeMvcTextTemplateHostFactory();
fakeHost = fakeHostFactory.FakeMvcTextTemplateHost;
fakeAppDomainFactory = new FakeMvcTextTemplateAppDomainFactory();
generator = new MvcViewFileGenerator(fakeHostFactory, templateRepository, fakeAppDomainFactory);
fakeErrorReporter = MockRepository.GenerateStub<IMvcFileGenerationErrorReporter>();
generator = new MvcViewFileGenerator(fakeHostFactory, templateRepository, fakeAppDomainFactory, fakeErrorReporter);
projectUsedByGenerator = new FakeMvcProject();
generator.Project = projectUsedByGenerator;
ProjectPassedToGeneratorIsCSharpProject();
@ -357,5 +360,28 @@ namespace AspNet.Mvc.Tests @@ -357,5 +360,28 @@ namespace AspNet.Mvc.Tests
Assert.IsTrue(result);
}
[Test]
public void GenerateFile_TemplateProcessedWithCompilerError_ErrorsReported()
{
CreateGenerator();
ProjectPassedToGeneratorIsCSharpProject();
CompilerError error = AddCompilerErrorToTemplateHost();
GenerateFile();
fakeErrorReporter.AssertWasCalled(reporter => reporter.ShowErrors(generator.Errors));
}
[Test]
public void GenerateFile_TemplateProcessedNoErrors_NoErrorsReported()
{
CreateGenerator();
ProjectPassedToGeneratorIsCSharpProject();
GenerateFile();
fakeErrorReporter.AssertWasNotCalled(reporter => reporter.ShowErrors(Arg<CompilerErrorCollection>.Is.Anything));
}
}
}

Loading…
Cancel
Save