Browse Source

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

pull/18/head
Matt Ward 15 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
{ {
if (IsStronglyTypedView) { if (IsStronglyTypedView) {
if (SelectedModelClass != null) { if (SelectedModelClass != null) {
return SelectedModelClass.FullyQualifiedName; return SelectedModelClass.FullName;
} }
return ModelClassName.Trim(); return ModelClassName.Trim();
} }

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

@ -7,8 +7,9 @@ namespace ICSharpCode.AspNet.Mvc
{ {
public interface IMvcClass public interface IMvcClass
{ {
string FullyQualifiedName { get; } string FullName { get; }
string Name { get; } string Name { get; }
string Namespace { 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
this.c = c; this.c = c;
} }
public string FullyQualifiedName { public string FullName {
get { return c.FullyQualifiedName; } get { return c.FullyQualifiedName; }
} }
@ -26,5 +26,18 @@ namespace ICSharpCode.AspNet.Mvc
public string Namespace { public string Namespace {
get { return c.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
public IEnumerable<IMvcClass> GetModelClasses(IMvcProject project) public IEnumerable<IMvcClass> GetModelClasses(IMvcProject project)
{ {
foreach (IMvcClass c in GetClasses(project)) { foreach (IMvcClass c in GetAllClassesInProject(project)) {
yield return c; if (IsModelClass(c)) {
yield return c;
}
} }
} }
IEnumerable<IMvcClass> GetClasses(IMvcProject project) IEnumerable<IMvcClass> GetAllClassesInProject(IMvcProject project)
{ {
IMvcProjectContent projectContent = GetProjectContent(project); IMvcProjectContent projectContent = GetProjectContent(project);
return projectContent.GetClasses(); return projectContent.GetClasses();
@ -37,5 +39,18 @@ namespace ICSharpCode.AspNet.Mvc
{ {
return parserService.GetProjectContent(project); 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
return Name; return Name;
} }
public string FullyQualifiedName { public string FullName {
get { return mvcClass.FullyQualifiedName; } get { return mvcClass.FullName; }
} }
} }
} }

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

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

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

@ -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
{ {
public class FakeMvcClass : IMvcClass public class FakeMvcClass : IMvcClass
{ {
public FakeMvcClass(string fullyQualifiedName) public FakeMvcClass(string fullName)
{ {
this.FullyQualifiedName = fullyQualifiedName; this.FullName = fullName;
} }
public FakeMvcClass(string @namespace, string name) public FakeMvcClass(string @namespace, string name)
@ -19,8 +19,9 @@ namespace AspNet.Mvc.Tests.Helpers
this.Name = name; this.Name = name;
} }
public string FullyQualifiedName { get; set; } public string FullName { get; set; }
public string Name { get; set; } public string Name { get; set; }
public string Namespace { 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
return FakeMvcProjectContent; 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
return FakeClasses; return FakeClasses;
} }
public void AddFakeClass(string fullyQualifiedClassName) public FakeMvcClass AddFakeClass(string fullyQualifiedClassName)
{ {
var fakeClass = new FakeMvcClass(fullyQualifiedClassName); var fakeClass = new FakeMvcClass(fullyQualifiedClassName);
FakeClasses.Add(fakeClass); 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 @@
// 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;
namespace AspNet.Mvc.Tests namespace AspNet.Mvc.Tests
{ {
[TestFixture] [TestFixture]
public class ModelClassLocatorTests public class MvcModelClassLocatorTests
{ {
MvcModelClassLocator locator; MvcModelClassLocator locator;
FakeMvcProject fakeProject; FakeMvcProject fakeProject;
@ -29,14 +29,24 @@ namespace AspNet.Mvc.Tests
return locator.GetModelClasses(fakeProject).ToList(); 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() string GetFirstModelClassName()
{ {
return GetModelClasses().First().FullyQualifiedName; return GetModelClasses().First().FullName;
}
int GetModelClassCount()
{
return GetModelClasses().Count;
} }
[Test] [Test]
@ -54,7 +64,7 @@ namespace AspNet.Mvc.Tests
{ {
CreateLocator(); CreateLocator();
AddModelClass("MyNamespace.MyClass"); AddModelClass("MyNamespace.MyClass");
int count = GetModelClasses().Count; int count = GetModelClassCount();
Assert.AreEqual(1, count); Assert.AreEqual(1, count);
} }
@ -67,5 +77,16 @@ namespace AspNet.Mvc.Tests
Assert.AreEqual(fakeProject, fakeParserService.ProjectPassedToGetProjectContent); 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
} }
[Test] [Test]
public void FullyQualifiedName_ClassHasNamespaceAndName_ReturnsFullyQualifiedClassName() public void FullName_ClassHasNamespaceAndName_ReturnsFullyQualifiedClassName()
{ {
CreateViewModel("ICSharpCode.Tests.MyClass"); CreateViewModel("ICSharpCode.Tests.MyClass");
string name = viewModel.FullyQualifiedName; string name = viewModel.FullName;
Assert.AreEqual("ICSharpCode.Tests.MyClass", name); Assert.AreEqual("ICSharpCode.Tests.MyClass", name);
} }

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

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

Loading…
Cancel
Save