diff --git a/src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/IMvcClass.cs b/src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/IMvcClass.cs index 5845d4e0f0..152e8bae5e 100644 --- a/src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/IMvcClass.cs +++ b/src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/IMvcClass.cs @@ -12,5 +12,7 @@ namespace ICSharpCode.AspNet.Mvc string Namespace { get; } string BaseClassFullName { get; } string AssemblyLocation { get; } + + bool IsModelClass(); } } diff --git a/src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/MvcClass.cs b/src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/MvcClass.cs index 81afdabdb2..1b335522ba 100644 --- a/src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/MvcClass.cs +++ b/src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/MvcClass.cs @@ -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 { 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; + } } } diff --git a/src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/MvcModelClassLocator.cs b/src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/MvcModelClassLocator.cs index 201c92cbeb..0a3d70faa5 100644 --- a/src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/MvcModelClassLocator.cs +++ b/src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/MvcModelClassLocator.cs @@ -23,7 +23,7 @@ namespace ICSharpCode.AspNet.Mvc public IEnumerable 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 { 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; - } } } diff --git a/src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/MvcParserService.cs b/src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/MvcParserService.cs index 6351ba2710..ee6d559b84 100644 --- a/src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/MvcParserService.cs +++ b/src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/MvcParserService.cs @@ -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) diff --git a/src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/MvcProjectContent.cs b/src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/MvcProjectContent.cs index 1bdbfaa14b..553ce051d8 100644 --- a/src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/MvcProjectContent.cs +++ b/src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/MvcProjectContent.cs @@ -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 GetClasses() { foreach (IClass c in projectContent.Classes) { - yield return new MvcClass(c); + yield return new MvcClass(c, project); } } } diff --git a/src/AddIns/BackendBindings/AspNet.Mvc/Test/Helpers/FakeMvcClass.cs b/src/AddIns/BackendBindings/AspNet.Mvc/Test/Helpers/FakeMvcClass.cs index 72779e8b39..4fa09aceb1 100644 --- a/src/AddIns/BackendBindings/AspNet.Mvc/Test/Helpers/FakeMvcClass.cs +++ b/src/AddIns/BackendBindings/AspNet.Mvc/Test/Helpers/FakeMvcClass.cs @@ -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 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; + } } } diff --git a/src/AddIns/BackendBindings/AspNet.Mvc/Test/Src/MvcClassTests.cs b/src/AddIns/BackendBindings/AspNet.Mvc/Test/Src/MvcClassTests.cs index 7f8866273c..60a61c4083 100644 --- a/src/AddIns/BackendBindings/AspNet.Mvc/Test/Src/MvcClassTests.cs +++ b/src/AddIns/BackendBindings/AspNet.Mvc/Test/Src/MvcClassTests.cs @@ -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 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); + } } } diff --git a/src/AddIns/BackendBindings/AspNet.Mvc/Test/Src/MvcModelClassLocatorTests.cs b/src/AddIns/BackendBindings/AspNet.Mvc/Test/Src/MvcModelClassLocatorTests.cs index f65c11066f..7f21f0abec 100644 --- a/src/AddIns/BackendBindings/AspNet.Mvc/Test/Src/MvcModelClassLocatorTests.cs +++ b/src/AddIns/BackendBindings/AspNet.Mvc/Test/Src/MvcModelClassLocatorTests.cs @@ -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); } } }