Browse Source

Determine whether a class is a possible MVC model class in the MvcClass itself.

pull/18/head
Matt Ward 15 years ago
parent
commit
d0945f7480
  1. 2
      src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/IMvcClass.cs
  2. 34
      src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/MvcClass.cs
  3. 32
      src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/MvcModelClassLocator.cs
  4. 2
      src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/MvcParserService.cs
  5. 6
      src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/MvcProjectContent.cs
  6. 12
      src/AddIns/BackendBindings/AspNet.Mvc/Test/Helpers/FakeMvcClass.cs
  7. 90
      src/AddIns/BackendBindings/AspNet.Mvc/Test/Src/MvcClassTests.cs
  8. 52
      src/AddIns/BackendBindings/AspNet.Mvc/Test/Src/MvcModelClassLocatorTests.cs

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

@ -12,5 +12,7 @@ namespace ICSharpCode.AspNet.Mvc
string Namespace { get; } string Namespace { get; }
string BaseClassFullName { get; } string BaseClassFullName { get; }
string AssemblyLocation { get; } string AssemblyLocation { get; }
bool IsModelClass();
} }
} }

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

@ -10,10 +10,12 @@ namespace ICSharpCode.AspNet.Mvc
public class MvcClass : IMvcClass public class MvcClass : IMvcClass
{ {
IClass c; IClass c;
IMvcProject project;
public MvcClass(IClass c) public MvcClass(IClass c, IMvcProject project)
{ {
this.c = c; this.c = c;
this.project = project;
} }
public string FullName { public string FullName {
@ -55,5 +57,35 @@ namespace ICSharpCode.AspNet.Mvc
{ {
return c.ProjectContent.Project as IProject; return c.ProjectContent.Project as IProject;
} }
public bool IsModelClass()
{
if (IsBaseClassMvcController()) {
return false;
} else if (IsHttpApplication()) {
return false;
} else if (IsVisualBasicClassFromMyNamespace()) {
return false;
}
return true;
}
bool IsHttpApplication()
{
return BaseClassFullName == "System.Web.HttpApplication";
}
bool IsBaseClassMvcController()
{
return BaseClassFullName == "System.Web.Mvc.Controller";
}
bool IsVisualBasicClassFromMyNamespace()
{
if (project.GetTemplateLanguage().IsVisualBasic()) {
return FullName.Contains(".My.");
}
return false;
}
} }
} }

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

@ -23,7 +23,7 @@ namespace ICSharpCode.AspNet.Mvc
public IEnumerable<IMvcClass> GetModelClasses(IMvcProject project) public IEnumerable<IMvcClass> GetModelClasses(IMvcProject project)
{ {
foreach (IMvcClass c in GetAllClassesInProject(project)) { foreach (IMvcClass c in GetAllClassesInProject(project)) {
if (IsModelClass(c, project)) { if (c.IsModelClass()) {
yield return c; yield return c;
} }
} }
@ -39,35 +39,5 @@ namespace ICSharpCode.AspNet.Mvc
{ {
return parserService.GetProjectContent(project); return parserService.GetProjectContent(project);
} }
bool IsModelClass(IMvcClass c, IMvcProject project)
{
if (IsBaseClassMvcController(c)) {
return false;
} else if (IsHttpApplication(c)) {
return false;
} else if (IsVisualBasicClassFromMyNamespace(c, project)) {
return false;
}
return true;
}
bool IsHttpApplication(IMvcClass c)
{
return c.BaseClassFullName == "System.Web.HttpApplication";
}
bool IsBaseClassMvcController(IMvcClass c)
{
return c.BaseClassFullName == "System.Web.Mvc.Controller";
}
bool IsVisualBasicClassFromMyNamespace(IMvcClass c, IMvcProject project)
{
if (project.GetTemplateLanguage().IsVisualBasic()) {
return c.FullName.Contains(".My.");
}
return false;
}
} }
} }

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

@ -12,7 +12,7 @@ namespace ICSharpCode.AspNet.Mvc
public IMvcProjectContent GetProjectContent(IMvcProject project) public IMvcProjectContent GetProjectContent(IMvcProject project)
{ {
IProjectContent projectContent = GetProjectContentFromParser(project); IProjectContent projectContent = GetProjectContentFromParser(project);
return new MvcProjectContent(projectContent); return new MvcProjectContent(projectContent, project);
} }
IProjectContent GetProjectContentFromParser(IMvcProject mvcProject) IProjectContent GetProjectContentFromParser(IMvcProject mvcProject)

6
src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/MvcProjectContent.cs

@ -10,16 +10,18 @@ namespace ICSharpCode.AspNet.Mvc
public class MvcProjectContent : IMvcProjectContent public class MvcProjectContent : IMvcProjectContent
{ {
IProjectContent projectContent; IProjectContent projectContent;
IMvcProject project;
public MvcProjectContent(IProjectContent projectContent) public MvcProjectContent(IProjectContent projectContent, IMvcProject project)
{ {
this.projectContent = projectContent; this.projectContent = projectContent;
this.project = project;
} }
public IEnumerable<IMvcClass> GetClasses() public IEnumerable<IMvcClass> GetClasses()
{ {
foreach (IClass c in projectContent.Classes) { foreach (IClass c in projectContent.Classes) {
yield return new MvcClass(c); yield return new MvcClass(c, project);
} }
} }
} }

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

@ -8,6 +8,8 @@ namespace AspNet.Mvc.Tests.Helpers
{ {
public class FakeMvcClass : IMvcClass public class FakeMvcClass : IMvcClass
{ {
bool isModelClass = true;
public FakeMvcClass(string fullName) public FakeMvcClass(string fullName)
{ {
this.FullName = fullName; this.FullName = fullName;
@ -24,5 +26,15 @@ namespace AspNet.Mvc.Tests.Helpers
public string Namespace { get; set; } public string Namespace { get; set; }
public string BaseClassFullName { get; set; } public string BaseClassFullName { get; set; }
public string AssemblyLocation { get; set; } public string AssemblyLocation { get; set; }
public void SetIsNotModelClass()
{
isModelClass = false;
}
public bool IsModelClass()
{
return isModelClass;
}
} }
} }

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

@ -13,12 +13,42 @@ namespace AspNet.Mvc.Tests
public class MvcClassTests public class MvcClassTests
{ {
MvcClass mvcClass; MvcClass mvcClass;
FakeMvcProject fakeProject;
FakeClass fakeClass; FakeClass fakeClass;
void CreateCSharpProject()
{
fakeProject = new FakeMvcProject();
fakeProject.SetCSharpAsTemplateLanguage();
}
void CreateVisualBasicProject()
{
fakeProject = new FakeMvcProject();
fakeProject.SetVisualBasicAsTemplateLanguage();
}
void CreateClass(string name) void CreateClass(string name)
{
CreateClassWithCSharpProject(name);
}
void CreateClassWithCSharpProject(string name)
{
CreateCSharpProject();
CreateClass(name, fakeProject);
}
void CreateClass(string name, FakeMvcProject fakeProject)
{ {
fakeClass = new FakeClass(name); fakeClass = new FakeClass(name);
mvcClass = new MvcClass(fakeClass); mvcClass = new MvcClass(fakeClass, fakeProject);
}
void CreateClassWithVisualBasicProject(string name)
{
CreateVisualBasicProject();
CreateClass(name, fakeProject);
} }
void AddBaseClass(string name) void AddBaseClass(string name)
@ -83,5 +113,63 @@ namespace AspNet.Mvc.Tests
Assert.AreEqual(expectedOutputAssemblyLocation, assemblyLocation); Assert.AreEqual(expectedOutputAssemblyLocation, assemblyLocation);
} }
[Test]
public void IsModelClass_ClassNameIsTest_ReturnsTrue()
{
CreateClass("Test");
bool result = mvcClass.IsModelClass();
Assert.IsTrue(result);
}
[Test]
public void IsModelClass_BaseClassIsMvcController_ReturnsFalse()
{
CreateClass("ICSharpCode.FooController");
AddBaseClass("System.Web.Mvc.Controller");
bool result = mvcClass.IsModelClass();
Assert.IsFalse(result);
}
[Test]
public void IsModelClass_HttpApplicationDerivedClass_ReturnsFalse()
{
CreateClass("ICSharpCode.MvcApplication");
AddBaseClass("System.Web.HttpApplication");
bool result = mvcClass.IsModelClass();
Assert.IsFalse(result);
}
[Test]
public void IsModelClass_VisualBasicProjectAndClassIsVisualBasicMyApplication_ReturnsFalse()
{
CreateClassWithVisualBasicProject("VbApp.My.MyApplication");
bool result = mvcClass.IsModelClass();
Assert.IsFalse(result);
}
[Test]
public void IsModelClass_VisualBasicProjectAndClassIsVisualBasicMySettings_ReturnsFalse()
{
CreateClassWithVisualBasicProject("TestVisualBasicApp.My.MySettings");
bool result = mvcClass.IsModelClass();
Assert.IsFalse(result);
}
[Test]
public void IsModelClass_CSharpProjectAndClassIsMySettings_ReturnsFalse()
{
CreateClassWithCSharpProject("TestApp.My.MySettings");
bool result = mvcClass.IsModelClass();
Assert.IsTrue(result);
}
} }
} }

52
src/AddIns/BackendBindings/AspNet.Mvc/Test/Src/MvcModelClassLocatorTests.cs

@ -89,58 +89,14 @@ namespace AspNet.Mvc.Tests
} }
[Test] [Test]
public void GetModelClasses_ControllerClassInProject_ControllerClassNotReturnedInModelClasses() public void GetModelClasses_OneClassInProjectIsNotModelClass_ReturnNoModelClasses()
{ {
CreateLocator(); CreateLocator();
AddModelClassWithBaseClass("System.Web.Mvc.Controller", "ICSharpCode.FooController"); FakeMvcClass fakeClass = AddModelClass("MyNamespace.MyClass");
GetModelClasses(); fakeClass.SetIsNotModelClass();
int count = GetModelClassCount(); int count = GetModelClassCount();
Assert.AreEqual(0, count);
}
[Test]
public void GetModelClasses_HttpApplicationDerivedClassInProject_ClassNotReturnedInModelClasses()
{
CreateLocator();
AddModelClassWithBaseClass("System.Web.HttpApplication", "ICSharpCode.MvcApplication");
GetModelClasses();
int count = GetModelClassCount();
Assert.AreEqual(0, count);
}
[Test]
public void GetModelClasses_VisualBasicProjectAndMyApplicationClassInProject_ClassNotReturnedInModelClasses()
{
CreateLocator();
UseVisualBasicProject();
AddModelClass("VbApp.My.MyApplication");
int count = GetModelClassCount();
Assert.AreEqual(0, count);
}
[Test]
public void GetModelClasses_VisualBasicProjectAndMySettingsClassInProject_ClassNotReturnedInModelClasses()
{
CreateLocator();
UseVisualBasicProject();
AddModelClass("TestVisualBasicApp.My.MySettings");
int count = GetModelClassCount();
Assert.AreEqual(0, count);
}
[Test]
public void GetModelClasses_CSharpProjectAndMyApplicationClassInProject_ClassIsReturnedInModelClasses()
{
CreateLocator();
UseCSharpProject();
AddModelClass("TestApp.My.MySettings");
string modelClassName = GetFirstModelClassName();
Assert.AreEqual("TestApp.My.MySettings", modelClassName); Assert.AreEqual(0, count);
} }
} }
} }

Loading…
Cancel
Save