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

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

@ -10,10 +10,12 @@ namespace ICSharpCode.AspNet.Mvc @@ -10,10 +10,12 @@ namespace ICSharpCode.AspNet.Mvc
public class MvcClass : IMvcClass
{
IClass c;
IMvcProject project;
public MvcClass(IClass c)
public MvcClass(IClass c, IMvcProject project)
{
this.c = c;
this.project = project;
}
public string FullName {
@ -55,5 +57,35 @@ namespace ICSharpCode.AspNet.Mvc @@ -55,5 +57,35 @@ namespace ICSharpCode.AspNet.Mvc
{
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 @@ -23,7 +23,7 @@ namespace ICSharpCode.AspNet.Mvc
public IEnumerable<IMvcClass> GetModelClasses(IMvcProject project)
{
foreach (IMvcClass c in GetAllClassesInProject(project)) {
if (IsModelClass(c, project)) {
if (c.IsModelClass()) {
yield return c;
}
}
@ -39,35 +39,5 @@ namespace ICSharpCode.AspNet.Mvc @@ -39,35 +39,5 @@ namespace ICSharpCode.AspNet.Mvc
{
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 @@ -12,7 +12,7 @@ namespace ICSharpCode.AspNet.Mvc
public IMvcProjectContent GetProjectContent(IMvcProject project)
{
IProjectContent projectContent = GetProjectContentFromParser(project);
return new MvcProjectContent(projectContent);
return new MvcProjectContent(projectContent, project);
}
IProjectContent GetProjectContentFromParser(IMvcProject mvcProject)

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

@ -10,16 +10,18 @@ namespace ICSharpCode.AspNet.Mvc @@ -10,16 +10,18 @@ namespace ICSharpCode.AspNet.Mvc
public class MvcProjectContent : IMvcProjectContent
{
IProjectContent projectContent;
IMvcProject project;
public MvcProjectContent(IProjectContent projectContent)
public MvcProjectContent(IProjectContent projectContent, IMvcProject project)
{
this.projectContent = projectContent;
this.project = project;
}
public IEnumerable<IMvcClass> GetClasses()
{
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 @@ -8,6 +8,8 @@ namespace AspNet.Mvc.Tests.Helpers
{
public class FakeMvcClass : IMvcClass
{
bool isModelClass = true;
public FakeMvcClass(string fullName)
{
this.FullName = fullName;
@ -24,5 +26,15 @@ namespace AspNet.Mvc.Tests.Helpers @@ -24,5 +26,15 @@ namespace AspNet.Mvc.Tests.Helpers
public string Namespace { get; set; }
public string BaseClassFullName { 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 @@ -13,12 +13,42 @@ namespace AspNet.Mvc.Tests
public class MvcClassTests
{
MvcClass mvcClass;
FakeMvcProject fakeProject;
FakeClass fakeClass;
void CreateCSharpProject()
{
fakeProject = new FakeMvcProject();
fakeProject.SetCSharpAsTemplateLanguage();
}
void CreateVisualBasicProject()
{
fakeProject = new FakeMvcProject();
fakeProject.SetVisualBasicAsTemplateLanguage();
}
void CreateClass(string name)
{
CreateClassWithCSharpProject(name);
}
void CreateClassWithCSharpProject(string name)
{
CreateCSharpProject();
CreateClass(name, fakeProject);
}
void CreateClass(string name, FakeMvcProject fakeProject)
{
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)
@ -83,5 +113,63 @@ namespace AspNet.Mvc.Tests @@ -83,5 +113,63 @@ namespace AspNet.Mvc.Tests
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 @@ -89,58 +89,14 @@ namespace AspNet.Mvc.Tests
}
[Test]
public void GetModelClasses_ControllerClassInProject_ControllerClassNotReturnedInModelClasses()
public void GetModelClasses_OneClassInProjectIsNotModelClass_ReturnNoModelClasses()
{
CreateLocator();
AddModelClassWithBaseClass("System.Web.Mvc.Controller", "ICSharpCode.FooController");
GetModelClasses();
FakeMvcClass fakeClass = AddModelClass("MyNamespace.MyClass");
fakeClass.SetIsNotModelClass();
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