Browse Source

Fix ASP.NET MVC Add View and Add Controller menu items appearing for any directory node selected.

pull/18/head
Matt Ward 15 years ago
parent
commit
c07a57ac29
  1. 1
      src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/AddMvcControllerToProjectView.xaml
  2. 3
      src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/IsMvcControllerFolderSelectedConditionEvaluator.cs
  3. 21
      src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/IsMvcFolderSelectedConditionEvaluator.cs
  4. 3
      src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/IsMvcViewFolderSelectedConditionEvaluator.cs
  5. 12
      src/AddIns/BackendBindings/AspNet.Mvc/Test/Helpers/TestableProject.cs
  6. 76
      src/AddIns/BackendBindings/AspNet.Mvc/Test/Src/IsMvcControllerFolderSelectedConditionEvaluatorTests.cs
  7. 76
      src/AddIns/BackendBindings/AspNet.Mvc/Test/Src/IsMvcViewFolderSelectedConditionEvaluatorTests.cs

1
src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/AddMvcControllerToProjectView.xaml

@ -31,7 +31,6 @@ @@ -31,7 +31,6 @@
<TextBlock
Margin="4"
FontWeight="Bold"
Text="Controller Name:"/>
<TextBox
x:Name="ControllerNameTextBox"

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

@ -7,5 +7,8 @@ namespace ICSharpCode.AspNet.Mvc @@ -7,5 +7,8 @@ namespace ICSharpCode.AspNet.Mvc
{
public class IsMvcControllerFolderSelectedConditionEvaluator : IsMvcFolderSelectedConditionEvaluator
{
protected override string MvcParentFolderName {
get { return "Controllers"; }
}
}
}

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

@ -10,17 +10,36 @@ namespace ICSharpCode.AspNet.Mvc @@ -10,17 +10,36 @@ namespace ICSharpCode.AspNet.Mvc
public abstract class IsMvcFolderSelectedConditionEvaluator : IConditionEvaluator
{
public bool IsValid(object owner, Condition condition)
{
return IsMvcFolderNodeSelected(owner);
}
bool IsMvcFolderNodeSelected(object owner)
{
if (IsProjectNode(owner)) {
return false;
}
var directoryNode = owner as DirectoryNode;
return directoryNode != null;
if (directoryNode != null) {
if (IsMatch(directoryNode)) {
return true;
}
return IsMvcFolderNodeSelected(directoryNode.Parent);
}
return false;
}
bool IsProjectNode(object owner)
{
return owner is ProjectNode;
}
bool IsMatch(DirectoryNode directoryNode)
{
return MvcParentFolderName.Equals(directoryNode.Text, StringComparison.InvariantCultureIgnoreCase);
}
protected abstract string MvcParentFolderName { get; }
}
}

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

@ -7,5 +7,8 @@ namespace ICSharpCode.AspNet.Mvc @@ -7,5 +7,8 @@ namespace ICSharpCode.AspNet.Mvc
{
public class IsMvcViewFolderSelectedConditionEvaluator : IsMvcFolderSelectedConditionEvaluator
{
protected override string MvcParentFolderName {
get { return "Views"; }
}
}
}

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

@ -19,10 +19,16 @@ namespace AspNet.Mvc.Tests.Helpers @@ -19,10 +19,16 @@ namespace AspNet.Mvc.Tests.Helpers
}
public static TestableProject CreateProject()
{
return CreateProject(@"d:\projects\MyProject\MyProject.csproj", "MyProject");
}
public static TestableProject CreateProject(string fileName, string projectName)
{
var createInfo = new ProjectCreateInformation();
createInfo.Solution = new Solution();
createInfo.OutputProjectFileName = @"d:\projects\MyProject\MyProject.csproj";
createInfo.ProjectName = projectName;
createInfo.OutputProjectFileName = fileName;
return new TestableProject(createInfo);
}
@ -45,5 +51,9 @@ namespace AspNet.Mvc.Tests.Helpers @@ -45,5 +51,9 @@ namespace AspNet.Mvc.Tests.Helpers
{
IsSaved = true;
}
public override bool ReadOnly {
get { return false; }
}
}
}

76
src/AddIns/BackendBindings/AspNet.Mvc/Test/Src/IsMvcControllerFolderSelectedConditionEvaluatorTests.cs

@ -27,8 +27,14 @@ namespace AspNet.Mvc.Tests @@ -27,8 +27,14 @@ namespace AspNet.Mvc.Tests
DirectoryNode CreateControllersFolderNode()
{
var node = new DirectoryNode("Controllers");
return node;
string path = @"d:\projects\MyAspNetProject\Controllers";
return new DirectoryNode(path);
}
DirectoryNode CreateControllersFolderNodeWithUpperCaseName()
{
string path = @"d:\projects\MyAspNetProject\CONTROLLERS";
return new DirectoryNode(path);
}
ProjectNode CreateProjectNode()
@ -37,6 +43,36 @@ namespace AspNet.Mvc.Tests @@ -37,6 +43,36 @@ namespace AspNet.Mvc.Tests
return new ProjectNode(project);
}
ProjectNode CreateProjectNode(string fileName, string projectName)
{
var project = TestableProject.CreateProject(fileName, projectName);
return new ProjectNode(project);
}
DirectoryNode CreatePropertiesFolderNode()
{
string path = @"d:\projects\MyAspNetProject\Properties";
return new DirectoryNode(path);
}
DirectoryNode CreateControllersChildFolderNode()
{
DirectoryNode controllersNode = CreateControllersFolderNode();
string path = @"d:\projects\MyAspNetProject\Controllers\Child";
var childNode = new DirectoryNode(path);
childNode.AddTo(controllersNode);
return childNode;
}
DirectoryNode CreatePropertiesFolderNodeWithParentProjectNodeCalledControllers()
{
var projectNode = CreateProjectNode(@"d:\projects\MyProject\Controllers.csproj", "Controllers");
var propertiesNode = new DirectoryNode(@"d:\projects\MyProject\Properties");
propertiesNode.AddTo(projectNode);
return propertiesNode;
}
[Test]
public void IsValid_NullOwnerIsPassed_ReturnsFalse()
{
@ -62,5 +98,41 @@ namespace AspNet.Mvc.Tests @@ -62,5 +98,41 @@ namespace AspNet.Mvc.Tests
Assert.IsFalse(valid);
}
[Test]
public void IsValid_PropertiesFolderNodePassed_ReturnsFalse()
{
DirectoryNode owner = CreatePropertiesFolderNode();
bool valid = IsValid(owner);
Assert.IsFalse(valid);
}
[Test]
public void IsValid_ControllersChildFolderNodePassed_ReturnsTrue()
{
DirectoryNode owner = CreateControllersChildFolderNode();
bool valid = IsValid(owner);
Assert.IsTrue(valid);
}
[Test]
public void IsValid_PropertiesFolderNodeWithParentProjectCalledControllersPassed_ReturnsFalse()
{
DirectoryNode owner = CreatePropertiesFolderNodeWithParentProjectNodeCalledControllers();
bool valid = IsValid(owner);
Assert.IsFalse(valid);
}
[Test]
public void IsValid_ControllersFolderNodeWithUpperCaseNamePassed_ReturnsTrue()
{
DirectoryNode owner = CreateControllersFolderNodeWithUpperCaseName();
bool valid = IsValid(owner);
Assert.IsTrue(valid);
}
}
}

76
src/AddIns/BackendBindings/AspNet.Mvc/Test/Src/IsMvcViewFolderSelectedConditionEvaluatorTests.cs

@ -28,8 +28,14 @@ namespace AspNet.Mvc.Tests @@ -28,8 +28,14 @@ namespace AspNet.Mvc.Tests
DirectoryNode CreateViewsFolderNode()
{
var node = new DirectoryNode("Views");
return node;
string path = @"d:\projects\MyAspNetProject\Views";
return new DirectoryNode(path);
}
DirectoryNode CreateViewsFolderNodeWithUpperCaseName()
{
string path = @"d:\projects\MyAspNetProject\VIEWS";
return new DirectoryNode(path);
}
ProjectNode CreateProjectNode()
@ -38,6 +44,36 @@ namespace AspNet.Mvc.Tests @@ -38,6 +44,36 @@ namespace AspNet.Mvc.Tests
return new ProjectNode(project);
}
ProjectNode CreateProjectNode(string fileName, string projectName)
{
var project = TestableProject.CreateProject(fileName, projectName);
return new ProjectNode(project);
}
DirectoryNode CreatePropertiesFolderNode()
{
string path = @"d:\projects\MyAspNetProject\Properties";
return new DirectoryNode(path);
}
DirectoryNode CreateViewsChildFolderNode()
{
DirectoryNode viewsNode = CreateViewsFolderNode();
string path = @"d:\projects\MyAspNetProject\Views\Child";
var childNode = new DirectoryNode(path);
childNode.AddTo(viewsNode);
return childNode;
}
DirectoryNode CreatePropertiesFolderNodeWithParentProjectNodeCalledViews()
{
var projectNode = CreateProjectNode(@"d:\projects\MyProject\Views.csproj", "Views");
var propertiesNode = new DirectoryNode(@"d:\projects\MyProject\Properties");
propertiesNode.AddTo(projectNode);
return propertiesNode;
}
[Test]
public void IsValid_NullOwnerIsPassed_ReturnsFalse()
{
@ -63,5 +99,41 @@ namespace AspNet.Mvc.Tests @@ -63,5 +99,41 @@ namespace AspNet.Mvc.Tests
Assert.IsFalse(valid);
}
[Test]
public void IsValid_PropertiesFolderNodePassed_ReturnsFalse()
{
DirectoryNode owner = CreatePropertiesFolderNode();
bool valid = IsValid(owner);
Assert.IsFalse(valid);
}
[Test]
public void IsValid_ViewsChildFolderNodePassed_ReturnsTrue()
{
DirectoryNode owner = CreateViewsChildFolderNode();
bool valid = IsValid(owner);
Assert.IsTrue(valid);
}
[Test]
public void IsValid_PropertiesFolderNodeWithParentProjectCalledViewsPassed_ReturnsFalse()
{
DirectoryNode owner = CreatePropertiesFolderNodeWithParentProjectNodeCalledViews();
bool valid = IsValid(owner);
Assert.IsFalse(valid);
}
[Test]
public void IsValid_ViewsFolderNodeWithUpperCaseNamePassed_ReturnsTrue()
{
DirectoryNode owner = CreateViewsFolderNodeWithUpperCaseName();
bool valid = IsValid(owner);
Assert.IsTrue(valid);
}
}
}
Loading…
Cancel
Save