Browse Source

Generate MVC views in the Add MVC View dialog from on the selected T4 template.

pull/18/head
Matt Ward 15 years ago
parent
commit
c2a76915b1
  1. 3
      src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/AddMvcViewToProjectViewModel.cs
  2. 3
      src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/IMvcViewFileGenerator.cs
  3. 15
      src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/MvcViewFileGenerator.cs
  4. 3
      src/AddIns/BackendBindings/AspNet.Mvc/Test/Helpers/FakeMvcViewFileGenerator.cs
  5. 51
      src/AddIns/BackendBindings/AspNet.Mvc/Test/Src/AddMvcViewToProjectViewModelTests.cs
  6. 71
      src/AddIns/BackendBindings/AspNet.Mvc/Test/Src/MvcViewFileGeneratorTests.cs

3
src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/AddMvcViewToProjectViewModel.cs

@ -232,8 +232,7 @@ namespace ICSharpCode.AspNet.Mvc @@ -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()

3
src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/IMvcViewFileGenerator.cs

@ -8,13 +8,12 @@ namespace ICSharpCode.AspNet.Mvc @@ -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);
}

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

@ -27,13 +27,14 @@ namespace ICSharpCode.AspNet.Mvc @@ -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 @@ -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;
}
}
}

3
src/AddIns/BackendBindings/AspNet.Mvc/Test/Helpers/FakeMvcViewFileGenerator.cs

@ -9,13 +9,12 @@ namespace AspNet.Mvc.Tests.Helpers @@ -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;

51
src/AddIns/BackendBindings/AspNet.Mvc/Test/Src/AddMvcViewToProjectViewModelTests.cs

@ -133,27 +133,18 @@ namespace AspNet.Mvc.Tests @@ -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 @@ -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()
{

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

@ -45,16 +45,6 @@ namespace AspNet.Mvc.Tests @@ -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 @@ -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 @@ -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 @@ -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 @@ -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 @@ -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 @@ -221,7 +180,6 @@ namespace AspNet.Mvc.Tests
{
CreateGenerator();
ProjectPassedToGeneratorIsCSharpProject();
SelectAspxTemplate();
generator.ModelClassName = "MyNamespace.MyModel";
GenerateFile();
@ -294,5 +252,20 @@ namespace AspNet.Mvc.Tests @@ -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);
}
}
}

Loading…
Cancel
Save