Browse Source

Do not show controllers in list of models in ASP.NET MVC Add View dialog.

pull/18/head
Matt Ward 14 years ago
parent
commit
b6c483150a
  1. 2
      src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/AddMvcViewToProjectViewModel.cs
  2. 3
      src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/IMvcClass.cs
  3. 15
      src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/MvcClass.cs
  4. 21
      src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/MvcModelClassLocator.cs
  5. 4
      src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/MvcModelClassViewModel.cs
  6. 4
      src/AddIns/BackendBindings/AspNet.Mvc/Test/AspNet.Mvc.Tests.csproj
  7. 24
      src/AddIns/BackendBindings/AspNet.Mvc/Test/Helpers/FakeClass.cs
  8. 7
      src/AddIns/BackendBindings/AspNet.Mvc/Test/Helpers/FakeMvcClass.cs
  9. 9
      src/AddIns/BackendBindings/AspNet.Mvc/Test/Helpers/FakeMvcParserService.cs
  10. 11
      src/AddIns/BackendBindings/AspNet.Mvc/Test/Helpers/FakeMvcProjectContent.cs
  11. 75
      src/AddIns/BackendBindings/AspNet.Mvc/Test/Src/MvcClassTests.cs
  12. 31
      src/AddIns/BackendBindings/AspNet.Mvc/Test/Src/MvcModelClassLocatorTests.cs
  13. 4
      src/AddIns/BackendBindings/AspNet.Mvc/Test/Src/MvcModelClassViewModelTests.cs
  14. 2
      src/AddIns/BackendBindings/AspNet.Mvc/Test/Src/MvcProjectTests.cs

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

@ -139,7 +139,7 @@ namespace ICSharpCode.AspNet.Mvc @@ -139,7 +139,7 @@ namespace ICSharpCode.AspNet.Mvc
{
if (IsStronglyTypedView) {
if (SelectedModelClass != null) {
return SelectedModelClass.FullyQualifiedName;
return SelectedModelClass.FullName;
}
return ModelClassName.Trim();
}

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

@ -7,8 +7,9 @@ namespace ICSharpCode.AspNet.Mvc @@ -7,8 +7,9 @@ namespace ICSharpCode.AspNet.Mvc
{
public interface IMvcClass
{
string FullyQualifiedName { get; }
string FullName { get; }
string Name { get; }
string Namespace { get; }
string BaseClassFullName { get; }
}
}

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

@ -15,7 +15,7 @@ namespace ICSharpCode.AspNet.Mvc @@ -15,7 +15,7 @@ namespace ICSharpCode.AspNet.Mvc
this.c = c;
}
public string FullyQualifiedName {
public string FullName {
get { return c.FullyQualifiedName; }
}
@ -26,5 +26,18 @@ namespace ICSharpCode.AspNet.Mvc @@ -26,5 +26,18 @@ namespace ICSharpCode.AspNet.Mvc
public string Namespace {
get { return c.Namespace; }
}
public string BaseClassFullName {
get { return GetBaseClassFullName(); }
}
string GetBaseClassFullName()
{
IClass baseClass = c.BaseClass;
if (baseClass != null) {
return baseClass.FullyQualifiedName;
}
return String.Empty;
}
}
}

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

@ -22,12 +22,14 @@ namespace ICSharpCode.AspNet.Mvc @@ -22,12 +22,14 @@ namespace ICSharpCode.AspNet.Mvc
public IEnumerable<IMvcClass> GetModelClasses(IMvcProject project)
{
foreach (IMvcClass c in GetClasses(project)) {
yield return c;
foreach (IMvcClass c in GetAllClassesInProject(project)) {
if (IsModelClass(c)) {
yield return c;
}
}
}
IEnumerable<IMvcClass> GetClasses(IMvcProject project)
IEnumerable<IMvcClass> GetAllClassesInProject(IMvcProject project)
{
IMvcProjectContent projectContent = GetProjectContent(project);
return projectContent.GetClasses();
@ -37,5 +39,18 @@ namespace ICSharpCode.AspNet.Mvc @@ -37,5 +39,18 @@ namespace ICSharpCode.AspNet.Mvc
{
return parserService.GetProjectContent(project);
}
bool IsModelClass(IMvcClass c)
{
if (IsBaseClassMvcController(c)) {
return false;
}
return true;
}
bool IsBaseClassMvcController(IMvcClass c)
{
return c.BaseClassFullName == "System.Web.Mvc.Controller";
}
}
}

4
src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/MvcModelClassViewModel.cs

@ -31,8 +31,8 @@ namespace ICSharpCode.AspNet.Mvc @@ -31,8 +31,8 @@ namespace ICSharpCode.AspNet.Mvc
return Name;
}
public string FullyQualifiedName {
get { return mvcClass.FullyQualifiedName; }
public string FullName {
get { return mvcClass.FullName; }
}
}
}

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

@ -50,6 +50,7 @@ @@ -50,6 +50,7 @@
<Link>Configuration\GlobalAssemblyInfo.cs</Link>
</Compile>
<Compile Include="Helpers\FakeAddMvcItemToProjectView.cs" />
<Compile Include="Helpers\FakeClass.cs" />
<Compile Include="Helpers\FakeMvcModelClassLocator.cs" />
<Compile Include="Helpers\FakeMvcClass.cs" />
<Compile Include="Helpers\FakeMvcControllerFileGenerator.cs" />
@ -73,7 +74,8 @@ @@ -73,7 +74,8 @@
<Compile Include="Src\IsMvcControllerFolderSelectedConditionEvaluatorTests.cs" />
<Compile Include="Src\IsMvcViewFolderSelectedConditionEvaluatorTests.cs" />
<Compile Include="Configuration\AssemblyInfo.cs" />
<Compile Include="Src\ModelClassLocatorTests.cs" />
<Compile Include="Src\MvcClassTests.cs" />
<Compile Include="Src\MvcModelClassLocatorTests.cs" />
<Compile Include="Src\MvcControllerFileGeneratorTests.cs" />
<Compile Include="Src\MvcControllerFileNameTests.cs" />
<Compile Include="Src\MvcModelClassViewModelTests.cs" />

24
src/AddIns/BackendBindings/AspNet.Mvc/Test/Helpers/FakeClass.cs

@ -0,0 +1,24 @@ @@ -0,0 +1,24 @@
// 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 ICSharpCode.SharpDevelop.Dom;
namespace AspNet.Mvc.Tests.Helpers
{
public class FakeClass : DefaultClass
{
public FakeClass(string name)
: base(new DefaultCompilationUnit(new DefaultProjectContent()), name)
{
}
public FakeClass AddBaseClass(string name)
{
var baseClass = new FakeClass(name);
var returnType = new DefaultReturnType(baseClass);
BaseTypes.Add(returnType);
return baseClass;
}
}
}

7
src/AddIns/BackendBindings/AspNet.Mvc/Test/Helpers/FakeMvcClass.cs

@ -8,9 +8,9 @@ namespace AspNet.Mvc.Tests.Helpers @@ -8,9 +8,9 @@ namespace AspNet.Mvc.Tests.Helpers
{
public class FakeMvcClass : IMvcClass
{
public FakeMvcClass(string fullyQualifiedName)
public FakeMvcClass(string fullName)
{
this.FullyQualifiedName = fullyQualifiedName;
this.FullName = fullName;
}
public FakeMvcClass(string @namespace, string name)
@ -19,8 +19,9 @@ namespace AspNet.Mvc.Tests.Helpers @@ -19,8 +19,9 @@ namespace AspNet.Mvc.Tests.Helpers
this.Name = name;
}
public string FullyQualifiedName { get; set; }
public string FullName { get; set; }
public string Name { get; set; }
public string Namespace { get; set; }
public string BaseClassFullName { get; set; }
}
}

9
src/AddIns/BackendBindings/AspNet.Mvc/Test/Helpers/FakeMvcParserService.cs

@ -17,9 +17,14 @@ namespace AspNet.Mvc.Tests.Helpers @@ -17,9 +17,14 @@ namespace AspNet.Mvc.Tests.Helpers
return FakeMvcProjectContent;
}
public void AddModelClassToProjectContent(string fullyQualifiedClassName)
public FakeMvcClass AddModelClassToProjectContent(string fullyQualifiedClassName)
{
FakeMvcProjectContent.AddFakeClass(fullyQualifiedClassName);
return FakeMvcProjectContent.AddFakeClass(fullyQualifiedClassName);
}
public FakeMvcClass AddModelClassWithBaseClassToProjectContent(string baseClassName, string className)
{
return FakeMvcProjectContent.AddFakeClassWithBaseClass(baseClassName, className);
}
}
}

11
src/AddIns/BackendBindings/AspNet.Mvc/Test/Helpers/FakeMvcProjectContent.cs

@ -16,10 +16,19 @@ namespace AspNet.Mvc.Tests.Helpers @@ -16,10 +16,19 @@ namespace AspNet.Mvc.Tests.Helpers
return FakeClasses;
}
public void AddFakeClass(string fullyQualifiedClassName)
public FakeMvcClass AddFakeClass(string fullyQualifiedClassName)
{
var fakeClass = new FakeMvcClass(fullyQualifiedClassName);
FakeClasses.Add(fakeClass);
return fakeClass;
}
public FakeMvcClass AddFakeClassWithBaseClass(string baseClassName, string className)
{
var fakeClass = new FakeMvcClass(className);
fakeClass.BaseClassFullName = baseClassName;
FakeClasses.Add(fakeClass);
return fakeClass;
}
}
}

75
src/AddIns/BackendBindings/AspNet.Mvc/Test/Src/MvcClassTests.cs

@ -0,0 +1,75 @@ @@ -0,0 +1,75 @@
// 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.Helpers;
using ICSharpCode.AspNet.Mvc;
using ICSharpCode.SharpDevelop.Dom;
using NUnit.Framework;
namespace AspNet.Mvc.Tests
{
[TestFixture]
public class MvcClassTests
{
MvcClass mvcClass;
FakeClass fakeClass;
void CreateClass(string name)
{
fakeClass = new FakeClass(name);
mvcClass = new MvcClass(fakeClass);
}
void AddBaseClass(string name)
{
fakeClass.AddBaseClass(name);
}
[Test]
public void FullName_ClassIsICSharpCodeTestClass_ReturnsICSharpCodeTestClass()
{
CreateClass("ICSharpCode.TestClass");
string name = mvcClass.FullName;
Assert.AreEqual("ICSharpCode.TestClass", name);
}
[Test]
public void Namespace_ClassIsICSharpCodeTestClass_ReturnsICSharpCode()
{
CreateClass("ICSharpCode.TestClass");
string @namespace = mvcClass.Namespace;
Assert.AreEqual("ICSharpCode", @namespace);
}
[Test]
public void Name_ClassIsICSharpCodeTestClass_ReturnsTestClass()
{
CreateClass("ICSharpCode.TestClass");
string name = mvcClass.Name;
Assert.AreEqual("TestClass", name);
}
[Test]
public void BaseClassFullName_ClassHasNoBaseClass_ReturnsEmptyString()
{
CreateClass("ICSharpCode.TestClass");
string name = mvcClass.BaseClassFullName;
Assert.AreEqual(String.Empty, name);
}
[Test]
public void BaseClassFullName_ClassHasBaseClass_ReturnsBaseClassName()
{
CreateClass("ICSharpCode.TestClass");
AddBaseClass("ICSharpCode.BaseClass");
string name = mvcClass.BaseClassFullName;
Assert.AreEqual("ICSharpCode.BaseClass", name);
}
}
}

31
src/AddIns/BackendBindings/AspNet.Mvc/Test/Src/ModelClassLocatorTests.cs → src/AddIns/BackendBindings/AspNet.Mvc/Test/Src/MvcModelClassLocatorTests.cs

@ -11,7 +11,7 @@ using NUnit.Framework; @@ -11,7 +11,7 @@ using NUnit.Framework;
namespace AspNet.Mvc.Tests
{
[TestFixture]
public class ModelClassLocatorTests
public class MvcModelClassLocatorTests
{
MvcModelClassLocator locator;
FakeMvcProject fakeProject;
@ -29,14 +29,24 @@ namespace AspNet.Mvc.Tests @@ -29,14 +29,24 @@ namespace AspNet.Mvc.Tests
return locator.GetModelClasses(fakeProject).ToList();
}
void AddModelClass(string fullyQualifiedClassName)
FakeMvcClass AddModelClass(string className)
{
fakeParserService.AddModelClassToProjectContent(fullyQualifiedClassName);
return fakeParserService.AddModelClassToProjectContent(className);
}
FakeMvcClass AddModelClassWithBaseClass(string baseClassName, string className)
{
return fakeParserService.AddModelClassWithBaseClassToProjectContent(baseClassName, className);
}
string GetFirstModelClassName()
{
return GetModelClasses().First().FullyQualifiedName;
return GetModelClasses().First().FullName;
}
int GetModelClassCount()
{
return GetModelClasses().Count;
}
[Test]
@ -54,7 +64,7 @@ namespace AspNet.Mvc.Tests @@ -54,7 +64,7 @@ namespace AspNet.Mvc.Tests
{
CreateLocator();
AddModelClass("MyNamespace.MyClass");
int count = GetModelClasses().Count;
int count = GetModelClassCount();
Assert.AreEqual(1, count);
}
@ -67,5 +77,16 @@ namespace AspNet.Mvc.Tests @@ -67,5 +77,16 @@ namespace AspNet.Mvc.Tests
Assert.AreEqual(fakeProject, fakeParserService.ProjectPassedToGetProjectContent);
}
[Test]
public void GetModelClasses_ControllerClassInProject_ControllerClassNotReturnedInModelClasses()
{
CreateLocator();
AddModelClassWithBaseClass("System.Web.Mvc.Controller", "ICSharpCode.FooController");
GetModelClasses();
int count = GetModelClassCount();
Assert.AreEqual(0, count);
}
}
}

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

@ -45,10 +45,10 @@ namespace AspNet.Mvc.Tests @@ -45,10 +45,10 @@ namespace AspNet.Mvc.Tests
}
[Test]
public void FullyQualifiedName_ClassHasNamespaceAndName_ReturnsFullyQualifiedClassName()
public void FullName_ClassHasNamespaceAndName_ReturnsFullyQualifiedClassName()
{
CreateViewModel("ICSharpCode.Tests.MyClass");
string name = viewModel.FullyQualifiedName;
string name = viewModel.FullName;
Assert.AreEqual("ICSharpCode.Tests.MyClass", name);
}

2
src/AddIns/BackendBindings/AspNet.Mvc/Test/Src/MvcProjectTests.cs

@ -86,7 +86,7 @@ namespace AspNet.Mvc.Tests @@ -86,7 +86,7 @@ namespace AspNet.Mvc.Tests
string[] modelClasses = project
.GetModelClasses()
.Select(m => m.FullyQualifiedName)
.Select(m => m.FullName)
.ToArray();
string[] expectedModelClasses = new string[] {

Loading…
Cancel
Save