Browse Source

Add Visual Basic T4 templates for a basic ASP.NET MVC controller and view page.

pull/18/head
Matt Ward 14 years ago
parent
commit
b2b5c4ac02
  1. 11
      src/AddIns/BackendBindings/AspNet.Mvc/Project/AspNet.Mvc.csproj
  2. 20
      src/AddIns/BackendBindings/AspNet.Mvc/Project/ItemTemplates/VisualBasic/CodeTemplates/AddController/Controller.tt
  3. 18
      src/AddIns/BackendBindings/AspNet.Mvc/Project/ItemTemplates/VisualBasic/CodeTemplates/AddView/AspxVisualBasic/Empty.tt
  4. 22
      src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/AddMvcControllerToProjectViewModel.cs
  5. 62
      src/AddIns/BackendBindings/AspNet.Mvc/Test/Src/AddMvcControllerToProjectViewModelTests.cs
  6. 14
      src/AddIns/BackendBindings/AspNet.Mvc/Test/Src/MvcControllerFileGeneratorTests.cs

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

@ -99,6 +99,11 @@ @@ -99,6 +99,11 @@
<Folder Include="ItemTemplates\CSharp\CodeTemplates\AddView" />
<Folder Include="ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp" />
<Folder Include="ItemTemplates\CSharp\CodeTemplates\AddController" />
<Folder Include="ItemTemplates\VisualBasic" />
<Folder Include="ItemTemplates\VisualBasic\CodeTemplates" />
<Folder Include="ItemTemplates\VisualBasic\CodeTemplates\AddView" />
<Folder Include="ItemTemplates\VisualBasic\CodeTemplates\AddView\AspxVisualBasic" />
<Folder Include="ItemTemplates\VisualBasic\CodeTemplates\AddController" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\..\..\Main\Base\Project\ICSharpCode.SharpDevelop.csproj">
@ -133,6 +138,12 @@ @@ -133,6 +138,12 @@
<None Include="ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\Empty.tt">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Include="ItemTemplates\VisualBasic\CodeTemplates\AddController\Controller.tt">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Include="ItemTemplates\VisualBasic\CodeTemplates\AddView\AspxVisualBasic\Empty.tt">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
</ItemGroup>
<ItemGroup>
<Page Include="Src\AddMvcControllerToProjectView.xaml" />

20
src/AddIns/BackendBindings/AspNet.Mvc/Project/ItemTemplates/VisualBasic/CodeTemplates/AddController/Controller.tt

@ -0,0 +1,20 @@ @@ -0,0 +1,20 @@
<#@ template language="VB" HostSpecific="true" #>
<#@ output extension=".vb" #>
<#
Dim mvcHost As MvcTextTemplateHost = DirectCast(Host, MvcTextTemplateHost)
#>
Imports System
Imports System.Web.Mvc
Namespace <#= mvcHost.Namespace #>
''' <summary>
''' Description of <#= mvcHost.ControllerName #>.
''' </summary>
Public Class <#= mvcHost.ControllerName #>
Inherits Controller
Function Index() As ActionResult
Return View()
End Function
End Class
End Namespace

18
src/AddIns/BackendBindings/AspNet.Mvc/Project/ItemTemplates/VisualBasic/CodeTemplates/AddView/AspxVisualBasic/Empty.tt

@ -0,0 +1,18 @@ @@ -0,0 +1,18 @@
<#@ template language="VB" HostSpecific="true" #>
<#@ output extension=".aspx" #>
<#
Dim mvcHost As MvcTextTemplateHost = DirectCast(Host, MvcTextTemplateHost)
#>
<%@ Page Language="VB" Inherits="System.Web.Mvc.ViewPage" %>
<!DOCTYPE html>
<html>
<head runat="server">
<title><#= mvcHost.ViewName #></title>
</head>
<body>
<div id="page">
</div>
</body>
</html>

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

@ -31,11 +31,25 @@ namespace ICSharpCode.AspNet.Mvc @@ -31,11 +31,25 @@ namespace ICSharpCode.AspNet.Mvc
this.selectedControllerFolder = selectedControllerFolder;
this.controllerGenerator = controllerGenerator;
this.fileService = fileService;
this.controllerFileName.Folder = selectedControllerFolder.Path;
SetLanguageForFileGeneration();
CreateCommands();
}
void SetLanguageForFileGeneration()
{
MvcTextTemplateLanguage language = GetTemplateLanguage();
controllerFileName.Language = language;
controllerGenerator.Language = language;
}
MvcTextTemplateLanguage GetTemplateLanguage()
{
return selectedControllerFolder.GetTemplateLanguage();
}
void CreateCommands()
{
AddMvcControllerCommand = new DelegateCommand(param => AddMvcController(), param => CanAddMvcController());
@ -77,15 +91,9 @@ namespace ICSharpCode.AspNet.Mvc @@ -77,15 +91,9 @@ namespace ICSharpCode.AspNet.Mvc
void ConfigureMvcControllerGenerator()
{
controllerGenerator.Language = GetTemplateLanguage();
controllerGenerator.Project = selectedControllerFolder.Project;
}
MvcTextTemplateLanguage GetTemplateLanguage()
{
return selectedControllerFolder.GetTemplateLanguage();
}
void AddMvcControllerFileToProject()
{
string fileName = controllerFileName.GetFileName();

62
src/AddIns/BackendBindings/AspNet.Mvc/Test/Src/AddMvcControllerToProjectViewModelTests.cs

@ -19,16 +19,26 @@ namespace AspNet.Mvc.Tests @@ -19,16 +19,26 @@ namespace AspNet.Mvc.Tests
List<string> propertyChangedEvents;
FakeMvcFileService fakeFileService;
void CreateViewModel()
void CreateViewModelWithCSharpProject()
{
string path = @"d:\projects\MyAspMvcProject\Controllers";
CreateViewModelWithControllerFolderPath(path);
CreateViewModelWithControllerFolderPath(path, MvcTextTemplateLanguage.CSharp, "C#");
}
void CreateViewModelWithControllerFolderPath(string path)
void CreateViewModelWithVisualBasicProject()
{
string path = @"d:\projects\MyAspMvcProject\Controllers";
CreateViewModelWithControllerFolderPath(path, MvcTextTemplateLanguage.VisualBasic, "VBNet");
}
void CreateViewModelWithControllerFolderPath(
string path,
MvcTextTemplateLanguage language,
string projectLanguage)
{
fakeSelectedMvcControllerFolder = new FakeSelectedMvcFolder();
fakeSelectedMvcControllerFolder.TemplateLanguage = MvcTextTemplateLanguage.CSharp;
fakeSelectedMvcControllerFolder.TemplateLanguage = language;
fakeSelectedMvcControllerFolder.ProjectLanguage = projectLanguage;
fakeSelectedMvcControllerFolder.Path = path;
fakeControllerGenerator = new FakeMvcControllerFileGenerator();
fakeFileService = new FakeMvcFileService();
@ -46,8 +56,8 @@ namespace AspNet.Mvc.Tests @@ -46,8 +56,8 @@ namespace AspNet.Mvc.Tests
[Test]
public void AddMvcControllerCommand_ExecutedWhenControllerNameSpecified_MvcControllerIsGenerated()
{
CreateViewModel();
{
CreateViewModelWithCSharpProject();
viewModel.ControllerName = "MyControllerPage";
viewModel.AddMvcControllerCommand.Execute(null);
@ -59,8 +69,9 @@ namespace AspNet.Mvc.Tests @@ -59,8 +69,9 @@ namespace AspNet.Mvc.Tests
[Test]
public void AddMvcController_ControllerNameAndControllerFolderSpecified_ControllerFullPathUsedToGenerateFile()
{
CreateViewModelWithControllerFolderPath(@"d:\projects\MyProject\Controllers");
fakeSelectedMvcControllerFolder.TemplateLanguage = MvcTextTemplateLanguage.CSharp;
CreateViewModelWithControllerFolderPath(
@"d:\projects\MyProject\Controllers",
MvcTextTemplateLanguage.CSharp, "C#");
viewModel.ControllerName = "Home";
viewModel.AddMvcController();
@ -74,7 +85,7 @@ namespace AspNet.Mvc.Tests @@ -74,7 +85,7 @@ namespace AspNet.Mvc.Tests
[Test]
public void AddMvcController_SelectedControllerFolderIsInVisualBasicProject_VisualBasicMvcControllerFileGenerated()
{
CreateViewModel();
CreateViewModelWithVisualBasicProject();
fakeSelectedMvcControllerFolder.TemplateLanguage = MvcTextTemplateLanguage.VisualBasic;
viewModel.AddMvcController();
@ -86,8 +97,7 @@ namespace AspNet.Mvc.Tests @@ -86,8 +97,7 @@ namespace AspNet.Mvc.Tests
[Test]
public void AddMvcController_SelectedControllerFolderIsInCSharpProject_CSharpMvcControllerFileGenerated()
{
CreateViewModel();
fakeSelectedMvcControllerFolder.TemplateLanguage = MvcTextTemplateLanguage.CSharp;
CreateViewModelWithCSharpProject();
viewModel.AddMvcController();
MvcTextTemplateLanguage templateLanguage = fakeControllerGenerator.Language;
@ -98,7 +108,7 @@ namespace AspNet.Mvc.Tests @@ -98,7 +108,7 @@ namespace AspNet.Mvc.Tests
[Test]
public void AddMvcController_SelectedControllerFolderIsInVisualBasicProject_VisualBasicProjectIsPassedToMvcControllerGenerator()
{
CreateViewModel();
CreateViewModelWithCSharpProject();
fakeSelectedMvcControllerFolder.ProjectLanguage = "VBNet";
viewModel.AddMvcController();
@ -111,7 +121,7 @@ namespace AspNet.Mvc.Tests @@ -111,7 +121,7 @@ namespace AspNet.Mvc.Tests
[Test]
public void AddMvcController_FileIsGenerated_FileIsAddedToProject()
{
CreateViewModel();
CreateViewModelWithCSharpProject();
viewModel.ControllerName = "Home";
fakeSelectedMvcControllerFolder.ProjectLanguage = "C#";
fakeSelectedMvcControllerFolder.TemplateLanguage = MvcTextTemplateLanguage.CSharp;
@ -127,7 +137,7 @@ namespace AspNet.Mvc.Tests @@ -127,7 +137,7 @@ namespace AspNet.Mvc.Tests
[Test]
public void AddMvcController_FileIsGenerated_WindowIsClosed()
{
CreateViewModel();
CreateViewModelWithCSharpProject();
viewModel.AddMvcController();
bool closed = viewModel.IsClosed;
@ -138,7 +148,7 @@ namespace AspNet.Mvc.Tests @@ -138,7 +148,7 @@ namespace AspNet.Mvc.Tests
[Test]
public void IsClosed_MvcControllerFileIsNotGenerated_ReturnsFalse()
{
CreateViewModel();
CreateViewModelWithCSharpProject();
bool closed = viewModel.IsClosed;
Assert.IsFalse(closed);
@ -147,7 +157,7 @@ namespace AspNet.Mvc.Tests @@ -147,7 +157,7 @@ namespace AspNet.Mvc.Tests
[Test]
public void AddMvcController_FileIsGenerated_PropertyChangedEventIsFiredForIsClosedProperty()
{
CreateViewModel();
CreateViewModelWithCSharpProject();
MonitorPropertyChangedEvents();
viewModel.AddMvcController();
@ -159,7 +169,7 @@ namespace AspNet.Mvc.Tests @@ -159,7 +169,7 @@ namespace AspNet.Mvc.Tests
[Test]
public void AddMvcController_FileIsGenerated_FileIsOpened()
{
CreateViewModel();
CreateViewModelWithCSharpProject();
viewModel.ControllerName = "HomeController";
fakeSelectedMvcControllerFolder.ProjectLanguage = "C#";
fakeSelectedMvcControllerFolder.TemplateLanguage = MvcTextTemplateLanguage.CSharp;
@ -175,7 +185,7 @@ namespace AspNet.Mvc.Tests @@ -175,7 +185,7 @@ namespace AspNet.Mvc.Tests
[Test]
public void AddMvcControllerCommand_ControllerNameIsEmptyString_CommandIsDisabled()
{
CreateViewModel();
CreateViewModelWithCSharpProject();
viewModel.ControllerName = String.Empty;
bool canExecute = viewModel.AddMvcControllerCommand.CanExecute(null);
@ -186,12 +196,26 @@ namespace AspNet.Mvc.Tests @@ -186,12 +196,26 @@ namespace AspNet.Mvc.Tests
[Test]
public void AddMvcControllerCommand_ControllerNameIsNotEmptyString_CommandIsEnable()
{
CreateViewModel();
CreateViewModelWithCSharpProject();
viewModel.ControllerName = "MyController";
bool canExecute = viewModel.AddMvcControllerCommand.CanExecute(null);
Assert.IsTrue(canExecute);
}
[Test]
public void AddMvcController_VisualBasicProject_VisualBasicFileIsGenerated()
{
CreateViewModelWithVisualBasicProject();
viewModel.ControllerName = "HomeController";
fakeSelectedMvcControllerFolder.Path = @"d:\projects\MyAspMvcProject\Controllers";
viewModel.AddMvcController();
string fileNameOpened = fakeFileService.FileNamePassedToOpenFile;
string expectedFileNameOpened = @"d:\projects\MyAspMvcProject\Controllers\HomeController.vb";
Assert.AreEqual(expectedFileNameOpened, fileNameOpened);
}
}
}

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

@ -42,7 +42,13 @@ namespace AspNet.Mvc.Tests @@ -42,7 +42,13 @@ namespace AspNet.Mvc.Tests
void ProjectPassedToGeneratorIsCSharpProject()
{
projectUsedByGenerator.SetLanguage("C#");
generator.Language = MvcTextTemplateLanguage.CSharp;
generator.Language = MvcTextTemplateLanguage.CSharp;
}
void ProjectPassedToGeneratorIsVisualBasicProject()
{
projectUsedByGenerator.SetLanguage("VBNet");
generator.Language = MvcTextTemplateLanguage.VisualBasic;
}
void GenerateFile()
@ -64,7 +70,7 @@ namespace AspNet.Mvc.Tests @@ -64,7 +70,7 @@ namespace AspNet.Mvc.Tests
}
[Test]
public void GenerateFile_CSharpEmptyViewTemplate_MvcTextTemplateHostIsCreated()
public void GenerateFile_CSharpControllerTemplate_MvcTextTemplateHostIsCreated()
{
CreateGenerator();
ProjectPassedToGeneratorIsCSharpProject();
@ -75,7 +81,7 @@ namespace AspNet.Mvc.Tests @@ -75,7 +81,7 @@ namespace AspNet.Mvc.Tests
}
[Test]
public void GenerateFile_CSharpEmptyViewTemplate_MvcTextTemplateHostIsDisposed()
public void GenerateFile_CSharpControllerTemplate_MvcTextTemplateHostIsDisposed()
{
CreateGenerator();
ProjectPassedToGeneratorIsCSharpProject();
@ -86,7 +92,7 @@ namespace AspNet.Mvc.Tests @@ -86,7 +92,7 @@ namespace AspNet.Mvc.Tests
}
[Test]
public void GenerateFile_CSharpEmptyControllerTemplate_OutputFileGeneratedUsingFileNamePassedToGenerator()
public void GenerateFile_CSharpControllerTemplate_OutputFileGeneratedUsingFileNamePassedToGenerator()
{
CreateGenerator();
ProjectPassedToGeneratorIsCSharpProject();

Loading…
Cancel
Save