Browse Source

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

pull/18/head
Matt Ward 14 years ago
parent
commit
8da9260c33
  1. 10
      src/AddIns/BackendBindings/AspNet.Mvc/Project/AspNet.Mvc.csproj
  2. 451
      src/AddIns/BackendBindings/AspNet.Mvc/Project/ItemTemplates/CSharp/CodeTemplates/AddView/AspxCSharp/Create.cs
  3. 70
      src/AddIns/BackendBindings/AspNet.Mvc/Project/ItemTemplates/CSharp/CodeTemplates/AddView/AspxCSharp/Create.tt
  4. 67
      src/AddIns/BackendBindings/AspNet.Mvc/Project/ItemTemplates/CSharp/CodeTemplates/AddView/AspxCSharp/Empty.cs
  5. 67
      src/AddIns/BackendBindings/AspNet.Mvc/Project/ItemTemplates/CSharp/CodeTemplates/AddView/CSHTML/Empty.cs
  6. 1
      src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/MvcTextTemplateHost.cs
  7. 3
      src/AddIns/BackendBindings/AspNet.Mvc/Test/AspNet.Mvc.Tests.csproj
  8. 169
      src/AddIns/BackendBindings/AspNet.Mvc/Test/Src/CodeTemplates/AspxCSharpCreateViewTemplateTests.cs
  9. 14
      src/AddIns/BackendBindings/AspNet.Mvc/Test/Src/CodeTemplates/Models/ModelWithNoProperties.cs

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

@ -47,6 +47,10 @@ @@ -47,6 +47,10 @@
<Compile Include="..\..\..\..\Main\GlobalAssemblyInfo.cs">
<Link>Configuration\GlobalAssemblyInfo.cs</Link>
</Compile>
<Compile Include="ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\Create.cs">
<DependentUpon>Create.tt</DependentUpon>
<AutoGen>True</AutoGen>
</Compile>
<Compile Include="ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\Empty.cs">
<DependentUpon>Empty.tt</DependentUpon>
</Compile>
@ -190,6 +194,12 @@ @@ -190,6 +194,12 @@
<LastGenOutput>Controller.cs</LastGenOutput>
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Include="ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\Create.tt">
<Generator>TextTemplatingFilePreprocessor</Generator>
<CustomToolNamespace>ICSharpCode.AspNet.Mvc.AspxCSharp</CustomToolNamespace>
<LastGenOutput>Create.cs</LastGenOutput>
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Include="ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\Empty.tt">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
<Generator>TextTemplatingFilePreprocessor</Generator>

451
src/AddIns/BackendBindings/AspNet.Mvc/Project/ItemTemplates/CSharp/CodeTemplates/AddView/AspxCSharp/Create.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 Create : CreateBase {
private global::Microsoft.VisualStudio.TextTemplating.ITextTemplatingEngineHost hostValue;
#line 57 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\Create.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\Create.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\Create.tt"
this.Write("<%@ Control Language=\"C#\" Inherits=\"System.Web.Mvc.ViewUserControl");
#line default
#line hidden
#line 4 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\Create.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\Create.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\Create.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\Create.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\Create.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\Create.tt"
this.Write("\" Inherits=\"System.Web.Mvc.ViewPage");
#line default
#line hidden
#line 7 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\Create.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\Create.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\Create.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\Create.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\Create.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\Create.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\Create.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\Create.tt"
this.Write("<%@ Page Language=\"C#\" Inherits=\"System.Web.Mvc.ViewPage");
#line default
#line hidden
#line 18 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\Create.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\Create.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\Create.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\Create.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\Create.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\Create.tt"
this.Write("<% using (Html.BeginForm()) { %>\r\n\t<%: Html.ValidationSummary(true) %>\r\n\t<fieldse" +
"t>\r\n\t\t<legend>");
#line default
#line hidden
#line 33 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\Create.tt"
this.Write(this.ToStringHelper.ToStringWithCulture( MvcHost.ViewDataType.Name ));
#line default
#line hidden
#line 33 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\Create.tt"
this.Write("</legend>\r\n\t\t\r\n\t\t<p>\r\n\t\t\t<input type=\"submit\" value=\"Create\"/>\r\n\t\t</p>\r\n\t</fields" +
"et>\r\n<% } %>\r\n<div>\r\n\t<%: Html.ActionLink(\"Back\", \"Index\") %>\r\n</div>\r\n");
#line default
#line hidden
#line 43 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\Create.tt"
if (MvcHost.IsPartialView) {
// Do nothing.
} else if (MvcHost.IsContentPage) {
PopIndent();
#line default
#line hidden
#line 49 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\Create.tt"
this.Write("</asp:Content>\r\n");
#line default
#line hidden
#line 50 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\Create.tt"
} else {
PopIndent();
#line default
#line hidden
#line 54 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\Create.tt"
this.Write("\t</body>\r\n</html>\r\n");
#line default
#line hidden
#line 56 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\Create.tt"
}
#line default
#line hidden
return this.GenerationEnvironment.ToString();
}
protected virtual void Initialize() {
}
}
public class CreateBase {
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();
}
}
}
}

70
src/AddIns/BackendBindings/AspNet.Mvc/Project/ItemTemplates/CSharp/CodeTemplates/AddView/AspxCSharp/Create.tt

@ -0,0 +1,70 @@ @@ -0,0 +1,70 @@
<#@ template language="C#" HostSpecific="true" #>
<#@ import namespace="ICSharpCode.AspNet.Mvc" #>
<# if (MvcHost.IsPartialView) { #>
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<#= GetViewPageType() #>" %>
<# } else if (MvcHost.IsContentPage) { #>
<%@ Page Language="C#" 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("\t");
} else {
#>
<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage<#= GetViewPageType() #>" %>
<!DOCTYPE html>
<html>
<head runat="server">
<title><#= MvcHost.ViewName #></title>
</head>
<body>
<#
PushIndent("\t\t");
}
#>
<% using (Html.BeginForm()) { %>
<%: Html.ValidationSummary(true) %>
<fieldset>
<legend><#= MvcHost.ViewDataType.Name #></legend>
<p>
<input type="submit" value="Create"/>
</p>
</fieldset>
<% } %>
<div>
<%: Html.ActionLink("Back", "Index") %>
</div>
<#
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;
}
#>

67
src/AddIns/BackendBindings/AspNet.Mvc/Project/ItemTemplates/CSharp/CodeTemplates/AddView/AspxCSharp/Empty.cs

@ -194,6 +194,8 @@ namespace ICSharpCode.AspNet.Mvc.AspxCSharp { @@ -194,6 +194,8 @@ namespace ICSharpCode.AspNet.Mvc.AspxCSharp {
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 {
@ -278,22 +280,73 @@ namespace ICSharpCode.AspNet.Mvc.AspxCSharp { @@ -278,22 +280,73 @@ namespace ICSharpCode.AspNet.Mvc.AspxCSharp {
}
public void Write(string textToAppend) {
this.GenerationEnvironment.Append(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.GenerationEnvironment.AppendFormat(format, args);
this.Write(string.Format(format, args));
}
public void WriteLine(string textToAppend) {
this.GenerationEnvironment.Append(this.currentIndent);
this.GenerationEnvironment.AppendLine(textToAppend);
this.Write(textToAppend);
this.GenerationEnvironment.AppendLine();
this.endsWithNewline = true;
}
public void WriteLine(string format, params object[] args) {
this.GenerationEnvironment.Append(this.currentIndent);
this.GenerationEnvironment.AppendFormat(format, args);
this.GenerationEnvironment.AppendLine();
this.WriteLine(string.Format(format, args));
}
public class ToStringInstanceHelper {

67
src/AddIns/BackendBindings/AspNet.Mvc/Project/ItemTemplates/CSharp/CodeTemplates/AddView/CSHTML/Empty.cs

@ -163,6 +163,8 @@ namespace ICSharpCode.AspNet.Mvc.CSHtml { @@ -163,6 +163,8 @@ namespace ICSharpCode.AspNet.Mvc.CSHtml {
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 {
@ -247,22 +249,73 @@ namespace ICSharpCode.AspNet.Mvc.CSHtml { @@ -247,22 +249,73 @@ namespace ICSharpCode.AspNet.Mvc.CSHtml {
}
public void Write(string textToAppend) {
this.GenerationEnvironment.Append(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.GenerationEnvironment.AppendFormat(format, args);
this.Write(string.Format(format, args));
}
public void WriteLine(string textToAppend) {
this.GenerationEnvironment.Append(this.currentIndent);
this.GenerationEnvironment.AppendLine(textToAppend);
this.Write(textToAppend);
this.GenerationEnvironment.AppendLine();
this.endsWithNewline = true;
}
public void WriteLine(string format, params object[] args) {
this.GenerationEnvironment.Append(this.currentIndent);
this.GenerationEnvironment.AppendFormat(format, args);
this.GenerationEnvironment.AppendLine();
this.WriteLine(string.Format(format, args));
}
public class ToStringInstanceHelper {

1
src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/MvcTextTemplateHost.cs

@ -74,6 +74,7 @@ namespace ICSharpCode.AspNet.Mvc @@ -74,6 +74,7 @@ namespace ICSharpCode.AspNet.Mvc
}
return viewDataType;
}
set { viewDataType = value; }
}
Type GetViewDataType()

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

@ -85,7 +85,9 @@ @@ -85,7 +85,9 @@
<Compile Include="Src\AddMvcViewToProjectCommandTests.cs" />
<Compile Include="Src\AddMvcViewToProjectViewModelTests.cs" />
<Compile Include="Src\BooleanToVisibilityConverterTests.cs" />
<Compile Include="Src\CodeTemplates\AspxCSharpCreateViewTemplateTests.cs" />
<Compile Include="Src\CodeTemplates\AspxCSharpEmptyViewTemplateTests.cs" />
<Compile Include="Src\CodeTemplates\Models\ModelWithNoProperties.cs" />
<Compile Include="Src\CodeTemplates\RazorCSharpEmptyViewTemplateTests.cs" />
<Compile Include="Src\IsMvcControllerFolderSelectedConditionEvaluatorTests.cs" />
<Compile Include="Src\IsMvcViewFolderSelectedConditionEvaluatorTests.cs" />
@ -132,6 +134,7 @@ @@ -132,6 +134,7 @@
<ItemGroup>
<Folder Include="Helpers" />
<Folder Include="Src\CodeTemplates" />
<Folder Include="Src\CodeTemplates\Models" />
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.Targets" />
</Project>

169
src/AddIns/BackendBindings/AspNet.Mvc/Test/Src/CodeTemplates/AspxCSharpCreateViewTemplateTests.cs

@ -0,0 +1,169 @@ @@ -0,0 +1,169 @@
// 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 ICSharpCode.AspNet.Mvc.AspxCSharp;
using NUnit.Framework;
namespace AspNet.Mvc.Tests.CodeTemplates
{
[TestFixture]
public class AspxCSharpCreateViewTemplateTests
{
Create templatePreprocessor;
TestableMvcTextTemplateHost mvcHost;
void CreateViewTemplatePreprocessor()
{
mvcHost = new TestableMvcTextTemplateHost();
templatePreprocessor = new Create();
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<AspNet.Mvc.Tests.CodeTemplates.Models.ModelWithNoProperties>"" %>
<!DOCTYPE html>
<html>
<head runat=""server"">
<title>MyView</title>
</head>
<body>
<% using (Html.BeginForm()) { %>
<%: Html.ValidationSummary(true) %>
<fieldset>
<legend>ModelWithNoProperties</legend>
<p>
<input type=""submit"" value=""Create""/>
</p>
</fieldset>
<% } %>
<div>
<%: Html.ActionLink(""Back"", ""Index"") %>
</div>
</body>
</html>
";
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<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"">
<% using (Html.BeginForm()) { %>
<%: Html.ValidationSummary(true) %>
<fieldset>
<legend>ModelWithNoProperties</legend>
<p>
<input type=""submit"" value=""Create""/>
</p>
</fieldset>
<% } %>
<div>
<%: Html.ActionLink(""Back"", ""Index"") %>
</div>
</asp:Content>
";
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<AspNet.Mvc.Tests.CodeTemplates.Models.ModelWithNoProperties>"" %>
<% using (Html.BeginForm()) { %>
<%: Html.ValidationSummary(true) %>
<fieldset>
<legend>ModelWithNoProperties</legend>
<p>
<input type=""submit"" value=""Create""/>
</p>
</fieldset>
<% } %>
<div>
<%: Html.ActionLink(""Back"", ""Index"") %>
</div>
";
Assert.AreEqual(expectedOutput, output);
}
}
}

14
src/AddIns/BackendBindings/AspNet.Mvc/Test/Src/CodeTemplates/Models/ModelWithNoProperties.cs

@ -0,0 +1,14 @@ @@ -0,0 +1,14 @@
// 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 AspNet.Mvc.Tests.CodeTemplates.Models
{
/// <summary>
/// Model used in T4 template tests.
/// </summary>
public class ModelWithNoProperties
{
}
}
Loading…
Cancel
Save