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 @@
<TextBlock <TextBlock
Margin="4" Margin="4"
FontWeight="Bold"
Text="Controller Name:"/> Text="Controller Name:"/>
<TextBox <TextBox
x:Name="ControllerNameTextBox" x:Name="ControllerNameTextBox"

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

@ -7,5 +7,8 @@ namespace ICSharpCode.AspNet.Mvc
{ {
public class IsMvcControllerFolderSelectedConditionEvaluator : IsMvcFolderSelectedConditionEvaluator 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
public abstract class IsMvcFolderSelectedConditionEvaluator : IConditionEvaluator public abstract class IsMvcFolderSelectedConditionEvaluator : IConditionEvaluator
{ {
public bool IsValid(object owner, Condition condition) public bool IsValid(object owner, Condition condition)
{
return IsMvcFolderNodeSelected(owner);
}
bool IsMvcFolderNodeSelected(object owner)
{ {
if (IsProjectNode(owner)) { if (IsProjectNode(owner)) {
return false; return false;
} }
var directoryNode = owner as DirectoryNode; 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) bool IsProjectNode(object owner)
{ {
return owner is ProjectNode; 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
{ {
public class IsMvcViewFolderSelectedConditionEvaluator : IsMvcFolderSelectedConditionEvaluator 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
} }
public static TestableProject CreateProject() public static TestableProject CreateProject()
{
return CreateProject(@"d:\projects\MyProject\MyProject.csproj", "MyProject");
}
public static TestableProject CreateProject(string fileName, string projectName)
{ {
var createInfo = new ProjectCreateInformation(); var createInfo = new ProjectCreateInformation();
createInfo.Solution = new Solution(); createInfo.Solution = new Solution();
createInfo.OutputProjectFileName = @"d:\projects\MyProject\MyProject.csproj"; createInfo.ProjectName = projectName;
createInfo.OutputProjectFileName = fileName;
return new TestableProject(createInfo); return new TestableProject(createInfo);
} }
@ -45,5 +51,9 @@ namespace AspNet.Mvc.Tests.Helpers
{ {
IsSaved = true; 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
DirectoryNode CreateControllersFolderNode() DirectoryNode CreateControllersFolderNode()
{ {
var node = new DirectoryNode("Controllers"); string path = @"d:\projects\MyAspNetProject\Controllers";
return node; return new DirectoryNode(path);
}
DirectoryNode CreateControllersFolderNodeWithUpperCaseName()
{
string path = @"d:\projects\MyAspNetProject\CONTROLLERS";
return new DirectoryNode(path);
} }
ProjectNode CreateProjectNode() ProjectNode CreateProjectNode()
@ -37,6 +43,36 @@ namespace AspNet.Mvc.Tests
return new ProjectNode(project); 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] [Test]
public void IsValid_NullOwnerIsPassed_ReturnsFalse() public void IsValid_NullOwnerIsPassed_ReturnsFalse()
{ {
@ -62,5 +98,41 @@ namespace AspNet.Mvc.Tests
Assert.IsFalse(valid); 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
DirectoryNode CreateViewsFolderNode() DirectoryNode CreateViewsFolderNode()
{ {
var node = new DirectoryNode("Views"); string path = @"d:\projects\MyAspNetProject\Views";
return node; return new DirectoryNode(path);
}
DirectoryNode CreateViewsFolderNodeWithUpperCaseName()
{
string path = @"d:\projects\MyAspNetProject\VIEWS";
return new DirectoryNode(path);
} }
ProjectNode CreateProjectNode() ProjectNode CreateProjectNode()
@ -38,6 +44,36 @@ namespace AspNet.Mvc.Tests
return new ProjectNode(project); 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] [Test]
public void IsValid_NullOwnerIsPassed_ReturnsFalse() public void IsValid_NullOwnerIsPassed_ReturnsFalse()
{ {
@ -63,5 +99,41 @@ namespace AspNet.Mvc.Tests
Assert.IsFalse(valid); 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