From c2a76915b1f29828ebd3fd22108247da0ce95678 Mon Sep 17 00:00:00 2001 From: Matt Ward Date: Sun, 18 Sep 2011 20:48:50 +0100 Subject: [PATCH] Generate MVC views in the Add MVC View dialog from on the selected T4 template. --- .../Src/AddMvcViewToProjectViewModel.cs | 3 +- .../Project/Src/IMvcViewFileGenerator.cs | 3 +- .../Project/Src/MvcViewFileGenerator.cs | 15 +--- .../Test/Helpers/FakeMvcViewFileGenerator.cs | 3 +- .../Src/AddMvcViewToProjectViewModelTests.cs | 51 ++----------- .../Test/Src/MvcViewFileGeneratorTests.cs | 71 ++++++------------- 6 files changed, 34 insertions(+), 112 deletions(-) diff --git a/src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/AddMvcViewToProjectViewModel.cs b/src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/AddMvcViewToProjectViewModel.cs index 7ad0763107..dd8984ef87 100644 --- a/src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/AddMvcViewToProjectViewModel.cs +++ b/src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/AddMvcViewToProjectViewModel.cs @@ -232,8 +232,7 @@ namespace ICSharpCode.AspNet.Mvc viewGenerator.ModelClassName = GetModelClassName(); viewGenerator.PrimaryContentPlaceHolderId = GetPrimaryContentPlaceHolderId(); viewGenerator.Project = selectedViewFolder.Project; - viewGenerator.TemplateLanguage = GetTemplateLanguage(); - viewGenerator.TemplateType = selectedViewEngine.TemplateType; + viewGenerator.Template = selectedViewTemplate; } string GetMasterPageFile() diff --git a/src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/IMvcViewFileGenerator.cs b/src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/IMvcViewFileGenerator.cs index fdbe3d0610..a638038ef7 100644 --- a/src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/IMvcViewFileGenerator.cs +++ b/src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/IMvcViewFileGenerator.cs @@ -8,13 +8,12 @@ namespace ICSharpCode.AspNet.Mvc { public interface IMvcViewFileGenerator { - MvcTextTemplateLanguage TemplateLanguage { get; set; } - MvcTextTemplateType TemplateType { get; set; } IMvcProject Project { get; set; } string ModelClassName { get; set; } bool IsContentPage { get; set; } string MasterPageFile { get; set; } string PrimaryContentPlaceHolderId { get; set; } + MvcViewTextTemplate Template { get; set; } void GenerateFile(MvcViewFileName fileName); } diff --git a/src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/MvcViewFileGenerator.cs b/src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/MvcViewFileGenerator.cs index 503e76ccf9..49cad56610 100644 --- a/src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/MvcViewFileGenerator.cs +++ b/src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/MvcViewFileGenerator.cs @@ -27,13 +27,14 @@ namespace ICSharpCode.AspNet.Mvc ModelClassName = String.Empty; MasterPageFile = String.Empty; PrimaryContentPlaceHolderId = String.Empty; + Template = new MvcViewTextTemplate(); } - public MvcTextTemplateType TemplateType { get; set; } public string ModelClassName { get; set; } public bool IsContentPage { get; set; } public string MasterPageFile { get; set; } public string PrimaryContentPlaceHolderId { get; set; } + public MvcViewTextTemplate Template { get; set; } public void GenerateFile(MvcViewFileName fileName) { @@ -54,17 +55,7 @@ namespace ICSharpCode.AspNet.Mvc protected override string GetTextTemplateFileName() { - MvcTextTemplateCriteria templateCriteria = GetTextTemplateCriteria(); - return textTemplateRepository.GetMvcViewTextTemplateFileName(templateCriteria); - } - - MvcTextTemplateCriteria GetTextTemplateCriteria() - { - return new MvcTextTemplateCriteria() { - TemplateLanguage = TemplateLanguage, - TemplateName = "Empty", - TemplateType = TemplateType - }; + return Template.FileName; } } } diff --git a/src/AddIns/BackendBindings/AspNet.Mvc/Test/Helpers/FakeMvcViewFileGenerator.cs b/src/AddIns/BackendBindings/AspNet.Mvc/Test/Helpers/FakeMvcViewFileGenerator.cs index 0c109a443b..4ce3aac6b8 100644 --- a/src/AddIns/BackendBindings/AspNet.Mvc/Test/Helpers/FakeMvcViewFileGenerator.cs +++ b/src/AddIns/BackendBindings/AspNet.Mvc/Test/Helpers/FakeMvcViewFileGenerator.cs @@ -9,13 +9,12 @@ namespace AspNet.Mvc.Tests.Helpers { public class FakeMvcViewFileGenerator : IMvcViewFileGenerator { - public MvcTextTemplateLanguage TemplateLanguage { get; set; } - public MvcTextTemplateType TemplateType { get; set; } public IMvcProject Project { get; set; } public string ModelClassName { get; set; } public bool IsContentPage { get; set; } public string MasterPageFile { get; set; } public string PrimaryContentPlaceHolderId { get; set; } + public MvcViewTextTemplate Template { get; set; } public bool IsGenerateFileCalled; public MvcViewFileName FileNamePassedToGenerateFile; diff --git a/src/AddIns/BackendBindings/AspNet.Mvc/Test/Src/AddMvcViewToProjectViewModelTests.cs b/src/AddIns/BackendBindings/AspNet.Mvc/Test/Src/AddMvcViewToProjectViewModelTests.cs index 3d3805bbbc..3939845ae2 100644 --- a/src/AddIns/BackendBindings/AspNet.Mvc/Test/Src/AddMvcViewToProjectViewModelTests.cs +++ b/src/AddIns/BackendBindings/AspNet.Mvc/Test/Src/AddMvcViewToProjectViewModelTests.cs @@ -133,27 +133,18 @@ namespace AspNet.Mvc.Tests } [Test] - public void AddMvcView_SelectedViewFolderIsInVisualBasicProject_VisualBasicMvcViewFileGenerated() + public void AddMvcView_SelectedViewTemplateIsSet_ViewTemplateUsedToGenerateMvcViewFile() { CreateViewModel(); fakeSelectedMvcViewFolder.TemplateLanguage = MvcTextTemplateLanguage.VisualBasic; + SelectRazorViewEngine(); + MvcViewTextTemplate expectedTemplate = new MvcViewTextTemplate(); + viewModel.SelectedViewTemplate = expectedTemplate; viewModel.AddMvcView(); - MvcTextTemplateLanguage templateLanguage = fakeViewGenerator.TemplateLanguage; - - Assert.AreEqual(MvcTextTemplateLanguage.VisualBasic, templateLanguage); - } - - [Test] - public void AddMvcView_SelectedViewFolderIsInCSharpProject_CSharpMvcViewFileGenerated() - { - CreateViewModel(); - fakeSelectedMvcViewFolder.TemplateLanguage = MvcTextTemplateLanguage.CSharp; - viewModel.AddMvcView(); - - MvcTextTemplateLanguage templateLanguage = fakeViewGenerator.TemplateLanguage; + MvcViewTextTemplate template = fakeViewGenerator.Template; - Assert.AreEqual(MvcTextTemplateLanguage.CSharp, templateLanguage); + Assert.AreEqual(expectedTemplate, template); } [Test] @@ -330,36 +321,6 @@ namespace AspNet.Mvc.Tests Assert.AreEqual(expectedFileName, fileName); } - [Test] - public void AddMvcView_RazorViewEngineIsSelected_RazorViewFileGenerated() - { - CreateViewModel(); - fakeViewGenerator.TemplateType = MvcTextTemplateType.Aspx; - CSharpProjectSelected(); - viewModel.ViewName = "Index"; - SelectRazorViewEngine(); - viewModel.AddMvcView(); - - MvcTextTemplateType templateType = fakeViewGenerator.TemplateType; - - Assert.AreEqual(MvcTextTemplateType.Razor, templateType); - } - - [Test] - public void AddMvcView_AspxViewEngineIsSelected_AspxViewFileGenerated() - { - CreateViewModel(); - fakeViewGenerator.TemplateType = MvcTextTemplateType.Razor; - CSharpProjectSelected(); - viewModel.ViewName = "Index"; - SelectAspxViewEngine(); - viewModel.AddMvcView(); - - MvcTextTemplateType templateType = fakeViewGenerator.TemplateType; - - Assert.AreEqual(MvcTextTemplateType.Aspx, templateType); - } - [Test] public void AddMvcView_CreateAsPartialViewIsSelected_ViewFileIsPartialView() { diff --git a/src/AddIns/BackendBindings/AspNet.Mvc/Test/Src/MvcViewFileGeneratorTests.cs b/src/AddIns/BackendBindings/AspNet.Mvc/Test/Src/MvcViewFileGeneratorTests.cs index 18d8ab152a..8116f6e037 100644 --- a/src/AddIns/BackendBindings/AspNet.Mvc/Test/Src/MvcViewFileGeneratorTests.cs +++ b/src/AddIns/BackendBindings/AspNet.Mvc/Test/Src/MvcViewFileGeneratorTests.cs @@ -45,16 +45,6 @@ namespace AspNet.Mvc.Tests generator.TemplateLanguage = MvcTextTemplateLanguage.CSharp; } - void SelectAspxTemplate() - { - generator.TemplateType = MvcTextTemplateType.Aspx; - } - - void SelectRazorTemplate() - { - generator.TemplateType = MvcTextTemplateType.Razor; - } - void GenerateFile() { GenerateFile(@"d:\projects\myproject\Views\Home", "Index"); @@ -79,6 +69,13 @@ namespace AspNet.Mvc.Tests generator.GenerateFile(fileName); } + MvcViewTextTemplate CreateViewTemplate(string fileName) + { + return new MvcViewTextTemplate() { + FileName = fileName + }; + } + [Test] public void GenerateFile_CSharpEmptyViewTemplate_MvcTextTemplateHostIsCreated() { @@ -106,7 +103,6 @@ namespace AspNet.Mvc.Tests { CreateGenerator(); ProjectPassedToGeneratorIsCSharpProject(); - SelectAspxTemplate(); string viewFolder = @"d:\projects\MyProject\Views\Home"; string viewName = "Index"; @@ -119,24 +115,6 @@ namespace AspNet.Mvc.Tests Assert.AreEqual(expectedOutputFileGenerated, outputFileGenerated); } - [Test] - public void GenerateFile_CSharpEmptyAspxViewTemplate_TemplateFileUsedIsIsCSharpEmptyAspxViewTemplate() - { - string templateRootDirectory = @"d:\SharpDev\AddIns\AspNet.Mvc"; - CreateTemplateRepository(templateRootDirectory); - CreateGenerator(templateRepository); - ProjectPassedToGeneratorIsCSharpProject(); - SelectAspxTemplate(); - - GenerateFile(); - - string inputFileName = fakeHost.InputFilePassedToProcessTemplate; - string expectedInputFileName = - @"d:\SharpDev\AddIns\AspNet.Mvc\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\Empty.tt"; - - Assert.AreEqual(expectedInputFileName, inputFileName); - } - [Test] public void GenerateFile_CSharpEmptyViewTemplate_MvcTextTemplateHostViewNameIsSet() { @@ -150,24 +128,6 @@ namespace AspNet.Mvc.Tests Assert.AreEqual("About", fakeHost.ViewName); } - [Test] - public void GenerateFile_CSharpEmptyRazorViewTemplate_TemplateFileUsedIsIsCSharpRazorEmptyViewTemplate() - { - string templateRootDirectory = @"d:\SharpDev\AddIns\AspNet.Mvc"; - CreateTemplateRepository(templateRootDirectory); - CreateGenerator(templateRepository); - ProjectPassedToGeneratorIsCSharpProject(); - SelectRazorTemplate(); - - GenerateFile(); - - string inputFileName = fakeHost.InputFilePassedToProcessTemplate; - string expectedInputFileName = - @"d:\SharpDev\AddIns\AspNet.Mvc\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\Empty.tt"; - - Assert.AreEqual(expectedInputFileName, inputFileName); - } - [Test] public void GenerateFile_IsPartialViewIsTrue_MvcTextTemplateHostIsPartialViewIsSetToTrue() { @@ -201,7 +161,6 @@ namespace AspNet.Mvc.Tests { CreateGenerator(); ProjectPassedToGeneratorIsCSharpProject(); - SelectAspxTemplate(); string viewFolder = @"d:\projects\MyProject\Views\Home"; string viewName = "Index"; @@ -221,7 +180,6 @@ namespace AspNet.Mvc.Tests { CreateGenerator(); ProjectPassedToGeneratorIsCSharpProject(); - SelectAspxTemplate(); generator.ModelClassName = "MyNamespace.MyModel"; GenerateFile(); @@ -294,5 +252,20 @@ namespace AspNet.Mvc.Tests Assert.AreEqual("MainContent", id); } + + [Test] + public void GenerateFile_MvcViewTextTemplateSet_MvcViewTextTemplateUsedWhenGeneratingFile() + { + CreateGenerator(); + ProjectPassedToGeneratorIsCSharpProject(); + string expectedFileName = @"d:\templates\controller.tt"; + MvcViewTextTemplate template = CreateViewTemplate(expectedFileName); + generator.Template = template; + GenerateFile(); + + string fileName = fakeHost.InputFilePassedToProcessTemplate; + + Assert.AreEqual(expectedFileName, fileName); + } } }