Browse Source

Sort available master pages by filename in Add Mvc View dialog.

pull/18/head
Matt Ward 14 years ago
parent
commit
e2cc613b3d
  1. 5
      src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/AddMvcViewToProjectViewModel.cs
  2. 21
      src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/MvcMasterPageFileName.cs
  3. 29
      src/AddIns/BackendBindings/AspNet.Mvc/Test/Src/AddMvcViewToProjectViewModelTests.cs
  4. 63
      src/AddIns/BackendBindings/AspNet.Mvc/Test/Src/MvcMasterPageFileNameTests.cs

5
src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/AddMvcViewToProjectViewModel.cs

@ -280,7 +280,10 @@ namespace ICSharpCode.AspNet.Mvc @@ -280,7 +280,10 @@ namespace ICSharpCode.AspNet.Mvc
IEnumerable<MvcMasterPageFileName> GetAspxMasterPageFileNames()
{
return selectedViewFolder.Project.GetAspxMasterPageFileNames();
var unsortedMasterPages = selectedViewFolder.Project.GetAspxMasterPageFileNames() as IEnumerable<MvcMasterPageFileName>;
var masterPages = new List<MvcMasterPageFileName>(unsortedMasterPages);
masterPages.Sort();
return masterPages;
}
public void CloseSelectMasterPageView()

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

@ -7,7 +7,7 @@ using ICSharpCode.SharpDevelop.Project; @@ -7,7 +7,7 @@ using ICSharpCode.SharpDevelop.Project;
namespace ICSharpCode.AspNet.Mvc
{
public class MvcMasterPageFileName
public class MvcMasterPageFileName : IComparable<MvcMasterPageFileName>
{
public MvcMasterPageFileName(FileProjectItem fileProjectItem)
{
@ -81,5 +81,24 @@ namespace ICSharpCode.AspNet.Mvc @@ -81,5 +81,24 @@ namespace ICSharpCode.AspNet.Mvc
}
return String.Empty;
}
public int CompareTo(MvcMasterPageFileName other)
{
int result = CompareFileNames(other);
if (result == 0) {
return CompareFolderRelativeToProject(other);
}
return result;
}
int CompareFileNames(MvcMasterPageFileName other)
{
return FileName.CompareTo(other.FileName);
}
int CompareFolderRelativeToProject(MvcMasterPageFileName other)
{
return FolderRelativeToProject.CompareTo(other.FolderRelativeToProject);
}
}
}

29
src/AddIns/BackendBindings/AspNet.Mvc/Test/Src/AddMvcViewToProjectViewModelTests.cs

@ -912,5 +912,34 @@ namespace AspNet.Mvc.Tests @@ -912,5 +912,34 @@ namespace AspNet.Mvc.Tests
Assert.IsTrue(fired);
}
[Test]
public void MasterPages_ProjectContainsTwoAspxMasterPagesInIncorrectSortOrder_ReturnsTwoAspxMasterPagesSorted()
{
CreateViewModel();
SelectAspxViewEngine();
var masterPageFile1 = new MvcMasterPageFileName() {
FullPath = @"d:\projects\MyProject\Views\Shared\ViewSite.Master",
FileName = "ViewSite.Master",
FolderRelativeToProject = @"Views\Shared"
};
fakeProject.AddMasterPageFile(masterPageFile1);
var masterPageFile2 = new MvcMasterPageFileName() {
FullPath = @"d:\projects\MyProject\Views\Shared\Site.Master",
FileName = "Site.Master",
FolderRelativeToProject = @"Views\Shared"
};
fakeProject.AddMasterPageFile(masterPageFile2);
viewModel.OpenSelectMasterPageView();
var expectedFileNames = new MvcMasterPageFileName[] {
masterPageFile2,
masterPageFile1
};
ObservableCollection<MvcMasterPageFileName> fileNames = viewModel.MasterPages;
Assert.AreEqual(expectedFileNames, fileNames);
}
}
}

63
src/AddIns/BackendBindings/AspNet.Mvc/Test/Src/MvcMasterPageFileNameTests.cs

@ -20,11 +20,12 @@ namespace AspNet.Mvc.Tests @@ -20,11 +20,12 @@ namespace AspNet.Mvc.Tests
project = TestableProject.CreateProject(fileName, "MyProject");
}
void CreateMasterPageFileName(string fullPath)
MvcMasterPageFileName CreateMasterPageFileName(string fullPath)
{
var projectItem = new FileProjectItem(project, ItemType.Compile);
projectItem.FileName = fullPath;
masterPageFileName = new MvcMasterPageFileName(projectItem);
return masterPageFileName;
}
[Test]
@ -82,5 +83,65 @@ namespace AspNet.Mvc.Tests @@ -82,5 +83,65 @@ namespace AspNet.Mvc.Tests
Assert.AreEqual("~/Site.Master", virtualPath);
}
[Test]
public void CompareTo_FileNamesAreTheSame_ReturnsZero()
{
CreateProject(@"d:\projects\MyProject\MyProject.csproj");
MvcMasterPageFileName lhs = CreateMasterPageFileName(@"d:\projects\MyProject\Site.Master");
MvcMasterPageFileName rhs = CreateMasterPageFileName(@"d:\projects\MyProject\Site.Master");
int result = lhs.CompareTo(rhs);
Assert.AreEqual(0, result);
}
[Test]
public void CompareTo_FoldersAreSameAndSecondFileNameIsGreaterThanFirstFileName_ReturnsMinusOne()
{
CreateProject(@"d:\projects\MyProject\MyProject.csproj");
MvcMasterPageFileName lhs = CreateMasterPageFileName(@"d:\projects\MyProject\Shared\A.Master");
MvcMasterPageFileName rhs = CreateMasterPageFileName(@"d:\projects\MyProject\Shared\Z.Master");
int result = lhs.CompareTo(rhs);
Assert.AreEqual(-1, result);
}
[Test]
public void CompareTo_FoldersAreSameAndSecondFileNameIsLessThanFirstFileName_ReturnsPlusOne()
{
CreateProject(@"d:\projects\MyProject\MyProject.csproj");
MvcMasterPageFileName lhs = CreateMasterPageFileName(@"d:\projects\MyProject\Shared\Z.Master");
MvcMasterPageFileName rhs = CreateMasterPageFileName(@"d:\projects\MyProject\Shared\A.Master");
int result = lhs.CompareTo(rhs);
Assert.AreEqual(1, result);
}
[Test]
public void CompareTo_FileNamesAreSameAndSecondFolderIsLessThanFirstFolder_ReturnsPlusOne()
{
CreateProject(@"d:\projects\MyProject\MyProject.csproj");
MvcMasterPageFileName lhs = CreateMasterPageFileName(@"d:\projects\MyProject\Z\site.Master");
MvcMasterPageFileName rhs = CreateMasterPageFileName(@"d:\projects\MyProject\A\site.Master");
int result = lhs.CompareTo(rhs);
Assert.AreEqual(1, result);
}
[Test]
public void CompareTo_FileNamesAreSameAndSecondFolderIsGreaterThanFirstFolder_ReturnsMinussOne()
{
CreateProject(@"d:\projects\MyProject\MyProject.csproj");
MvcMasterPageFileName lhs = CreateMasterPageFileName(@"d:\projects\MyProject\A\site.Master");
MvcMasterPageFileName rhs = CreateMasterPageFileName(@"d:\projects\MyProject\Z\site.Master");
int result = lhs.CompareTo(rhs);
Assert.AreEqual(-1, result);
}
}
}

Loading…
Cancel
Save