Browse Source

Add basic List view T4 template for ASP.NET MVC.

pull/18/head
Matt Ward 14 years ago
parent
commit
1d7738ff6d
  1. 26
      src/AddIns/BackendBindings/AspNet.Mvc/Project/AspNet.Mvc.csproj
  2. 451
      src/AddIns/BackendBindings/AspNet.Mvc/Project/ItemTemplates/CSharp/CodeTemplates/AddView/AspxCSharp/List.cs
  3. 71
      src/AddIns/BackendBindings/AspNet.Mvc/Project/ItemTemplates/CSharp/CodeTemplates/AddView/AspxCSharp/List.tt
  4. 402
      src/AddIns/BackendBindings/AspNet.Mvc/Project/ItemTemplates/CSharp/CodeTemplates/AddView/CSHTML/List.cs
  5. 67
      src/AddIns/BackendBindings/AspNet.Mvc/Project/ItemTemplates/CSharp/CodeTemplates/AddView/CSHTML/List.tt
  6. 73
      src/AddIns/BackendBindings/AspNet.Mvc/Project/ItemTemplates/VisualBasic/CodeTemplates/AddView/AspxVisualBasic/List.tt
  7. 69
      src/AddIns/BackendBindings/AspNet.Mvc/Project/ItemTemplates/VisualBasic/CodeTemplates/AddView/VBHTML/List.tt
  8. 2
      src/AddIns/BackendBindings/AspNet.Mvc/Test/AspNet.Mvc.Tests.csproj
  9. 172
      src/AddIns/BackendBindings/AspNet.Mvc/Test/Src/CodeTemplates/AspxCSharpListViewTemplateTests.cs
  10. 173
      src/AddIns/BackendBindings/AspNet.Mvc/Test/Src/CodeTemplates/RazorCSharpListViewTemplateTests.cs

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

@ -62,6 +62,10 @@ @@ -62,6 +62,10 @@
<Compile Include="ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\Empty.cs">
<DependentUpon>Empty.tt</DependentUpon>
</Compile>
<Compile Include="ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\List.cs">
<DependentUpon>List.tt</DependentUpon>
<AutoGen>True</AutoGen>
</Compile>
<Compile Include="ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\Create.cs">
<DependentUpon>Create.tt</DependentUpon>
<AutoGen>True</AutoGen>
@ -81,6 +85,10 @@ @@ -81,6 +85,10 @@
<Compile Include="ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\Empty.cs">
<DependentUpon>Empty.tt</DependentUpon>
</Compile>
<Compile Include="ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\List.cs">
<DependentUpon>List.tt</DependentUpon>
<AutoGen>True</AutoGen>
</Compile>
<Compile Include="Src\AddMvcControllerToProjectCommand.cs" />
<Compile Include="Src\AddMvcControllerToProjectView.xaml.cs">
<DependentUpon>AddMvcControllerToProjectView.xaml</DependentUpon>
@ -242,6 +250,12 @@ @@ -242,6 +250,12 @@
<CustomToolNamespace>ICSharpCode.AspNet.Mvc.AspxCSharp</CustomToolNamespace>
<LastGenOutput>Empty.cs</LastGenOutput>
</None>
<None Include="ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\List.tt">
<Generator>TextTemplatingFilePreprocessor</Generator>
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
<CustomToolNamespace>ICSharpCode.AspNet.Mvc.AspxCSharp</CustomToolNamespace>
<LastGenOutput>List.cs</LastGenOutput>
</None>
<None Include="ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\Create.tt">
<Generator>TextTemplatingFilePreprocessor</Generator>
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
@ -266,6 +280,12 @@ @@ -266,6 +280,12 @@
<CustomToolNamespace>ICSharpCode.AspNet.Mvc.CSHtml</CustomToolNamespace>
<LastGenOutput>Empty.cs</LastGenOutput>
</None>
<None Include="ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\List.tt">
<Generator>TextTemplatingFilePreprocessor</Generator>
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
<CustomToolNamespace>ICSharpCode.AspNet.Mvc.CSHtml</CustomToolNamespace>
<LastGenOutput>List.cs</LastGenOutput>
</None>
<None Include="ItemTemplates\VisualBasic\CodeTemplates\AddController\Controller.tt">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
@ -283,6 +303,9 @@ @@ -283,6 +303,9 @@
</None>
<EmbeddedResource Include="Resources\CSharpRazor.xshd" />
<EmbeddedResource Include="Resources\VisualBasicRazor.xshd" />
<None Include="ItemTemplates\VisualBasic\CodeTemplates\AddView\AspxVisualBasic\List.tt">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Include="ItemTemplates\VisualBasic\CodeTemplates\AddView\VBHTML\Create.tt">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
@ -295,6 +318,9 @@ @@ -295,6 +318,9 @@
<None Include="ItemTemplates\VisualBasic\CodeTemplates\AddView\VBHTML\Empty.tt">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Include="ItemTemplates\VisualBasic\CodeTemplates\AddView\VBHTML\List.tt">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
</ItemGroup>
<ItemGroup>
<Page Include="Src\AddMvcControllerToProjectView.xaml" />

451
src/AddIns/BackendBindings/AspNet.Mvc/Project/ItemTemplates/CSharp/CodeTemplates/AddView/AspxCSharp/List.cs

@ -0,0 +1,451 @@ @@ -0,0 +1,451 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.239
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace ICSharpCode.AspNet.Mvc.AspxCSharp {
using ICSharpCode.AspNet.Mvc;
using System;
public partial class List : ListBase {
private global::Microsoft.VisualStudio.TextTemplating.ITextTemplatingEngineHost hostValue;
#line 58 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\List.tt"
MvcTextTemplateHost MvcHost {
get { return (MvcTextTemplateHost)Host; }
}
public string GetViewPageType()
{
string viewDataTypeName = MvcHost.ViewDataTypeName;
if (!String.IsNullOrEmpty(viewDataTypeName)) {
return String.Format("<{0}>", viewDataTypeName);
}
return String.Empty;
}
#line default
#line hidden
public global::Microsoft.VisualStudio.TextTemplating.ITextTemplatingEngineHost Host {
get {
return this.hostValue;
}
set {
this.hostValue = value;
}
}
public virtual string TransformText() {
this.GenerationEnvironment = null;
#line 3 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\List.tt"
if (MvcHost.IsPartialView) {
#line default
#line hidden
#line 4 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\List.tt"
this.Write("<%@ Control Language=\"C#\" Inherits=\"System.Web.Mvc.ViewUserControl<IEnumerable");
#line default
#line hidden
#line 4 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\List.tt"
this.Write(this.ToStringHelper.ToStringWithCulture( GetViewPageType() ));
#line default
#line hidden
#line 4 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\List.tt"
this.Write(">\" %>\r\n\r\n");
#line default
#line hidden
#line 6 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\List.tt"
} else if (MvcHost.IsContentPage) {
#line default
#line hidden
#line 7 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\List.tt"
this.Write("<%@ Page Language=\"C#\" MasterPageFile=\"");
#line default
#line hidden
#line 7 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\List.tt"
this.Write(this.ToStringHelper.ToStringWithCulture( MvcHost.MasterPageFile ));
#line default
#line hidden
#line 7 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\List.tt"
this.Write("\" Inherits=\"System.Web.Mvc.ViewPage<IEnumerable");
#line default
#line hidden
#line 7 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\List.tt"
this.Write(this.ToStringHelper.ToStringWithCulture( GetViewPageType() ));
#line default
#line hidden
#line 7 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\List.tt"
this.Write(">\" %>\r\n\r\n<asp:Content ID=\"Content1\" ContentPlaceHolderID=\"Title\" runat=\"server\">\r" +
"\n");
#line default
#line hidden
#line 10 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\List.tt"
this.Write(this.ToStringHelper.ToStringWithCulture( MvcHost.ViewName ));
#line default
#line hidden
#line 10 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\List.tt"
this.Write("\r\n</asp:Content>\r\n\r\n<asp:Content ID=\"Content2\" ContentPlaceHolderID=\"");
#line default
#line hidden
#line 13 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\List.tt"
this.Write(this.ToStringHelper.ToStringWithCulture( MvcHost.PrimaryContentPlaceHolderID ));
#line default
#line hidden
#line 13 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\List.tt"
this.Write("\" runat=\"server\">\r\n");
#line default
#line hidden
#line 14 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\List.tt"
PushIndent("\t");
} else {
#line default
#line hidden
#line 18 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\List.tt"
this.Write("<%@ Page Language=\"C#\" Inherits=\"System.Web.Mvc.ViewPage<IEnumerable");
#line default
#line hidden
#line 18 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\List.tt"
this.Write(this.ToStringHelper.ToStringWithCulture( GetViewPageType() ));
#line default
#line hidden
#line 18 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\List.tt"
this.Write(">\" %>\r\n\r\n<!DOCTYPE html>\r\n<html>\r\n\t<head runat=\"server\">\r\n\t\t<title>");
#line default
#line hidden
#line 23 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\List.tt"
this.Write(this.ToStringHelper.ToStringWithCulture( MvcHost.ViewName ));
#line default
#line hidden
#line 23 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\List.tt"
this.Write("</title>\r\n\t</head>\r\n\t<body>\r\n");
#line default
#line hidden
#line 26 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\List.tt"
PushIndent("\t\t");
}
#line default
#line hidden
#line 30 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\List.tt"
this.Write(@"<p>
<%: Html.ActionLink(""Create"", ""Create"") %>
</p>
<table>
<% foreach (var item in Model) { %>
<tr>
<td>
<%: Html.ActionLink(""Edit"", ""Edit"") %> |
<%: Html.ActionLink(""Details"", ""Details"") %> |
<%: Html.ActionLink(""Delete"", ""Delete"") %>
</td>
</tr>
<% } %>
</table>
");
#line default
#line hidden
#line 44 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\List.tt"
if (MvcHost.IsPartialView) {
// Do nothing.
} else if (MvcHost.IsContentPage) {
PopIndent();
#line default
#line hidden
#line 50 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\List.tt"
this.Write("</asp:Content>\r\n");
#line default
#line hidden
#line 51 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\List.tt"
} else {
PopIndent();
#line default
#line hidden
#line 55 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\List.tt"
this.Write("\t</body>\r\n</html>\r\n");
#line default
#line hidden
#line 57 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\List.tt"
}
#line default
#line hidden
return this.GenerationEnvironment.ToString();
}
protected virtual void Initialize() {
}
}
public class ListBase {
private global::System.Text.StringBuilder builder;
private global::System.Collections.Generic.IDictionary<string, object> session;
private global::System.CodeDom.Compiler.CompilerErrorCollection errors;
private string currentIndent = string.Empty;
private global::System.Collections.Generic.Stack<int> indents;
private bool endsWithNewline;
private ToStringInstanceHelper _toStringHelper = new ToStringInstanceHelper();
public virtual global::System.Collections.Generic.IDictionary<string, object> Session {
get {
return this.session;
}
set {
this.session = value;
}
}
public global::System.Text.StringBuilder GenerationEnvironment {
get {
if ((this.builder == null)) {
this.builder = new global::System.Text.StringBuilder();
}
return this.builder;
}
set {
this.builder = value;
}
}
protected global::System.CodeDom.Compiler.CompilerErrorCollection Errors {
get {
if ((this.errors == null)) {
this.errors = new global::System.CodeDom.Compiler.CompilerErrorCollection();
}
return this.errors;
}
}
public string CurrentIndent {
get {
return this.currentIndent;
}
}
private global::System.Collections.Generic.Stack<int> Indents {
get {
if ((this.indents == null)) {
this.indents = new global::System.Collections.Generic.Stack<int>();
}
return this.indents;
}
}
public ToStringInstanceHelper ToStringHelper {
get {
return this._toStringHelper;
}
}
public void Error(string message) {
this.Errors.Add(new global::System.CodeDom.Compiler.CompilerError(null, -1, -1, null, message));
}
public void Warning(string message) {
global::System.CodeDom.Compiler.CompilerError val = new global::System.CodeDom.Compiler.CompilerError(null, -1, -1, null, message);
val.IsWarning = true;
this.Errors.Add(val);
}
public string PopIndent() {
if ((this.Indents.Count == 0)) {
return string.Empty;
}
int lastPos = (this.currentIndent.Length - this.Indents.Pop());
string last = this.currentIndent.Substring(lastPos);
this.currentIndent = this.currentIndent.Substring(0, lastPos);
return last;
}
public void PushIndent(string indent) {
this.Indents.Push(indent.Length);
this.currentIndent = (this.currentIndent + indent);
}
public void ClearIndent() {
this.currentIndent = string.Empty;
this.Indents.Clear();
}
public void Write(string textToAppend) {
if (string.IsNullOrEmpty(textToAppend)) {
return;
}
if ((((this.GenerationEnvironment.Length == 0)
|| this.endsWithNewline)
&& (this.CurrentIndent.Length > 0))) {
this.GenerationEnvironment.Append(this.CurrentIndent);
}
this.endsWithNewline = false;
char last = textToAppend[(textToAppend.Length - 1)];
if (((last == '\n')
|| (last == '\r'))) {
this.endsWithNewline = true;
}
if ((this.CurrentIndent.Length == 0)) {
this.GenerationEnvironment.Append(textToAppend);
return;
}
int lastNewline = 0;
for (int i = 0; (i
< (textToAppend.Length - 1)); i = (i + 1)) {
char c = textToAppend[i];
if ((c == '\r')) {
if ((textToAppend[(i + 1)] == '\n')) {
i = (i + 1);
if ((i
== (textToAppend.Length - 1))) {
goto breakLoop;
}
}
}
else {
if ((c != '\n')) {
goto continueLoop;
}
}
i = (i + 1);
int len = (i - lastNewline);
if ((len > 0)) {
this.GenerationEnvironment.Append(textToAppend, lastNewline, (i - lastNewline));
}
this.GenerationEnvironment.Append(this.CurrentIndent);
lastNewline = i;
continueLoop:
;
}
breakLoop:
if ((lastNewline > 0)) {
this.GenerationEnvironment.Append(textToAppend, lastNewline, (textToAppend.Length - lastNewline));
}
else {
this.GenerationEnvironment.Append(textToAppend);
}
}
public void Write(string format, params object[] args) {
this.Write(string.Format(format, args));
}
public void WriteLine(string textToAppend) {
this.Write(textToAppend);
this.GenerationEnvironment.AppendLine();
this.endsWithNewline = true;
}
public void WriteLine(string format, params object[] args) {
this.WriteLine(string.Format(format, args));
}
public class ToStringInstanceHelper {
private global::System.IFormatProvider formatProvider = global::System.Globalization.CultureInfo.InvariantCulture;
public global::System.IFormatProvider FormatProvider {
get {
return this.formatProvider;
}
set {
if ((this.formatProvider == null)) {
throw new global::System.ArgumentNullException("formatProvider");
}
this.formatProvider = value;
}
}
public string ToStringWithCulture(object objectToConvert) {
if ((objectToConvert == null)) {
throw new global::System.ArgumentNullException("objectToConvert");
}
global::System.Type type = objectToConvert.GetType();
global::System.Type iConvertibleType = typeof(global::System.IConvertible);
if (iConvertibleType.IsAssignableFrom(type)) {
return ((global::System.IConvertible)(objectToConvert)).ToString(this.formatProvider);
}
global::System.Reflection.MethodInfo methInfo = type.GetMethod("ToString", new global::System.Type[] {
iConvertibleType});
if ((methInfo != null)) {
return ((string)(methInfo.Invoke(objectToConvert, new object[] {
this.formatProvider})));
}
return objectToConvert.ToString();
}
}
}
}

71
src/AddIns/BackendBindings/AspNet.Mvc/Project/ItemTemplates/CSharp/CodeTemplates/AddView/AspxCSharp/List.tt

@ -0,0 +1,71 @@ @@ -0,0 +1,71 @@
<#@ template language="C#" HostSpecific="true" #>
<#@ import namespace="ICSharpCode.AspNet.Mvc" #>
<# if (MvcHost.IsPartialView) { #>
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<IEnumerable<#= GetViewPageType() #>>" %>
<# } else if (MvcHost.IsContentPage) { #>
<%@ Page Language="C#" MasterPageFile="<#= MvcHost.MasterPageFile #>" Inherits="System.Web.Mvc.ViewPage<IEnumerable<#= GetViewPageType() #>>" %>
<asp:Content ID="Content1" ContentPlaceHolderID="Title" runat="server">
<#= MvcHost.ViewName #>
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="<#= MvcHost.PrimaryContentPlaceHolderID #>" runat="server">
<#
PushIndent("\t");
} else {
#>
<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage<IEnumerable<#= GetViewPageType() #>>" %>
<!DOCTYPE html>
<html>
<head runat="server">
<title><#= MvcHost.ViewName #></title>
</head>
<body>
<#
PushIndent("\t\t");
}
#>
<p>
<%: Html.ActionLink("Create", "Create") %>
</p>
<table>
<% foreach (var item in Model) { %>
<tr>
<td>
<%: Html.ActionLink("Edit", "Edit") %> |
<%: Html.ActionLink("Details", "Details") %> |
<%: Html.ActionLink("Delete", "Delete") %>
</td>
</tr>
<% } %>
</table>
<#
if (MvcHost.IsPartialView) {
// Do nothing.
} else if (MvcHost.IsContentPage) {
PopIndent();
#>
</asp:Content>
<#
} else {
PopIndent();
#>
</body>
</html>
<# } #>
<#+
MvcTextTemplateHost MvcHost {
get { return (MvcTextTemplateHost)Host; }
}
public string GetViewPageType()
{
string viewDataTypeName = MvcHost.ViewDataTypeName;
if (!String.IsNullOrEmpty(viewDataTypeName)) {
return String.Format("<{0}>", viewDataTypeName);
}
return String.Empty;
}
#>

402
src/AddIns/BackendBindings/AspNet.Mvc/Project/ItemTemplates/CSharp/CodeTemplates/AddView/CSHTML/List.cs

@ -0,0 +1,402 @@ @@ -0,0 +1,402 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.239
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace ICSharpCode.AspNet.Mvc.CSHtml {
using ICSharpCode.AspNet.Mvc;
using System;
public partial class List : ListBase {
private global::Microsoft.VisualStudio.TextTemplating.ITextTemplatingEngineHost hostValue;
#line 54 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\List.tt"
MvcTextTemplateHost MvcHost {
get { return (MvcTextTemplateHost)Host; }
}
public string GetModelDirective()
{
string viewDataTypeName = MvcHost.ViewDataTypeName;
if (!String.IsNullOrEmpty(viewDataTypeName)) {
return String.Format("@model IEnumerable<{0}>", viewDataTypeName);
}
return String.Empty;
}
#line default
#line hidden
public global::Microsoft.VisualStudio.TextTemplating.ITextTemplatingEngineHost Host {
get {
return this.hostValue;
}
set {
this.hostValue = value;
}
}
public virtual string TransformText() {
this.GenerationEnvironment = null;
#line 4 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\List.tt"
this.Write(this.ToStringHelper.ToStringWithCulture( GetModelDirective() ));
#line default
#line hidden
#line 4 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\List.tt"
this.Write("\r\n\r\n");
#line default
#line hidden
#line 6 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\List.tt"
if (MvcHost.IsPartialView) {
// Do nothing.
} else if (MvcHost.IsContentPage) {
#line default
#line hidden
#line 11 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\List.tt"
this.Write("@{\r\n\tViewBag.Title = \"");
#line default
#line hidden
#line 12 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\List.tt"
this.Write(this.ToStringHelper.ToStringWithCulture( MvcHost.ViewName ));
#line default
#line hidden
#line 12 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\List.tt"
this.Write("\";\r\n\tLayout = \"");
#line default
#line hidden
#line 13 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\List.tt"
this.Write(this.ToStringHelper.ToStringWithCulture( MvcHost.MasterPageFile ));
#line default
#line hidden
#line 13 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\List.tt"
this.Write("\";\r\n}\r\n\r\n<h2>");
#line default
#line hidden
#line 16 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\List.tt"
this.Write(this.ToStringHelper.ToStringWithCulture( MvcHost.ViewName ));
#line default
#line hidden
#line 16 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\List.tt"
this.Write("</h2>\r\n\r\n");
#line default
#line hidden
#line 18 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\List.tt"
} else {
#line default
#line hidden
#line 21 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\List.tt"
this.Write("<!DOCTYPE html>\r\n<html>\r\n\t<head runat=\"server\">\r\n\t\t<title>");
#line default
#line hidden
#line 24 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\List.tt"
this.Write(this.ToStringHelper.ToStringWithCulture( MvcHost.ViewName ));
#line default
#line hidden
#line 24 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\List.tt"
this.Write("</title>\r\n\t</head>\r\n\t<body>\r\n");
#line default
#line hidden
#line 27 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\List.tt"
PushIndent("\t\t");
}
#line default
#line hidden
#line 31 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\List.tt"
this.Write(@"<p>
@Html.ActionLink(""Create"", ""Create"")
</p>
<table>
@foreach (var item in Model) {
<tr>
<td>
@Html.ActionLink(""Edit"", ""Edit"") |
@Html.ActionLink(""Details"", ""Details"") |
@Html.ActionLink(""Delete"", ""Delete"")
</td>
</tr>
}
</table>
");
#line default
#line hidden
#line 45 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\List.tt"
if (MvcHost.IsPartialView) {
// Do nothing.
} else if (!MvcHost.IsContentPage) {
PopIndent();
#line default
#line hidden
#line 51 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\List.tt"
this.Write("\t</body>\r\n</html>\r\n");
#line default
#line hidden
#line 53 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\List.tt"
}
#line default
#line hidden
return this.GenerationEnvironment.ToString();
}
protected virtual void Initialize() {
}
}
public class ListBase {
private global::System.Text.StringBuilder builder;
private global::System.Collections.Generic.IDictionary<string, object> session;
private global::System.CodeDom.Compiler.CompilerErrorCollection errors;
private string currentIndent = string.Empty;
private global::System.Collections.Generic.Stack<int> indents;
private bool endsWithNewline;
private ToStringInstanceHelper _toStringHelper = new ToStringInstanceHelper();
public virtual global::System.Collections.Generic.IDictionary<string, object> Session {
get {
return this.session;
}
set {
this.session = value;
}
}
public global::System.Text.StringBuilder GenerationEnvironment {
get {
if ((this.builder == null)) {
this.builder = new global::System.Text.StringBuilder();
}
return this.builder;
}
set {
this.builder = value;
}
}
protected global::System.CodeDom.Compiler.CompilerErrorCollection Errors {
get {
if ((this.errors == null)) {
this.errors = new global::System.CodeDom.Compiler.CompilerErrorCollection();
}
return this.errors;
}
}
public string CurrentIndent {
get {
return this.currentIndent;
}
}
private global::System.Collections.Generic.Stack<int> Indents {
get {
if ((this.indents == null)) {
this.indents = new global::System.Collections.Generic.Stack<int>();
}
return this.indents;
}
}
public ToStringInstanceHelper ToStringHelper {
get {
return this._toStringHelper;
}
}
public void Error(string message) {
this.Errors.Add(new global::System.CodeDom.Compiler.CompilerError(null, -1, -1, null, message));
}
public void Warning(string message) {
global::System.CodeDom.Compiler.CompilerError val = new global::System.CodeDom.Compiler.CompilerError(null, -1, -1, null, message);
val.IsWarning = true;
this.Errors.Add(val);
}
public string PopIndent() {
if ((this.Indents.Count == 0)) {
return string.Empty;
}
int lastPos = (this.currentIndent.Length - this.Indents.Pop());
string last = this.currentIndent.Substring(lastPos);
this.currentIndent = this.currentIndent.Substring(0, lastPos);
return last;
}
public void PushIndent(string indent) {
this.Indents.Push(indent.Length);
this.currentIndent = (this.currentIndent + indent);
}
public void ClearIndent() {
this.currentIndent = string.Empty;
this.Indents.Clear();
}
public void Write(string textToAppend) {
if (string.IsNullOrEmpty(textToAppend)) {
return;
}
if ((((this.GenerationEnvironment.Length == 0)
|| this.endsWithNewline)
&& (this.CurrentIndent.Length > 0))) {
this.GenerationEnvironment.Append(this.CurrentIndent);
}
this.endsWithNewline = false;
char last = textToAppend[(textToAppend.Length - 1)];
if (((last == '\n')
|| (last == '\r'))) {
this.endsWithNewline = true;
}
if ((this.CurrentIndent.Length == 0)) {
this.GenerationEnvironment.Append(textToAppend);
return;
}
int lastNewline = 0;
for (int i = 0; (i
< (textToAppend.Length - 1)); i = (i + 1)) {
char c = textToAppend[i];
if ((c == '\r')) {
if ((textToAppend[(i + 1)] == '\n')) {
i = (i + 1);
if ((i
== (textToAppend.Length - 1))) {
goto breakLoop;
}
}
}
else {
if ((c != '\n')) {
goto continueLoop;
}
}
i = (i + 1);
int len = (i - lastNewline);
if ((len > 0)) {
this.GenerationEnvironment.Append(textToAppend, lastNewline, (i - lastNewline));
}
this.GenerationEnvironment.Append(this.CurrentIndent);
lastNewline = i;
continueLoop:
;
}
breakLoop:
if ((lastNewline > 0)) {
this.GenerationEnvironment.Append(textToAppend, lastNewline, (textToAppend.Length - lastNewline));
}
else {
this.GenerationEnvironment.Append(textToAppend);
}
}
public void Write(string format, params object[] args) {
this.Write(string.Format(format, args));
}
public void WriteLine(string textToAppend) {
this.Write(textToAppend);
this.GenerationEnvironment.AppendLine();
this.endsWithNewline = true;
}
public void WriteLine(string format, params object[] args) {
this.WriteLine(string.Format(format, args));
}
public class ToStringInstanceHelper {
private global::System.IFormatProvider formatProvider = global::System.Globalization.CultureInfo.InvariantCulture;
public global::System.IFormatProvider FormatProvider {
get {
return this.formatProvider;
}
set {
if ((this.formatProvider == null)) {
throw new global::System.ArgumentNullException("formatProvider");
}
this.formatProvider = value;
}
}
public string ToStringWithCulture(object objectToConvert) {
if ((objectToConvert == null)) {
throw new global::System.ArgumentNullException("objectToConvert");
}
global::System.Type type = objectToConvert.GetType();
global::System.Type iConvertibleType = typeof(global::System.IConvertible);
if (iConvertibleType.IsAssignableFrom(type)) {
return ((global::System.IConvertible)(objectToConvert)).ToString(this.formatProvider);
}
global::System.Reflection.MethodInfo methInfo = type.GetMethod("ToString", new global::System.Type[] {
iConvertibleType});
if ((methInfo != null)) {
return ((string)(methInfo.Invoke(objectToConvert, new object[] {
this.formatProvider})));
}
return objectToConvert.ToString();
}
}
}
}

67
src/AddIns/BackendBindings/AspNet.Mvc/Project/ItemTemplates/CSharp/CodeTemplates/AddView/CSHTML/List.tt

@ -0,0 +1,67 @@ @@ -0,0 +1,67 @@
<#@ template language="C#" HostSpecific="true" #>
<#@ import namespace="ICSharpCode.AspNet.Mvc" #>
<#@ output extension=".cshtml" #>
<#= GetModelDirective() #>
<#
if (MvcHost.IsPartialView) {
// Do nothing.
} else if (MvcHost.IsContentPage) {
#>
@{
ViewBag.Title = "<#= MvcHost.ViewName #>";
Layout = "<#= MvcHost.MasterPageFile #>";
}
<h2><#= MvcHost.ViewName #></h2>
<#
} else {
#>
<!DOCTYPE html>
<html>
<head runat="server">
<title><#= MvcHost.ViewName #></title>
</head>
<body>
<#
PushIndent("\t\t");
}
#>
<p>
@Html.ActionLink("Create", "Create")
</p>
<table>
@foreach (var item in Model) {
<tr>
<td>
@Html.ActionLink("Edit", "Edit") |
@Html.ActionLink("Details", "Details") |
@Html.ActionLink("Delete", "Delete")
</td>
</tr>
}
</table>
<#
if (MvcHost.IsPartialView) {
// Do nothing.
} else if (!MvcHost.IsContentPage) {
PopIndent();
#>
</body>
</html>
<# } #>
<#+
MvcTextTemplateHost MvcHost {
get { return (MvcTextTemplateHost)Host; }
}
public string GetModelDirective()
{
string viewDataTypeName = MvcHost.ViewDataTypeName;
if (!String.IsNullOrEmpty(viewDataTypeName)) {
return String.Format("@model IEnumerable<{0}>", viewDataTypeName);
}
return String.Empty;
}
#>

73
src/AddIns/BackendBindings/AspNet.Mvc/Project/ItemTemplates/VisualBasic/CodeTemplates/AddView/AspxVisualBasic/List.tt

@ -0,0 +1,73 @@ @@ -0,0 +1,73 @@
<#@ template language="VB" HostSpecific="true" #>
<#@ import namespace="ICSharpCode.AspNet.Mvc" #>
<#@ import namespace="Microsoft.VisualBasic.Constants" #>
<# If MvcHost.IsPartialView Then #>
<%@ Control Language="VB" Inherits="System.Web.Mvc.ViewUserControl<#= GetViewPageType() #>" %>
<# ElseIf MvcHost.IsContentPage Then #>
<%@ Page Language="VB" MasterPageFile="<#= MvcHost.MasterPageFile #>" Inherits="System.Web.Mvc.ViewPage<#= GetViewPageType() #>" %>
<asp:Content ID="Content1" ContentPlaceHolderID="Title" runat="server">
<#= MvcHost.ViewName #>
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="<#= MvcHost.PrimaryContentPlaceHolderID #>" runat="server">
<#
PushIndent(vbTab)
Else
#>
<%@ Page Language="VB" Inherits="System.Web.Mvc.ViewPage<#= GetViewPageType() #>" %>
<!DOCTYPE html>
<html>
<head runat="server">
<title><#= MvcHost.ViewName #></title>
</head>
<body>
<#
PushIndent(vbTab & vbTab)
End If
#>
<p>
<%: Html.ActionLink("Create", "Create") %>
</p>
<table>
<% For Each item in Model %>
<tr>
<td>
<%: Html.ActionLink("Edit", "Edit") %> |
<%: Html.ActionLink("Details", "Details") %> |
<%: Html.ActionLink("Delete", "Delete") %>
</td>
</tr>
<% Next %>
</table>
<#
If MvcHost.IsPartialView Then
' Do nothing.
ElseIf MvcHost.IsContentPage Then
PopIndent()
#>
</asp:Content>
<#
Else
PopIndent()
#>
</body>
</html>
<# End If #>
<#+
ReadOnly Property MvcHost As MvcTextTemplateHost
Get
Return DirectCast(Host, MvcTextTemplateHost)
End Get
End Property
Public Function GetViewPageType() As String
Dim viewDataTypeName As String = MvcHost.ViewDataTypeName
If Not String.IsNullOrEmpty(viewDataTypeName) Then
Return String.Format("(Of {0})", viewDataTypeName)
End If
Return String.Empty
End Function
#>

69
src/AddIns/BackendBindings/AspNet.Mvc/Project/ItemTemplates/VisualBasic/CodeTemplates/AddView/VBHTML/List.tt

@ -0,0 +1,69 @@ @@ -0,0 +1,69 @@
<#@ template language="VB" HostSpecific="true" #>
<#@ import namespace="ICSharpCode.AspNet.Mvc" #>
<#@ import namespace="Microsoft.VisualBasic.Constants" #>
<#@ output extension=".vbhtml" #>
<#= GetModelDirective() #>
<#
If MvcHost.IsPartialView Then
' Do nothing.
ElseIf MvcHost.IsContentPage Then
#>
@Code
ViewData("Title") = "<#= MvcHost.ViewName #>"
Layout = "<#= MvcHost.MasterPageFile #>"
End Code
<h2><#= MvcHost.ViewName #></h2>
<#
Else
#>
<!DOCTYPE html>
<html>
<head runat="server">
<title><#= MvcHost.ViewName #></title>
</head>
<body>
<#
PushIndent(vbTab & vbTab)
End If
#>
<p>
@Html.ActionLink("Create", "Create")
</p>
<table>
@For Each item in Model
@<tr>
<td>
@Html.ActionLink("Edit", "Edit") |
@Html.ActionLink("Details", "Details") |
@Html.ActionLink("Delete", "Delete")
</td>
</tr>
Next
</table>
<#
If MvcHost.IsPartialView Then
' Do nothing.
ElseIf Not MvcHost.IsContentPage Then
PopIndent()
#>
</body>
</html>
<# End If #>
<#+
ReadOnly Property MvcHost As MvcTextTemplateHost
Get
Return DirectCast(Host, MvcTextTemplateHost)
End Get
End Property
Function GetModelDirective() As String
Dim viewDataTypeName As String = MvcHost.ViewDataTypeName
If Not String.IsNullOrEmpty(viewDataTypeName) Then
Return String.Format("@ModelType IEnumerable(Of {0})", viewDataTypeName)
End If
Return String.Empty
End Function
#>

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

@ -89,11 +89,13 @@ @@ -89,11 +89,13 @@
<Compile Include="Src\CodeTemplates\AspxCSharpDetailsViewTemplateTests.cs" />
<Compile Include="Src\CodeTemplates\AspxCSharpEditViewTemplateTests.cs" />
<Compile Include="Src\CodeTemplates\AspxCSharpEmptyViewTemplateTests.cs" />
<Compile Include="Src\CodeTemplates\AspxCSharpListViewTemplateTests.cs" />
<Compile Include="Src\CodeTemplates\Models\ModelWithNoProperties.cs" />
<Compile Include="Src\CodeTemplates\RazorCSharpCreateViewTemplateTests.cs" />
<Compile Include="Src\CodeTemplates\RazorCSharpDetailsViewTemplateTests.cs" />
<Compile Include="Src\CodeTemplates\RazorCSharpEditViewTemplateTests.cs" />
<Compile Include="Src\CodeTemplates\RazorCSharpEmptyViewTemplateTests.cs" />
<Compile Include="Src\CodeTemplates\RazorCSharpListViewTemplateTests.cs" />
<Compile Include="Src\IsMvcControllerFolderSelectedConditionEvaluatorTests.cs" />
<Compile Include="Src\IsMvcViewFolderSelectedConditionEvaluatorTests.cs" />
<Compile Include="Configuration\AssemblyInfo.cs" />

172
src/AddIns/BackendBindings/AspNet.Mvc/Test/Src/CodeTemplates/AspxCSharpListViewTemplateTests.cs

@ -0,0 +1,172 @@ @@ -0,0 +1,172 @@
// 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 AspNet.Mvc.Tests.CodeTemplates.Models;
using AspNet.Mvc.Tests.Helpers;
using AspxCSharp = ICSharpCode.AspNet.Mvc.AspxCSharp;
using NUnit.Framework;
namespace AspNet.Mvc.Tests.CodeTemplates
{
[TestFixture]
public class AspxCSharpListViewTemplateTests
{
AspxCSharp.List templatePreprocessor;
TestableMvcTextTemplateHost mvcHost;
void CreateViewTemplatePreprocessor()
{
mvcHost = new TestableMvcTextTemplateHost();
templatePreprocessor = new AspxCSharp.List();
templatePreprocessor.Host = mvcHost;
}
[Test]
public void GetViewPageType_HostViewDataTypeNameIsMyAppMyModel_ReturnsMyAppMyModelSurroundedByAngleBrackets()
{
CreateViewTemplatePreprocessor();
mvcHost.ViewDataTypeName = "MyApp.MyModel";
string viewPageType = templatePreprocessor.GetViewPageType();
Assert.AreEqual("<MyApp.MyModel>", viewPageType);
}
[Test]
public void GetViewPageType_HostViewDataTypeNameIsNull_ReturnsEmptyString()
{
CreateViewTemplatePreprocessor();
mvcHost.ViewDataTypeName = null;
string viewPageType = templatePreprocessor.GetViewPageType();
Assert.AreEqual(String.Empty, viewPageType);
}
[Test]
public void GetViewPageType_HostViewDataTypeNameIsEmptyString_ReturnsEmptyString()
{
CreateViewTemplatePreprocessor();
mvcHost.ViewDataTypeName = String.Empty;
string viewPageType = templatePreprocessor.GetViewPageType();
Assert.AreEqual(String.Empty, viewPageType);
}
[Test]
public void TransformText_ModelHasNoPropertiesAndNoMasterPage_ReturnsFullHtmlPageWithFormAndFieldSetForModel()
{
CreateViewTemplatePreprocessor();
Type modelType = typeof(ModelWithNoProperties);
mvcHost.ViewDataType = modelType;
mvcHost.ViewDataTypeName = modelType.FullName;
mvcHost.ViewName = "MyView";
string output = templatePreprocessor.TransformText();
string expectedOutput =
@"<%@ Page Language=""C#"" Inherits=""System.Web.Mvc.ViewPage<IEnumerable<AspNet.Mvc.Tests.CodeTemplates.Models.ModelWithNoProperties>>"" %>
<!DOCTYPE html>
<html>
<head runat=""server"">
<title>MyView</title>
</head>
<body>
<p>
<%: Html.ActionLink(""Create"", ""Create"") %>
</p>
<table>
<% foreach (var item in Model) { %>
<tr>
<td>
<%: Html.ActionLink(""Edit"", ""Edit"") %> |
<%: Html.ActionLink(""Details"", ""Details"") %> |
<%: Html.ActionLink(""Delete"", ""Delete"") %>
</td>
</tr>
<% } %>
</table>
</body>
</html>
";
Assert.AreEqual(expectedOutput, output);
}
[Test]
public void TransformText_ModelHasNoPropertiesAndIsPartialView_ReturnsControlWithFormAndFieldSetForModel()
{
CreateViewTemplatePreprocessor();
mvcHost.IsPartialView = true;
Type modelType = typeof(ModelWithNoProperties);
mvcHost.ViewDataType = modelType;
mvcHost.ViewDataTypeName = modelType.FullName;
mvcHost.ViewName = "MyView";
string output = templatePreprocessor.TransformText();
string expectedOutput =
@"<%@ Control Language=""C#"" Inherits=""System.Web.Mvc.ViewUserControl<IEnumerable<AspNet.Mvc.Tests.CodeTemplates.Models.ModelWithNoProperties>>"" %>
<p>
<%: Html.ActionLink(""Create"", ""Create"") %>
</p>
<table>
<% foreach (var item in Model) { %>
<tr>
<td>
<%: Html.ActionLink(""Edit"", ""Edit"") %> |
<%: Html.ActionLink(""Details"", ""Details"") %> |
<%: Html.ActionLink(""Delete"", ""Delete"") %>
</td>
</tr>
<% } %>
</table>
";
Assert.AreEqual(expectedOutput, output);
}
[Test]
public void TransformText_ModelHasNoPropertiesAndIsContentPage_ReturnsContentPageWithFormAndFieldSetForModel()
{
CreateViewTemplatePreprocessor();
mvcHost.IsContentPage = true;
Type modelType = typeof(ModelWithNoProperties);
mvcHost.ViewDataType = modelType;
mvcHost.ViewDataTypeName = modelType.FullName;
mvcHost.ViewName = "MyView";
mvcHost.MasterPageFile = "~/Views/Shared/Site.master";
mvcHost.PrimaryContentPlaceHolderID = "Main";
string output = templatePreprocessor.TransformText();
string expectedOutput =
@"<%@ Page Language=""C#"" MasterPageFile=""~/Views/Shared/Site.master"" Inherits=""System.Web.Mvc.ViewPage<IEnumerable<AspNet.Mvc.Tests.CodeTemplates.Models.ModelWithNoProperties>>"" %>
<asp:Content ID=""Content1"" ContentPlaceHolderID=""Title"" runat=""server"">
MyView
</asp:Content>
<asp:Content ID=""Content2"" ContentPlaceHolderID=""Main"" runat=""server"">
<p>
<%: Html.ActionLink(""Create"", ""Create"") %>
</p>
<table>
<% foreach (var item in Model) { %>
<tr>
<td>
<%: Html.ActionLink(""Edit"", ""Edit"") %> |
<%: Html.ActionLink(""Details"", ""Details"") %> |
<%: Html.ActionLink(""Delete"", ""Delete"") %>
</td>
</tr>
<% } %>
</table>
</asp:Content>
";
Assert.AreEqual(expectedOutput, output);
}
}
}

173
src/AddIns/BackendBindings/AspNet.Mvc/Test/Src/CodeTemplates/RazorCSharpListViewTemplateTests.cs

@ -0,0 +1,173 @@ @@ -0,0 +1,173 @@
// 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 AspNet.Mvc.Tests.CodeTemplates.Models;
using AspNet.Mvc.Tests.Helpers;
using CSHtml = ICSharpCode.AspNet.Mvc.CSHtml;
using NUnit.Framework;
namespace AspNet.Mvc.Tests.CodeTemplates
{
[TestFixture]
public class RazorCSharpListViewTemplateTests
{
CSHtml.List templatePreprocessor;
TestableMvcTextTemplateHost mvcHost;
void CreateViewTemplatePreprocessor()
{
mvcHost = new TestableMvcTextTemplateHost();
templatePreprocessor = new CSHtml.List();
templatePreprocessor.Host = mvcHost;
}
[Test]
public void GetModelDirective_HostViewDataTypeNameIsMyAppMyModel_ReturnsRazorModelFollowedByIEnumerableMyAppMyModel()
{
CreateViewTemplatePreprocessor();
mvcHost.ViewDataTypeName = "MyApp.MyModel";
string modelDirective = templatePreprocessor.GetModelDirective();
Assert.AreEqual("@model IEnumerable<MyApp.MyModel>", modelDirective);
}
[Test]
public void GetModelDirective_HostViewDataTypeNameIsNull_ReturnsEmptyString()
{
CreateViewTemplatePreprocessor();
mvcHost.ViewDataTypeName = null;
string modelDirective = templatePreprocessor.GetModelDirective();
Assert.AreEqual(String.Empty, modelDirective);
}
[Test]
public void GetModelDirective_HostViewDataTypeNameIsEmptyString_ReturnsEmptyString()
{
CreateViewTemplatePreprocessor();
mvcHost.ViewDataTypeName = String.Empty;
string modelDirective = templatePreprocessor.GetModelDirective();
Assert.AreEqual(String.Empty, modelDirective);
}
[Test]
public void TransformText_ModelHasNoPropertiesAndNoMasterPage_ReturnsFullHtmlPageWithFormAndFieldSetForModel()
{
CreateViewTemplatePreprocessor();
Type modelType = typeof(ModelWithNoProperties);
mvcHost.ViewDataType = modelType;
mvcHost.ViewDataTypeName = modelType.FullName;
mvcHost.ViewName = "MyView";
string output = templatePreprocessor.TransformText();
string expectedOutput =
@"@model IEnumerable<AspNet.Mvc.Tests.CodeTemplates.Models.ModelWithNoProperties>
<!DOCTYPE html>
<html>
<head runat=""server"">
<title>MyView</title>
</head>
<body>
<p>
@Html.ActionLink(""Create"", ""Create"")
</p>
<table>
@foreach (var item in Model) {
<tr>
<td>
@Html.ActionLink(""Edit"", ""Edit"") |
@Html.ActionLink(""Details"", ""Details"") |
@Html.ActionLink(""Delete"", ""Delete"")
</td>
</tr>
}
</table>
</body>
</html>
";
Assert.AreEqual(expectedOutput, output);
}
[Test]
public void TransformText_ModelHasNoPropertiesAndIsPartialView_ReturnsControlWithFormAndFieldSetForModel()
{
CreateViewTemplatePreprocessor();
mvcHost.IsPartialView = true;
Type modelType = typeof(ModelWithNoProperties);
mvcHost.ViewDataType = modelType;
mvcHost.ViewDataTypeName = modelType.FullName;
mvcHost.ViewName = "MyView";
string output = templatePreprocessor.TransformText();
string expectedOutput =
@"@model IEnumerable<AspNet.Mvc.Tests.CodeTemplates.Models.ModelWithNoProperties>
<p>
@Html.ActionLink(""Create"", ""Create"")
</p>
<table>
@foreach (var item in Model) {
<tr>
<td>
@Html.ActionLink(""Edit"", ""Edit"") |
@Html.ActionLink(""Details"", ""Details"") |
@Html.ActionLink(""Delete"", ""Delete"")
</td>
</tr>
}
</table>
";
Assert.AreEqual(expectedOutput, output);
}
[Test]
public void TransformText_ModelHasNoPropertiesAndIsContentPage_ReturnsContentPageWithFormAndFieldSetForModel()
{
CreateViewTemplatePreprocessor();
mvcHost.IsContentPage = true;
Type modelType = typeof(ModelWithNoProperties);
mvcHost.ViewDataType = modelType;
mvcHost.ViewDataTypeName = modelType.FullName;
mvcHost.ViewName = "MyView";
mvcHost.MasterPageFile = "~/Views/Shared/Site.master";
mvcHost.PrimaryContentPlaceHolderID = "Main";
string output = templatePreprocessor.TransformText();
string expectedOutput =
@"@model IEnumerable<AspNet.Mvc.Tests.CodeTemplates.Models.ModelWithNoProperties>
@{
ViewBag.Title = ""MyView"";
Layout = ""~/Views/Shared/Site.master"";
}
<h2>MyView</h2>
<p>
@Html.ActionLink(""Create"", ""Create"")
</p>
<table>
@foreach (var item in Model) {
<tr>
<td>
@Html.ActionLink(""Edit"", ""Edit"") |
@Html.ActionLink(""Details"", ""Details"") |
@Html.ActionLink(""Delete"", ""Delete"")
</td>
</tr>
}
</table>
";
Assert.AreEqual(expectedOutput, output);
}
}
}
Loading…
Cancel
Save