Browse Source

Generate Razor or ASPX view files based on selected view engine in Add MVC View dialog.

pull/18/head
Matt Ward 15 years ago
parent
commit
c30bbb4a75
  1. 17
      src/AddIns/BackendBindings/AspNet.Mvc/Project/AspNet.Mvc.csproj
  2. 2
      src/AddIns/BackendBindings/AspNet.Mvc/Project/ItemTemplates/CSharp/CodeTemplates/AddView/AspxCSharp/Empty.tt
  3. 17
      src/AddIns/BackendBindings/AspNet.Mvc/Project/ItemTemplates/CSharp/CodeTemplates/AddView/CSHTML/Empty.tt
  4. 2
      src/AddIns/BackendBindings/AspNet.Mvc/Project/ItemTemplates/VisualBasic/CodeTemplates/AddView/AspxVisualBasic/Empty.tt
  5. 17
      src/AddIns/BackendBindings/AspNet.Mvc/Project/ItemTemplates/VisualBasic/CodeTemplates/AddView/VBHTML/Empty.tt
  6. 2
      src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/AddMvcControllerToProjectView.xaml
  7. 2
      src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/AddMvcControllerToProjectViewModel.cs
  8. 50
      src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/AddMvcViewToProjectView.xaml
  9. 50
      src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/AddMvcViewToProjectViewModel.cs
  10. 2
      src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/IMvcControllerFileGenerator.cs
  11. 3
      src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/IMvcViewFileGenerator.cs
  12. 27
      src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/MvcAddViewTextTemplateFolder.cs
  13. 12
      src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/MvcControllerFileGenerator.cs
  14. 2
      src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/MvcControllerFileName.cs
  15. 12
      src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/MvcControllerTextTemplateFileName.cs
  16. 2
      src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/MvcFileGenerator.cs
  17. 35
      src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/MvcTextTemplateCriteria.cs
  18. 34
      src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/MvcTextTemplateFileName.cs
  19. 36
      src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/MvcTextTemplateFileNameExtension.cs
  20. 20
      src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/MvcTextTemplateLanguageExtensions.cs
  21. 12
      src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/MvcTextTemplateRepository.cs
  22. 11
      src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/MvcTextTemplateType.cs
  23. 20
      src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/MvcTextTemplateTypeExtensions.cs
  24. 49
      src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/MvcTextTemplateTypeFolderName.cs
  25. 14
      src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/MvcViewFileGenerator.cs
  26. 11
      src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/MvcViewFileName.cs
  27. 13
      src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/MvcViewTextTemplateFileName.cs
  28. 21
      src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/MvcViewTypeViewModel.cs
  29. 3
      src/AddIns/BackendBindings/AspNet.Mvc/Test/AspNet.Mvc.Tests.csproj
  30. 2
      src/AddIns/BackendBindings/AspNet.Mvc/Test/Helpers/FakeMvcControllerFileGenerator.cs
  31. 3
      src/AddIns/BackendBindings/AspNet.Mvc/Test/Helpers/FakeMvcViewFileGenerator.cs
  32. 4
      src/AddIns/BackendBindings/AspNet.Mvc/Test/Src/AddMvcControllerToProjectViewModelTests.cs
  33. 157
      src/AddIns/BackendBindings/AspNet.Mvc/Test/Src/AddMvcViewToProjectViewModelTests.cs
  34. 4
      src/AddIns/BackendBindings/AspNet.Mvc/Test/Src/MvcControllerFileGeneratorTests.cs
  35. 89
      src/AddIns/BackendBindings/AspNet.Mvc/Test/Src/MvcTextTemplateRepositoryTests.cs
  36. 36
      src/AddIns/BackendBindings/AspNet.Mvc/Test/Src/MvcViewFileGeneratorTests.cs
  37. 36
      src/AddIns/BackendBindings/AspNet.Mvc/Test/Src/MvcViewFileNameTests.cs

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

@ -71,22 +71,29 @@
<Compile Include="Src\IsMvcControllerFolderSelectedConditionEvaluator.cs" /> <Compile Include="Src\IsMvcControllerFolderSelectedConditionEvaluator.cs" />
<Compile Include="Src\IsMvcViewFolderSelectedConditionEvaluator.cs" /> <Compile Include="Src\IsMvcViewFolderSelectedConditionEvaluator.cs" />
<Compile Include="Configuration\AssemblyInfo.cs" /> <Compile Include="Configuration\AssemblyInfo.cs" />
<Compile Include="Src\MvcAddViewTextTemplateFolder.cs" />
<Compile Include="Src\MvcControllerFileGenerator.cs" /> <Compile Include="Src\MvcControllerFileGenerator.cs" />
<Compile Include="Src\MvcControllerFileName.cs" /> <Compile Include="Src\MvcControllerFileName.cs" />
<Compile Include="Src\MvcControllerTextTemplateFileName.cs" /> <Compile Include="Src\MvcControllerTextTemplateFileName.cs" />
<Compile Include="Src\MvcFileGenerator.cs" /> <Compile Include="Src\MvcFileGenerator.cs" />
<Compile Include="Src\MvcFileName.cs" /> <Compile Include="Src\MvcFileName.cs" />
<Compile Include="Src\MvcFileService.cs" /> <Compile Include="Src\MvcFileService.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\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" />
<Compile Include="Src\MvcTextTemplateLanguageFileNameExtension.cs" /> <Compile Include="Src\MvcTextTemplateLanguageExtensions.cs" />
<Compile Include="Src\MvcTextTemplateFileNameExtension.cs" />
<Compile Include="Src\MvcTextTemplateRepository.cs" /> <Compile Include="Src\MvcTextTemplateRepository.cs" />
<Compile Include="Src\MvcTextTemplateType.cs" />
<Compile Include="Src\MvcTextTemplateTypeExtensions.cs" />
<Compile Include="Src\MvcTextTemplateTypeFolderName.cs" />
<Compile Include="Src\MvcViewFileName.cs" /> <Compile Include="Src\MvcViewFileName.cs" />
<Compile Include="Src\MvcViewFileGenerator.cs" /> <Compile Include="Src\MvcViewFileGenerator.cs" />
<Compile Include="Src\MvcViewTextTemplateFileName.cs" /> <Compile Include="Src\MvcViewTextTemplateFileName.cs" />
<Compile Include="Src\MvcViewTypeViewModel.cs" />
<Compile Include="Src\SelectedMvcControllerFolder.cs" /> <Compile Include="Src\SelectedMvcControllerFolder.cs" />
<Compile Include="Src\SelectedMvcFolder.cs" /> <Compile Include="Src\SelectedMvcFolder.cs" />
<Compile Include="Src\SelectedMvcViewFolder.cs" /> <Compile Include="Src\SelectedMvcViewFolder.cs" />
@ -99,11 +106,13 @@
<Folder Include="ItemTemplates\CSharp\CodeTemplates\AddView" /> <Folder Include="ItemTemplates\CSharp\CodeTemplates\AddView" />
<Folder Include="ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp" /> <Folder Include="ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp" />
<Folder Include="ItemTemplates\CSharp\CodeTemplates\AddController" /> <Folder Include="ItemTemplates\CSharp\CodeTemplates\AddController" />
<Folder Include="ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML" />
<Folder Include="ItemTemplates\VisualBasic" /> <Folder Include="ItemTemplates\VisualBasic" />
<Folder Include="ItemTemplates\VisualBasic\CodeTemplates" /> <Folder Include="ItemTemplates\VisualBasic\CodeTemplates" />
<Folder Include="ItemTemplates\VisualBasic\CodeTemplates\AddView" /> <Folder Include="ItemTemplates\VisualBasic\CodeTemplates\AddView" />
<Folder Include="ItemTemplates\VisualBasic\CodeTemplates\AddView\AspxVisualBasic" /> <Folder Include="ItemTemplates\VisualBasic\CodeTemplates\AddView\AspxVisualBasic" />
<Folder Include="ItemTemplates\VisualBasic\CodeTemplates\AddController" /> <Folder Include="ItemTemplates\VisualBasic\CodeTemplates\AddController" />
<Folder Include="ItemTemplates\VisualBasic\CodeTemplates\AddView\VBHTML" />
<Folder Include="Resources" /> <Folder Include="Resources" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
@ -139,6 +148,9 @@
<None Include="ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\Empty.tt"> <None Include="ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\Empty.tt">
<CopyToOutputDirectory>Always</CopyToOutputDirectory> <CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None> </None>
<None Include="ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\Empty.tt">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Include="ItemTemplates\VisualBasic\CodeTemplates\AddController\Controller.tt"> <None Include="ItemTemplates\VisualBasic\CodeTemplates\AddController\Controller.tt">
<CopyToOutputDirectory>Always</CopyToOutputDirectory> <CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None> </None>
@ -147,6 +159,9 @@
</None> </None>
<EmbeddedResource Include="Resources\CSharpRazor.xshd" /> <EmbeddedResource Include="Resources\CSharpRazor.xshd" />
<EmbeddedResource Include="Resources\VisualBasicRazor.xshd" /> <EmbeddedResource Include="Resources\VisualBasicRazor.xshd" />
<None Include="ItemTemplates\VisualBasic\CodeTemplates\AddView\VBHTML\Empty.tt">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Page Include="Src\AddMvcControllerToProjectView.xaml" /> <Page Include="Src\AddMvcControllerToProjectView.xaml" />

2
src/AddIns/BackendBindings/AspNet.Mvc/Project/ItemTemplates/CSharp/CodeTemplates/AddView/AspxCSharp/Empty.tt

@ -11,7 +11,7 @@
<title><#= mvcHost.ViewName #></title> <title><#= mvcHost.ViewName #></title>
</head> </head>
<body> <body>
<div id="page"> <div>
</div> </div>
</body> </body>

17
src/AddIns/BackendBindings/AspNet.Mvc/Project/ItemTemplates/CSharp/CodeTemplates/AddView/CSHTML/Empty.tt

@ -0,0 +1,17 @@
<#@ template language="C#" HostSpecific="true" #>
<#@ output extension=".cshtml" #>
<#
MvcTextTemplateHost mvcHost = (MvcTextTemplateHost)Host;
#>
<!DOCTYPE html>
<html>
<head>
<title><#= mvcHost.ViewName #></title>
</head>
<body>
<div>
</div>
</body>
</html>

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

@ -11,7 +11,7 @@
<title><#= mvcHost.ViewName #></title> <title><#= mvcHost.ViewName #></title>
</head> </head>
<body> <body>
<div id="page"> <div>
</div> </div>
</body> </body>

17
src/AddIns/BackendBindings/AspNet.Mvc/Project/ItemTemplates/VisualBasic/CodeTemplates/AddView/VBHTML/Empty.tt

@ -0,0 +1,17 @@
<#@ template language="VB" HostSpecific="true" #>
<#@ output extension=".vbhtml" #>
<#
Dim mvcHost As MvcTextTemplateHost = DirectCast(Host, MvcTextTemplateHost)
#>
<!DOCTYPE html>
<html>
<head>
<title><#= mvcHost.ViewName #></title>
</head>
<body>
<div>
</div>
</body>
</html>

2
src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/AddMvcControllerToProjectView.xaml

@ -5,7 +5,7 @@
xmlns:mvc="clr-namespace:ICSharpCode.AspNet.Mvc" xmlns:mvc="clr-namespace:ICSharpCode.AspNet.Mvc"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Add Controller" Title="Add Controller"
Style="{x:Static core:GlobalStyles.DialogWindowStyle}" Style="{x:Static core:GlobalStyles.DialogWindowStyle}"
mvc:CloseWindowBehaviour.IsClosed="{Binding IsClosed}" mvc:CloseWindowBehaviour.IsClosed="{Binding IsClosed}"
WindowStartupLocation="CenterOwner" WindowStartupLocation="CenterOwner"
FocusManager.FocusedElement="{Binding ElementName=ControllerNameTextBox}" FocusManager.FocusedElement="{Binding ElementName=ControllerNameTextBox}"

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

@ -42,7 +42,7 @@ namespace ICSharpCode.AspNet.Mvc
{ {
MvcTextTemplateLanguage language = GetTemplateLanguage(); MvcTextTemplateLanguage language = GetTemplateLanguage();
controllerFileName.Language = language; controllerFileName.Language = language;
controllerGenerator.Language = language; controllerGenerator.TemplateLanguage = language;
} }
MvcTextTemplateLanguage GetTemplateLanguage() MvcTextTemplateLanguage GetTemplateLanguage()

50
src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/AddMvcViewToProjectView.xaml

@ -5,7 +5,7 @@
xmlns:mvc="clr-namespace:ICSharpCode.AspNet.Mvc" xmlns:mvc="clr-namespace:ICSharpCode.AspNet.Mvc"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Add View" Title="Add View"
Style="{x:Static core:GlobalStyles.DialogWindowStyle}" Style="{x:Static core:GlobalStyles.DialogWindowStyle}"
mvc:CloseWindowBehaviour.IsClosed="{Binding IsClosed}" mvc:CloseWindowBehaviour.IsClosed="{Binding IsClosed}"
WindowStartupLocation="CenterOwner" WindowStartupLocation="CenterOwner"
FocusManager.FocusedElement="{Binding ElementName=ViewNameTextBox}" FocusManager.FocusedElement="{Binding ElementName=ViewNameTextBox}"
@ -14,36 +14,52 @@
<Window.Resources> <Window.Resources>
<Style TargetType="Button" BasedOn="{x:Static core:GlobalStyles.ButtonStyle}"/> <Style TargetType="Button" BasedOn="{x:Static core:GlobalStyles.ButtonStyle}"/>
<DataTemplate x:Key="ViewEngineTemplate">
<TextBlock Text="{Binding Name}"/>
</DataTemplate>
</Window.Resources> </Window.Resources>
<Grid> <Grid>
<Grid.RowDefinitions> <Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/> <RowDefinition Height="Auto"/>
<RowDefinition Height="*"/> <RowDefinition Height="*"/>
<RowDefinition Height="Auto"/> <RowDefinition Height="Auto"/>
</Grid.RowDefinitions> </Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Grid> <TextBlock
<Grid.ColumnDefinitions> Margin="4"
<ColumnDefinition Width="Auto"/> Text="View Name:"/>
<ColumnDefinition Width="*"/> <TextBox
</Grid.ColumnDefinitions> x:Name="ViewNameTextBox"
Grid.Column="1"
<TextBlock Margin="2"
Margin="4" Text="{Binding Path=ViewName, UpdateSourceTrigger=PropertyChanged}"/>
FontWeight="Bold"
Text="View Name:"/>
<TextBox
x:Name="ViewNameTextBox"
Grid.Column="1"
Text="{Binding Path=ViewName, UpdateSourceTrigger=PropertyChanged}"/>
</Grid>
<TextBlock
Grid.Row="1"
Margin="4"
Text="View Engine:"/>
<ComboBox
Margin="2"
Grid.Row="1"
Grid.Column="1"
ItemsSource="{Binding Path=ViewEngines}"
ItemTemplate="{StaticResource ViewEngineTemplate}"
SelectedItem="{Binding Path=SelectedViewEngine}"/>
<StackPanel <StackPanel
Orientation="Horizontal" Orientation="Horizontal"
HorizontalAlignment="Right" HorizontalAlignment="Right"
Margin="4" Margin="4"
Grid.Row="2"> Grid.ColumnSpan="2"
Grid.Row="3">
<Button <Button
Margin="2, 0" Margin="2, 0"
Content="_Add" Content="_Add"

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

@ -2,6 +2,7 @@
// 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.Collections.Generic;
using System.IO; using System.IO;
using System.Windows.Input; using System.Windows.Input;
@ -14,6 +15,8 @@ namespace ICSharpCode.AspNet.Mvc
IMvcFileService fileService; IMvcFileService fileService;
MvcViewFileName viewFileName = new MvcViewFileName(); MvcViewFileName viewFileName = new MvcViewFileName();
bool closed; bool closed;
List<MvcViewEngineViewModel> viewEngines;
MvcViewEngineViewModel selectedViewEngine;
public AddMvcViewToProjectViewModel(ISelectedMvcFolder selectedViewFolder) public AddMvcViewToProjectViewModel(ISelectedMvcFolder selectedViewFolder)
: this( : this(
@ -34,6 +37,7 @@ namespace ICSharpCode.AspNet.Mvc
this.viewFileName.Folder = selectedViewFolder.Path; this.viewFileName.Folder = selectedViewFolder.Path;
CreateCommands(); CreateCommands();
AddViewEngines();
} }
void CreateCommands() void CreateCommands()
@ -56,6 +60,48 @@ namespace ICSharpCode.AspNet.Mvc
} }
} }
void AddViewEngines()
{
viewEngines = new List<MvcViewEngineViewModel>();
AddAspxViewEngine();
AddRazorViewEngine();
SelectAspxViewEngine();
}
void AddAspxViewEngine()
{
var viewType = new MvcViewEngineViewModel("ASPX", MvcTextTemplateType.Aspx);
AddViewEngine(viewType);
}
void AddRazorViewEngine()
{
var viewType = new MvcViewEngineViewModel("Razor", MvcTextTemplateType.Razor);
AddViewEngine(viewType);
}
void AddViewEngine(MvcViewEngineViewModel viewEngine)
{
viewEngines.Add(viewEngine);
}
void SelectAspxViewEngine()
{
SelectedViewEngine = viewEngines[0];
}
public IEnumerable<MvcViewEngineViewModel> ViewEngines {
get { return viewEngines; }
}
public MvcViewEngineViewModel SelectedViewEngine {
get { return selectedViewEngine; }
set {
selectedViewEngine = value;
viewFileName.TemplateType = selectedViewEngine.TemplateType;
}
}
public bool CanAddMvcView() public bool CanAddMvcView()
{ {
return viewFileName.HasValidViewName(); return viewFileName.HasValidViewName();
@ -72,13 +118,15 @@ namespace ICSharpCode.AspNet.Mvc
void GenerateMvcViewFile() void GenerateMvcViewFile()
{ {
ConfigureMvcViewGenerator(); ConfigureMvcViewGenerator();
viewFileName.TemplateLanguage = GetTemplateLanguage();
viewGenerator.GenerateFile(viewFileName); viewGenerator.GenerateFile(viewFileName);
} }
void ConfigureMvcViewGenerator() void ConfigureMvcViewGenerator()
{ {
viewGenerator.Language = GetTemplateLanguage();
viewGenerator.Project = selectedViewFolder.Project; viewGenerator.Project = selectedViewFolder.Project;
viewGenerator.TemplateLanguage = GetTemplateLanguage();
viewGenerator.TemplateType = selectedViewEngine.TemplateType;
} }
MvcTextTemplateLanguage GetTemplateLanguage() MvcTextTemplateLanguage GetTemplateLanguage()

2
src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/IMvcControllerFileGenerator.cs

@ -8,7 +8,7 @@ namespace ICSharpCode.AspNet.Mvc
{ {
public interface IMvcControllerFileGenerator public interface IMvcControllerFileGenerator
{ {
MvcTextTemplateLanguage Language { get; set; } MvcTextTemplateLanguage TemplateLanguage { get; set; }
IProject Project { get; set; } IProject Project { get; set; }
void GenerateFile(MvcControllerFileName fileName); void GenerateFile(MvcControllerFileName fileName);

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

@ -8,7 +8,8 @@ namespace ICSharpCode.AspNet.Mvc
{ {
public interface IMvcViewFileGenerator public interface IMvcViewFileGenerator
{ {
MvcTextTemplateLanguage Language { get; set; } MvcTextTemplateLanguage TemplateLanguage { get; set; }
MvcTextTemplateType TemplateType { get; set; }
IProject Project { get; set; } IProject Project { get; set; }
void GenerateFile(MvcViewFileName fileName); void GenerateFile(MvcViewFileName fileName);

27
src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/MvcAddViewTextTemplateFolder.cs

@ -0,0 +1,27 @@
// 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;
namespace ICSharpCode.AspNet.Mvc
{
public class MvcAddViewTextTemplateFolder
{
string name;
public MvcAddViewTextTemplateFolder(MvcTextTemplateCriteria criteria)
{
name = GetFolderName(criteria);
}
string GetFolderName(MvcTextTemplateCriteria criteria)
{
var templateTypeFolder = new MvcTextTemplateTypeFolder(criteria);
return "AddView\\" + templateTypeFolder.Name;
}
public string Name {
get { return name; }
}
}
}

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

@ -44,7 +44,17 @@ namespace ICSharpCode.AspNet.Mvc
protected override string GetTextTemplateFileName() protected override string GetTextTemplateFileName()
{ {
return textTemplateRepository.GetMvcControllerTextTemplateFileName(Language, "Controller"); MvcTextTemplateCriteria templateCriteria = GetTextTemplateCriteria();
return textTemplateRepository.GetMvcControllerTextTemplateFileName(templateCriteria);
}
MvcTextTemplateCriteria GetTextTemplateCriteria()
{
return new MvcTextTemplateCriteria() {
TemplateLanguage = TemplateLanguage,
TemplateName = "Controller",
TemplateType = MvcTextTemplateType.Aspx
};
} }
} }
} }

2
src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/MvcControllerFileName.cs

@ -41,7 +41,7 @@ namespace ICSharpCode.AspNet.Mvc
string GetFileExtension() string GetFileExtension()
{ {
return MvcTextTemplateLanguageFileNameExtension.GetFileExtension(Language); return MvcTextTemplateFileNameExtension.GetControllerFileExtension(Language);
} }
public bool HasValidControllerName() public bool HasValidControllerName()

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

@ -9,15 +9,15 @@ namespace ICSharpCode.AspNet.Mvc
public class MvcControllerTextTemplateFileName : MvcTextTemplateFileName public class MvcControllerTextTemplateFileName : MvcTextTemplateFileName
{ {
public MvcControllerTextTemplateFileName( public MvcControllerTextTemplateFileName(
string textTemplatesRootDirectory, string textTemplatesRootFolder,
MvcTextTemplateLanguage language, MvcTextTemplateCriteria templateCriteria)
string templateName) : base(textTemplatesRootFolder, templateCriteria)
: base(textTemplatesRootDirectory, language, templateName)
{ {
} }
protected override string LanguageSubdirectoryFormatString { protected override string GetCodeTemplatesSubFolder()
get { return "{0}\\CodeTemplates\\AddController"; } {
return "AddController";
} }
} }
} }

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

@ -16,7 +16,7 @@ namespace ICSharpCode.AspNet.Mvc
this.hostFactory = hostFactory; this.hostFactory = hostFactory;
} }
public MvcTextTemplateLanguage Language { get; set; } public MvcTextTemplateLanguage TemplateLanguage { get; set; }
public IProject Project { get; set; } public IProject Project { get; set; }
public void GenerateFile(MvcFileName fileName) public void GenerateFile(MvcFileName fileName)

35
src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/MvcTextTemplateCriteria.cs

@ -0,0 +1,35 @@
// 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;
namespace ICSharpCode.AspNet.Mvc
{
public class MvcTextTemplateCriteria
{
public MvcTextTemplateCriteria()
{
TemplateName = String.Empty;
}
public MvcTextTemplateLanguage TemplateLanguage { get; set; }
public string TemplateName { get; set; }
public MvcTextTemplateType TemplateType { get; set; }
public bool IsRazor {
get { return TemplateType == MvcTextTemplateType.Razor; }
}
public bool IsAspx {
get { return TemplateType == MvcTextTemplateType.Aspx; }
}
public bool IsVisualBasic {
get { return TemplateLanguage.IsVisualBasic(); }
}
public bool IsCSharp {
get { return TemplateLanguage.IsCSharp(); }
}
}
}

34
src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/MvcTextTemplateFileName.cs

@ -8,43 +8,43 @@ namespace ICSharpCode.AspNet.Mvc
{ {
public abstract class MvcTextTemplateFileName public abstract class MvcTextTemplateFileName
{ {
string textTemplatesRootDirectory; string textTemplatesRootFolder;
MvcTextTemplateLanguage language; MvcTextTemplateCriteria templateCriteria;
string templateName;
public MvcTextTemplateFileName( public MvcTextTemplateFileName(
string textTemplatesRootDirectory, string textTemplatesRootFolder,
MvcTextTemplateLanguage language, MvcTextTemplateCriteria templateCriteria)
string templateName)
{ {
this.textTemplatesRootDirectory = textTemplatesRootDirectory; this.textTemplatesRootFolder = textTemplatesRootFolder;
this.language = language; this.templateCriteria = templateCriteria;
this.templateName = templateName;
} }
public string GetPath() public string GetPath()
{ {
string fileName = GetTemplateFileName(); string fileName = GetTemplateFileName();
string directory = GetTemplateDirectory(language); string directory = GetTemplateFolder();
return Path.Combine(directory, fileName); return Path.Combine(directory, fileName);
} }
string GetTemplateFileName() string GetTemplateFileName()
{ {
return templateName + ".tt"; return templateCriteria.TemplateName + ".tt";
} }
string GetTemplateDirectory(MvcTextTemplateLanguage language) string GetTemplateFolder()
{ {
string languageSubdirectory = GetLanguageSubdirectory(language); string codeTemplatesDirectory = GetCodeTemplatesFolder();
return Path.Combine(textTemplatesRootDirectory, languageSubdirectory); string subFolder = GetCodeTemplatesSubFolder();
return Path.Combine(codeTemplatesDirectory, subFolder);
} }
string GetLanguageSubdirectory(MvcTextTemplateLanguage language) string GetCodeTemplatesFolder()
{ {
return String.Format(LanguageSubdirectoryFormatString, language.ToString()); MvcTextTemplateLanguage language = templateCriteria.TemplateLanguage;
string subFolder = String.Format("{0}\\CodeTemplates", language.ToString());
return Path.Combine(textTemplatesRootFolder, subFolder);
} }
protected abstract string LanguageSubdirectoryFormatString { get; } protected abstract string GetCodeTemplatesSubFolder();
} }
} }

36
src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/MvcTextTemplateFileNameExtension.cs

@ -0,0 +1,36 @@
// 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;
namespace ICSharpCode.AspNet.Mvc
{
public static class MvcTextTemplateFileNameExtension
{
public static string GetControllerFileExtension(MvcTextTemplateLanguage language)
{
if (language.IsVisualBasic()) {
return ".vb";
}
return ".cs";
}
public static string GetViewFileExtension(
MvcTextTemplateType type,
MvcTextTemplateLanguage language)
{
if (type.IsAspx()) {
return ".aspx";
}
return GetRazorFileExtension(language);
}
public static string GetRazorFileExtension(MvcTextTemplateLanguage language)
{
if (language.IsVisualBasic()) {
return ".vbhtml";
}
return ".cshtml";
}
}
}

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

@ -0,0 +1,20 @@
// 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;
namespace ICSharpCode.AspNet.Mvc
{
public static class MvcTextTemplateLanguageExtensions
{
public static bool IsCSharp(this MvcTextTemplateLanguage templateLanguage)
{
return templateLanguage == MvcTextTemplateLanguage.CSharp;
}
public static bool IsVisualBasic(this MvcTextTemplateLanguage templateLanguage)
{
return templateLanguage == MvcTextTemplateLanguage.VisualBasic;
}
}
}

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

@ -26,19 +26,15 @@ namespace ICSharpCode.AspNet.Mvc
this.textTemplatesRootDirectory = Path.Combine(mvcAddInPath, "ItemTemplates"); this.textTemplatesRootDirectory = Path.Combine(mvcAddInPath, "ItemTemplates");
} }
public string GetMvcViewTextTemplateFileName( public string GetMvcViewTextTemplateFileName(MvcTextTemplateCriteria templateCriteria)
MvcTextTemplateLanguage language,
string templateName)
{ {
var fileName = new MvcViewTextTemplateFileName(textTemplatesRootDirectory, language, templateName); var fileName = new MvcViewTextTemplateFileName(textTemplatesRootDirectory, templateCriteria);
return fileName.GetPath(); return fileName.GetPath();
} }
public string GetMvcControllerTextTemplateFileName( public string GetMvcControllerTextTemplateFileName(MvcTextTemplateCriteria templateCriteria)
MvcTextTemplateLanguage language,
string templateName)
{ {
var fileName = new MvcControllerTextTemplateFileName(textTemplatesRootDirectory, language, templateName); var fileName = new MvcControllerTextTemplateFileName(textTemplatesRootDirectory, templateCriteria);
return fileName.GetPath(); return fileName.GetPath();
} }
} }

11
src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/MvcTextTemplateLanguageFileNameExtension.cs → src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/MvcTextTemplateType.cs

@ -5,14 +5,9 @@ using System;
namespace ICSharpCode.AspNet.Mvc namespace ICSharpCode.AspNet.Mvc
{ {
public static class MvcTextTemplateLanguageFileNameExtension public enum MvcTextTemplateType
{ {
public static string GetFileExtension(MvcTextTemplateLanguage language) Aspx,
{ Razor
if (language == MvcTextTemplateLanguage.VisualBasic) {
return ".vb";
}
return ".cs";
}
} }
} }

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

@ -0,0 +1,20 @@
// 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;
namespace ICSharpCode.AspNet.Mvc
{
public static class MvcTextTemplateTypeExtensions
{
public static bool IsRazor(this MvcTextTemplateType templateType)
{
return templateType == MvcTextTemplateType.Razor;
}
public static bool IsAspx(this MvcTextTemplateType templateType)
{
return templateType == MvcTextTemplateType.Aspx;
}
}
}

49
src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/MvcTextTemplateTypeFolderName.cs

@ -0,0 +1,49 @@
// 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;
namespace ICSharpCode.AspNet.Mvc
{
public class MvcTextTemplateTypeFolder
{
string name;
public MvcTextTemplateTypeFolder(MvcTextTemplateCriteria criteria)
: this(criteria.TemplateType, criteria.TemplateLanguage)
{
}
public MvcTextTemplateTypeFolder(
MvcTextTemplateType type,
MvcTextTemplateLanguage language)
{
name = GetFolderName(type, language);
}
string GetFolderName(MvcTextTemplateType type, MvcTextTemplateLanguage language)
{
if (type.IsRazor()) {
return GetRazorFolderName(language);
}
return GetAspxFolderName(language);
}
string GetRazorFolderName(MvcTextTemplateLanguage language)
{
if (language.IsVisualBasic()) {
return "VBHTML";
}
return "CSHTML";
}
string GetAspxFolderName(MvcTextTemplateLanguage language)
{
return "Aspx" + language;
}
public string Name {
get { return name; }
}
}
}

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

@ -25,6 +25,8 @@ namespace ICSharpCode.AspNet.Mvc
this.textTemplateRepository = textTemplateRepository; this.textTemplateRepository = textTemplateRepository;
} }
public MvcTextTemplateType TemplateType { get; set; }
public void GenerateFile(MvcViewFileName fileName) public void GenerateFile(MvcViewFileName fileName)
{ {
base.GenerateFile(fileName); base.GenerateFile(fileName);
@ -38,7 +40,17 @@ namespace ICSharpCode.AspNet.Mvc
protected override string GetTextTemplateFileName() protected override string GetTextTemplateFileName()
{ {
return textTemplateRepository.GetMvcViewTextTemplateFileName(Language, "Empty"); MvcTextTemplateCriteria templateCriteria = GetTextTemplateCriteria();
return textTemplateRepository.GetMvcViewTextTemplateFileName(templateCriteria);
}
MvcTextTemplateCriteria GetTextTemplateCriteria()
{
return new MvcTextTemplateCriteria() {
TemplateLanguage = TemplateLanguage,
TemplateName = "Empty",
TemplateType = TemplateType
};
} }
} }
} }

11
src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/MvcViewFileName.cs

@ -23,10 +23,14 @@ namespace ICSharpCode.AspNet.Mvc
viewName = ConvertToEmptyStringIfNull(viewName); viewName = ConvertToEmptyStringIfNull(viewName);
} }
public MvcTextTemplateType TemplateType { get; set; }
public MvcTextTemplateLanguage TemplateLanguage { get; set; }
public override string GetFileName() public override string GetFileName()
{ {
string viewName = GetViewName(); string viewName = GetViewName();
return viewName + ".aspx"; string viewFileExtension = GetViewFileExtension();
return viewName + viewFileExtension;
} }
string GetViewName() string GetViewName()
@ -37,6 +41,11 @@ namespace ICSharpCode.AspNet.Mvc
return "View1"; return "View1";
} }
string GetViewFileExtension()
{
return MvcTextTemplateFileNameExtension.GetViewFileExtension(TemplateType, TemplateLanguage);
}
public bool HasValidViewName() public bool HasValidViewName()
{ {
return !String.IsNullOrEmpty(viewName); return !String.IsNullOrEmpty(viewName);

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

@ -8,16 +8,19 @@ namespace ICSharpCode.AspNet.Mvc
{ {
public class MvcViewTextTemplateFileName : MvcTextTemplateFileName public class MvcViewTextTemplateFileName : MvcTextTemplateFileName
{ {
MvcAddViewTextTemplateFolder folder;
public MvcViewTextTemplateFileName( public MvcViewTextTemplateFileName(
string textTemplatesRootDirectory, string textTemplatesRootDirectory,
MvcTextTemplateLanguage language, MvcTextTemplateCriteria templateCriteria)
string templateName) : base(textTemplatesRootDirectory, templateCriteria)
: base(textTemplatesRootDirectory, language, templateName)
{ {
this.folder = new MvcAddViewTextTemplateFolder(templateCriteria);
} }
protected override string LanguageSubdirectoryFormatString { protected override string GetCodeTemplatesSubFolder()
get { return "{0}\\CodeTemplates\\AddView\\Aspx{0}"; } {
return folder.Name;
} }
} }
} }

21
src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/MvcViewTypeViewModel.cs

@ -0,0 +1,21 @@
// 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;
namespace ICSharpCode.AspNet.Mvc
{
public class MvcViewEngineViewModel
{
public MvcViewEngineViewModel(
string name,
MvcTextTemplateType templateType)
{
this.Name = name;
this.TemplateType = templateType;
}
public string Name { get; set; }
public MvcTextTemplateType TemplateType { get; set; }
}
}

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

@ -39,6 +39,9 @@
<RequiredTargetFramework>3.0</RequiredTargetFramework> <RequiredTargetFramework>3.0</RequiredTargetFramework>
</Reference> </Reference>
<Reference Include="System" /> <Reference Include="System" />
<Reference Include="System.Core">
<RequiredTargetFramework>3.5</RequiredTargetFramework>
</Reference>
<Reference Include="System.Windows.Forms" /> <Reference Include="System.Windows.Forms" />
<Reference Include="System.Xml" /> <Reference Include="System.Xml" />
</ItemGroup> </ItemGroup>

2
src/AddIns/BackendBindings/AspNet.Mvc/Test/Helpers/FakeMvcControllerFileGenerator.cs

@ -9,7 +9,7 @@ namespace AspNet.Mvc.Tests.Helpers
{ {
public class FakeMvcControllerFileGenerator : IMvcControllerFileGenerator public class FakeMvcControllerFileGenerator : IMvcControllerFileGenerator
{ {
public MvcTextTemplateLanguage Language { get; set; } public MvcTextTemplateLanguage TemplateLanguage { get; set; }
public IProject Project { get; set; } public IProject Project { get; set; }
public bool IsGenerateFileCalled; public bool IsGenerateFileCalled;

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

@ -9,7 +9,8 @@ namespace AspNet.Mvc.Tests.Helpers
{ {
public class FakeMvcViewFileGenerator : IMvcViewFileGenerator public class FakeMvcViewFileGenerator : IMvcViewFileGenerator
{ {
public MvcTextTemplateLanguage Language { get; set; } public MvcTextTemplateLanguage TemplateLanguage { get; set; }
public MvcTextTemplateType TemplateType { get; set; }
public IProject Project { get; set; } public IProject Project { get; set; }
public bool IsGenerateFileCalled; public bool IsGenerateFileCalled;

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

@ -89,7 +89,7 @@ namespace AspNet.Mvc.Tests
fakeSelectedMvcControllerFolder.TemplateLanguage = MvcTextTemplateLanguage.VisualBasic; fakeSelectedMvcControllerFolder.TemplateLanguage = MvcTextTemplateLanguage.VisualBasic;
viewModel.AddMvcController(); viewModel.AddMvcController();
MvcTextTemplateLanguage templateLanguage = fakeControllerGenerator.Language; MvcTextTemplateLanguage templateLanguage = fakeControllerGenerator.TemplateLanguage;
Assert.AreEqual(MvcTextTemplateLanguage.VisualBasic, templateLanguage); Assert.AreEqual(MvcTextTemplateLanguage.VisualBasic, templateLanguage);
} }
@ -100,7 +100,7 @@ namespace AspNet.Mvc.Tests
CreateViewModelWithCSharpProject(); CreateViewModelWithCSharpProject();
viewModel.AddMvcController(); viewModel.AddMvcController();
MvcTextTemplateLanguage templateLanguage = fakeControllerGenerator.Language; MvcTextTemplateLanguage templateLanguage = fakeControllerGenerator.TemplateLanguage;
Assert.AreEqual(MvcTextTemplateLanguage.CSharp, templateLanguage); Assert.AreEqual(MvcTextTemplateLanguage.CSharp, templateLanguage);
} }

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

@ -3,6 +3,7 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq;
using AspNet.Mvc.Tests.Helpers; using AspNet.Mvc.Tests.Helpers;
using ICSharpCode.AspNet.Mvc; using ICSharpCode.AspNet.Mvc;
using ICSharpCode.SharpDevelop.Project; using ICSharpCode.SharpDevelop.Project;
@ -45,6 +46,36 @@ namespace AspNet.Mvc.Tests
viewModel.PropertyChanged += (source, e) => propertyChangedEvents.Add(e.PropertyName); viewModel.PropertyChanged += (source, e) => propertyChangedEvents.Add(e.PropertyName);
} }
bool ViewModelHasViewEngine(string viewTypeName)
{
return viewModel.ViewEngines.Any(v => v.Name == viewTypeName);
}
MvcViewEngineViewModel GetViewEngineFromViewModel(string viewTypeName)
{
return viewModel.ViewEngines.SingleOrDefault(v => v.Name == viewTypeName);
}
void CSharpProjectSelected()
{
fakeSelectedMvcViewFolder.TemplateLanguage = MvcTextTemplateLanguage.CSharp;
}
void VisualBasicProjectSelected()
{
fakeSelectedMvcViewFolder.TemplateLanguage = MvcTextTemplateLanguage.VisualBasic;
}
void SelectAspxViewEngine()
{
viewModel.SelectedViewEngine = GetViewEngineFromViewModel("ASPX");
}
void SelectRazorViewEngine()
{
viewModel.SelectedViewEngine = GetViewEngineFromViewModel("Razor");
}
[Test] [Test]
public void AddMvcViewCommand_ExecutedWhenViewNameSpecified_MvcViewIsGenerated() public void AddMvcViewCommand_ExecutedWhenViewNameSpecified_MvcViewIsGenerated()
{ {
@ -78,7 +109,7 @@ namespace AspNet.Mvc.Tests
fakeSelectedMvcViewFolder.TemplateLanguage = MvcTextTemplateLanguage.VisualBasic; fakeSelectedMvcViewFolder.TemplateLanguage = MvcTextTemplateLanguage.VisualBasic;
viewModel.AddMvcView(); viewModel.AddMvcView();
MvcTextTemplateLanguage templateLanguage = fakeViewGenerator.Language; MvcTextTemplateLanguage templateLanguage = fakeViewGenerator.TemplateLanguage;
Assert.AreEqual(MvcTextTemplateLanguage.VisualBasic, templateLanguage); Assert.AreEqual(MvcTextTemplateLanguage.VisualBasic, templateLanguage);
} }
@ -90,7 +121,7 @@ namespace AspNet.Mvc.Tests
fakeSelectedMvcViewFolder.TemplateLanguage = MvcTextTemplateLanguage.CSharp; fakeSelectedMvcViewFolder.TemplateLanguage = MvcTextTemplateLanguage.CSharp;
viewModel.AddMvcView(); viewModel.AddMvcView();
MvcTextTemplateLanguage templateLanguage = fakeViewGenerator.Language; MvcTextTemplateLanguage templateLanguage = fakeViewGenerator.TemplateLanguage;
Assert.AreEqual(MvcTextTemplateLanguage.CSharp, templateLanguage); Assert.AreEqual(MvcTextTemplateLanguage.CSharp, templateLanguage);
} }
@ -191,5 +222,127 @@ namespace AspNet.Mvc.Tests
Assert.IsTrue(canExecute); Assert.IsTrue(canExecute);
} }
[Test]
public void ViewEngines_RazorAndAspxViewEngines_ContainsRazorViewEngine()
{
CreateViewModel();
bool contains = ViewModelHasViewEngine("Razor");
Assert.IsTrue(contains);
}
[Test]
public void ViewTypes_RazorAndAspxViewEngines_RazorViewEngineViewModelHasRazorTemplateType()
{
CreateViewModel();
MvcViewEngineViewModel viewEngine = GetViewEngineFromViewModel("Razor");
Assert.AreEqual(MvcTextTemplateType.Razor, viewEngine.TemplateType);
}
[Test]
public void ViewEngines_RazorAndAspxViewTypes_ContainsAspxViewType()
{
CreateViewModel();
bool contains = ViewModelHasViewEngine("ASPX");
Assert.IsTrue(contains);
}
[Test]
public void ViewEngines_RazorAndAspxViewEngines_AspxViewEngineViewModelHasAspxTemplateType()
{
CreateViewModel();
MvcViewEngineViewModel viewEngine = GetViewEngineFromViewModel("ASPX");
Assert.AreEqual(MvcTextTemplateType.Aspx, viewEngine.TemplateType);
}
[Test]
public void ViewEngines_RazorAndAspxViewEngines_FirstViewEngineInListIsAspxViewEngine()
{
CreateViewModel();
MvcViewEngineViewModel viewEngine = viewModel.ViewEngines.First();
Assert.AreEqual(MvcTextTemplateType.Aspx, viewEngine.TemplateType);
}
[Test]
public void SelectedViewEngine_RazorAndAspxViewEngines_ReturnsAspxByDefault()
{
CreateViewModel();
MvcViewEngineViewModel viewEngine = viewModel.SelectedViewEngine;
Assert.AreEqual(MvcTextTemplateType.Aspx, viewEngine.TemplateType);
}
[Test]
public void AddMvcView_CSharpProjectAndRazorViewEngineIsSelected_CSharpRazorViewFileNamePassedToGenerator()
{
CreateViewModelWithViewFolderPath(@"d:\projects\MyProject\Views\Home");
viewModel.ViewName = "Index";
CSharpProjectSelected();
SelectRazorViewEngine();
viewModel.AddMvcView();
MvcViewFileName viewFileName = fakeViewGenerator.FileNamePassedToGenerateFile;
string fileName = viewFileName.GetPath();
string expectedFileName = @"d:\projects\MyProject\Views\Home\Index.cshtml";
Assert.AreEqual(expectedFileName, fileName);
}
[Test]
public void AddMvcView_VisualBasicProjectAndRazorViewEngineIsSelected_VisualBasicRazorViewFileNamePassedToGenerator()
{
CreateViewModelWithViewFolderPath(@"d:\projects\MyProject\Views\Home");
viewModel.ViewName = "Index";
VisualBasicProjectSelected();
SelectRazorViewEngine();
viewModel.AddMvcView();
MvcViewFileName viewFileName = fakeViewGenerator.FileNamePassedToGenerateFile;
string fileName = viewFileName.GetPath();
string expectedFileName = @"d:\projects\MyProject\Views\Home\Index.vbhtml";
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);
}
} }
} }

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

@ -42,13 +42,13 @@ namespace AspNet.Mvc.Tests
void ProjectPassedToGeneratorIsCSharpProject() void ProjectPassedToGeneratorIsCSharpProject()
{ {
projectUsedByGenerator.SetLanguage("C#"); projectUsedByGenerator.SetLanguage("C#");
generator.Language = MvcTextTemplateLanguage.CSharp; generator.TemplateLanguage = MvcTextTemplateLanguage.CSharp;
} }
void ProjectPassedToGeneratorIsVisualBasicProject() void ProjectPassedToGeneratorIsVisualBasicProject()
{ {
projectUsedByGenerator.SetLanguage("VBNet"); projectUsedByGenerator.SetLanguage("VBNet");
generator.Language = MvcTextTemplateLanguage.VisualBasic; generator.TemplateLanguage = MvcTextTemplateLanguage.VisualBasic;
} }
void GenerateFile() void GenerateFile()

89
src/AddIns/BackendBindings/AspNet.Mvc/Test/Src/MvcTextTemplateRepositoryTests.cs

@ -22,7 +22,13 @@ namespace AspNet.Mvc.Tests
{ {
CreateRepositoryWithAspNetMvcAddInDirectory(@"C:\SD\AddIns\AspNet.Mvc"); CreateRepositoryWithAspNetMvcAddInDirectory(@"C:\SD\AddIns\AspNet.Mvc");
string fileName = repository.GetMvcViewTextTemplateFileName(MvcTextTemplateLanguage.CSharp, "Empty"); var templateCriteria = new MvcTextTemplateCriteria() {
TemplateLanguage = MvcTextTemplateLanguage.CSharp,
TemplateName = "Empty",
TemplateType = MvcTextTemplateType.Aspx
};
string fileName = repository.GetMvcViewTextTemplateFileName(templateCriteria);
string expectedFileName = string expectedFileName =
@"C:\SD\AddIns\AspNet.Mvc\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\Empty.tt"; @"C:\SD\AddIns\AspNet.Mvc\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\Empty.tt";
@ -35,7 +41,13 @@ namespace AspNet.Mvc.Tests
{ {
CreateRepositoryWithAspNetMvcAddInDirectory(@"C:\SD\AddIns\AspNet.Mvc"); CreateRepositoryWithAspNetMvcAddInDirectory(@"C:\SD\AddIns\AspNet.Mvc");
string fileName = repository.GetMvcViewTextTemplateFileName(MvcTextTemplateLanguage.VisualBasic, "Empty"); var templateCriteria = new MvcTextTemplateCriteria() {
TemplateLanguage = MvcTextTemplateLanguage.VisualBasic,
TemplateName = "Empty",
TemplateType = MvcTextTemplateType.Aspx
};
string fileName = repository.GetMvcViewTextTemplateFileName(templateCriteria);
string expectedFileName = string expectedFileName =
@"C:\SD\AddIns\AspNet.Mvc\ItemTemplates\VisualBasic\CodeTemplates\AddView\AspxVisualBasic\Empty.tt"; @"C:\SD\AddIns\AspNet.Mvc\ItemTemplates\VisualBasic\CodeTemplates\AddView\AspxVisualBasic\Empty.tt";
@ -48,7 +60,13 @@ namespace AspNet.Mvc.Tests
{ {
CreateRepositoryWithAspNetMvcAddInDirectory(@"C:\SD\AddIns\AspNet.Mvc"); CreateRepositoryWithAspNetMvcAddInDirectory(@"C:\SD\AddIns\AspNet.Mvc");
string fileName = repository.GetMvcControllerTextTemplateFileName(MvcTextTemplateLanguage.CSharp, "Controller"); var templateCriteria = new MvcTextTemplateCriteria() {
TemplateLanguage = MvcTextTemplateLanguage.CSharp,
TemplateName = "Controller",
TemplateType = MvcTextTemplateType.Aspx
};
string fileName = repository.GetMvcControllerTextTemplateFileName(templateCriteria);
string expectedFileName = string expectedFileName =
@"C:\SD\AddIns\AspNet.Mvc\ItemTemplates\CSharp\CodeTemplates\AddController\Controller.tt"; @"C:\SD\AddIns\AspNet.Mvc\ItemTemplates\CSharp\CodeTemplates\AddController\Controller.tt";
@ -61,12 +79,75 @@ namespace AspNet.Mvc.Tests
{ {
CreateRepositoryWithAspNetMvcAddInDirectory(@"C:\SD\AddIns\AspNet.Mvc"); CreateRepositoryWithAspNetMvcAddInDirectory(@"C:\SD\AddIns\AspNet.Mvc");
string fileName = repository.GetMvcControllerTextTemplateFileName(MvcTextTemplateLanguage.VisualBasic, "Controller"); var templateCriteria = new MvcTextTemplateCriteria() {
TemplateLanguage = MvcTextTemplateLanguage.VisualBasic,
TemplateName = "Controller",
TemplateType = MvcTextTemplateType.Aspx
};
string fileName = repository.GetMvcControllerTextTemplateFileName(templateCriteria);
string expectedFileName = string expectedFileName =
@"C:\SD\AddIns\AspNet.Mvc\ItemTemplates\VisualBasic\CodeTemplates\AddController\Controller.tt"; @"C:\SD\AddIns\AspNet.Mvc\ItemTemplates\VisualBasic\CodeTemplates\AddController\Controller.tt";
Assert.AreEqual(expectedFileName, fileName); Assert.AreEqual(expectedFileName, fileName);
} }
[Test]
public void GetMvcViewTextTemplateFileName_CSharpEmptyRazorTemplateRequested_ReturnsFileNameToCSharpEmptyRazorTextTemplate()
{
CreateRepositoryWithAspNetMvcAddInDirectory(@"C:\SD\AddIns\AspNet.Mvc");
var templateCriteria = new MvcTextTemplateCriteria() {
TemplateLanguage = MvcTextTemplateLanguage.CSharp,
TemplateName = "Empty",
TemplateType = MvcTextTemplateType.Razor
};
string fileName = repository.GetMvcViewTextTemplateFileName(templateCriteria);
string expectedFileName =
@"C:\SD\AddIns\AspNet.Mvc\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\Empty.tt";
Assert.AreEqual(expectedFileName, fileName);
}
[Test]
public void GetMvcViewTextTemplateFileName_VisualBasicEmptyRazorTemplateRequested_ReturnsFileNameToVisualBasicEmptyRazorTextTemplate()
{
CreateRepositoryWithAspNetMvcAddInDirectory(@"C:\SD\AddIns\AspNet.Mvc");
var templateCriteria = new MvcTextTemplateCriteria() {
TemplateLanguage = MvcTextTemplateLanguage.VisualBasic,
TemplateName = "Empty",
TemplateType = MvcTextTemplateType.Razor
};
string fileName = repository.GetMvcViewTextTemplateFileName(templateCriteria);
string expectedFileName =
@"C:\SD\AddIns\AspNet.Mvc\ItemTemplates\VisualBasic\CodeTemplates\AddView\VBHTML\Empty.tt";
Assert.AreEqual(expectedFileName, fileName);
}
[Test]
public void GetMvcControllerTextTemplateFileName_RazorCSharpControllerTemplateRequested_ReturnsFileNameToCSharpControllerTextTemplate()
{
CreateRepositoryWithAspNetMvcAddInDirectory(@"C:\SD\AddIns\AspNet.Mvc");
var templateCriteria = new MvcTextTemplateCriteria() {
TemplateLanguage = MvcTextTemplateLanguage.CSharp,
TemplateName = "Controller",
TemplateType = MvcTextTemplateType.Razor
};
string fileName = repository.GetMvcControllerTextTemplateFileName(templateCriteria);
string expectedFileName =
@"C:\SD\AddIns\AspNet.Mvc\ItemTemplates\CSharp\CodeTemplates\AddController\Controller.tt";
Assert.AreEqual(expectedFileName, fileName);
}
} }
} }

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

@ -42,7 +42,17 @@ namespace AspNet.Mvc.Tests
void ProjectPassedToGeneratorIsCSharpProject() void ProjectPassedToGeneratorIsCSharpProject()
{ {
projectUsedByGenerator.SetLanguage("C#"); projectUsedByGenerator.SetLanguage("C#");
generator.Language = MvcTextTemplateLanguage.CSharp; generator.TemplateLanguage = MvcTextTemplateLanguage.CSharp;
}
void SelectAspxTemplate()
{
generator.TemplateType = MvcTextTemplateType.Aspx;
}
void SelectRazorTemplate()
{
generator.TemplateType = MvcTextTemplateType.Razor;
} }
void GenerateFile() void GenerateFile()
@ -86,10 +96,11 @@ namespace AspNet.Mvc.Tests
} }
[Test] [Test]
public void GenerateFile_CSharpEmptyViewTemplate_OutputFileGeneratedUsingFileNamePassedToGenerator() public void GenerateFile_CSharpEmptyAspxViewTemplate_OutputFileGeneratedUsingFileNamePassedToGenerator()
{ {
CreateGenerator(); CreateGenerator();
ProjectPassedToGeneratorIsCSharpProject(); ProjectPassedToGeneratorIsCSharpProject();
SelectAspxTemplate();
string viewFolder = @"d:\projects\MyProject\Views\Home"; string viewFolder = @"d:\projects\MyProject\Views\Home";
string viewName = "Index"; string viewName = "Index";
@ -103,12 +114,13 @@ namespace AspNet.Mvc.Tests
} }
[Test] [Test]
public void GenerateFile_CSharpEmptyViewTemplate_TemplateFileUsedIsIsCSharpEmptyViewTemplate() public void GenerateFile_CSharpEmptyAspxViewTemplate_TemplateFileUsedIsIsCSharpEmptyAspxViewTemplate()
{ {
string templateRootDirectory = @"d:\SharpDev\AddIns\AspNet.Mvc"; string templateRootDirectory = @"d:\SharpDev\AddIns\AspNet.Mvc";
CreateTemplateRepository(templateRootDirectory); CreateTemplateRepository(templateRootDirectory);
CreateGenerator(templateRepository); CreateGenerator(templateRepository);
ProjectPassedToGeneratorIsCSharpProject(); ProjectPassedToGeneratorIsCSharpProject();
SelectAspxTemplate();
GenerateFile(); GenerateFile();
@ -131,5 +143,23 @@ namespace AspNet.Mvc.Tests
Assert.AreEqual("About", fakeHost.ViewName); 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);
}
} }
} }

36
src/AddIns/BackendBindings/AspNet.Mvc/Test/Src/MvcViewFileNameTests.cs

@ -21,6 +21,8 @@ namespace AspNet.Mvc.Tests
public void ToString_ViewNameAndViewFolderSpecified_ReturnsViewFileNameGeneratedFromViewNameAndFolder() public void ToString_ViewNameAndViewFolderSpecified_ReturnsViewFileNameGeneratedFromViewNameAndFolder()
{ {
CreateFileName(); CreateFileName();
mvcViewFileName.TemplateType = MvcTextTemplateType.Aspx;
mvcViewFileName.TemplateLanguage = MvcTextTemplateLanguage.CSharp;
mvcViewFileName.ViewName = "Index"; mvcViewFileName.ViewName = "Index";
mvcViewFileName.Folder = @"d:\projects\MyAspProject\Views\About"; mvcViewFileName.Folder = @"d:\projects\MyAspProject\Views\About";
@ -46,6 +48,8 @@ namespace AspNet.Mvc.Tests
public void GetPath_ViewNameIsNull_ReturnsView1AsFileNameAndUsesViewFolder() public void GetPath_ViewNameIsNull_ReturnsView1AsFileNameAndUsesViewFolder()
{ {
CreateFileName(); CreateFileName();
mvcViewFileName.TemplateType = MvcTextTemplateType.Aspx;
mvcViewFileName.TemplateLanguage = MvcTextTemplateLanguage.CSharp;
mvcViewFileName.Folder = @"d:\projects\MyProject\Views\Home"; mvcViewFileName.Folder = @"d:\projects\MyProject\Views\Home";
mvcViewFileName.ViewName = null; mvcViewFileName.ViewName = null;
@ -81,6 +85,8 @@ namespace AspNet.Mvc.Tests
public void GetFileName_ViewNameAndViewFolderSpecified_ReturnsViewNameWithExtensionButNoFolderPath() public void GetFileName_ViewNameAndViewFolderSpecified_ReturnsViewNameWithExtensionButNoFolderPath()
{ {
CreateFileName(); CreateFileName();
mvcViewFileName.TemplateType = MvcTextTemplateType.Aspx;
mvcViewFileName.TemplateLanguage = MvcTextTemplateLanguage.CSharp;
mvcViewFileName.Folder = @"d:\projects\myproject\Views"; mvcViewFileName.Folder = @"d:\projects\myproject\Views";
mvcViewFileName.ViewName = "Index"; mvcViewFileName.ViewName = "Index";
@ -88,5 +94,35 @@ namespace AspNet.Mvc.Tests
Assert.AreEqual("Index.aspx", fileName); Assert.AreEqual("Index.aspx", fileName);
} }
[Test]
public void GetPath_CSharpRazor_ReturnsCSharpRazorFileName()
{
CreateFileName();
mvcViewFileName.TemplateType = MvcTextTemplateType.Razor;
mvcViewFileName.TemplateLanguage = MvcTextTemplateLanguage.CSharp;
mvcViewFileName.ViewName = "Index";
mvcViewFileName.Folder = @"d:\projects\MyAspProject\Views\About";
string fileName = mvcViewFileName.GetPath();
string expectedFileName = @"d:\projects\MyAspProject\Views\About\Index.cshtml";
Assert.AreEqual(expectedFileName, fileName);
}
[Test]
public void GetPath_VisualBasicRazor_ReturnsVisualBasicRazorFileName()
{
CreateFileName();
mvcViewFileName.TemplateType = MvcTextTemplateType.Razor;
mvcViewFileName.TemplateLanguage = MvcTextTemplateLanguage.VisualBasic;
mvcViewFileName.ViewName = "Index";
mvcViewFileName.Folder = @"d:\projects\MyAspProject\Views\About";
string fileName = mvcViewFileName.GetPath();
string expectedFileName = @"d:\projects\MyAspProject\Views\About\Index.vbhtml";
Assert.AreEqual(expectedFileName, fileName);
}
} }
} }

Loading…
Cancel
Save