Browse Source

Support selecting Razor layout page for a new MVC view from a list of available Razor pages in the project.

pull/18/head
Matt Ward 15 years ago
parent
commit
7aa62b7436
  1. 4
      src/AddIns/BackendBindings/AspNet.Mvc/Project/AspNet.Mvc.csproj
  2. 25
      src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/AddMvcViewToProjectViewModel.cs
  3. 3
      src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/IMvcProject.cs
  4. 8
      src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/MvcFileName.cs
  5. 18
      src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/MvcProject.cs
  6. 35
      src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/MvcProjectFile.cs
  7. 40
      src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/MvcProjectMasterPageFile.cs
  8. 39
      src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/MvcProjectRazorFile.cs
  9. 8
      src/AddIns/BackendBindings/AspNet.Mvc/Test/AspNet.Mvc.Tests.csproj
  10. 22
      src/AddIns/BackendBindings/AspNet.Mvc/Test/Helpers/FakeMvcProject.cs
  11. 32
      src/AddIns/BackendBindings/AspNet.Mvc/Test/Helpers/MvcMasterPageFileNameCollectionAssert.cs
  12. 10
      src/AddIns/BackendBindings/AspNet.Mvc/Test/Helpers/MvcProjectFileAssert.cs
  13. 32
      src/AddIns/BackendBindings/AspNet.Mvc/Test/Helpers/MvcProjectFileCollectionAssert.cs
  14. 91
      src/AddIns/BackendBindings/AspNet.Mvc/Test/Src/AddMvcViewToProjectViewModelTests.cs
  15. 51
      src/AddIns/BackendBindings/AspNet.Mvc/Test/Src/MvcProjectFileTests.cs
  16. 45
      src/AddIns/BackendBindings/AspNet.Mvc/Test/Src/MvcProjectMasterPageFileTests.cs
  17. 45
      src/AddIns/BackendBindings/AspNet.Mvc/Test/Src/MvcProjectRazorFileTests.cs
  18. 106
      src/AddIns/BackendBindings/AspNet.Mvc/Test/Src/MvcProjectTests.cs

4
src/AddIns/BackendBindings/AspNet.Mvc/Project/AspNet.Mvc.csproj

@ -79,7 +79,7 @@ @@ -79,7 +79,7 @@
<Compile Include="Src\IsMvcFolderSelectedConditionEvaluator.cs" />
<Compile Include="Src\IsMvcViewFolderSelectedConditionEvaluator.cs" />
<Compile Include="Configuration\AssemblyInfo.cs" />
<Compile Include="Src\MvcMasterPageFileName.cs" />
<Compile Include="Src\MvcProjectMasterPageFile.cs" />
<Compile Include="Src\MvcModelClassLocator.cs" />
<Compile Include="Src\MvcAddViewTextTemplateFolder.cs" />
<Compile Include="Src\MvcClass.cs" />
@ -96,6 +96,8 @@ @@ -96,6 +96,8 @@
<Compile Include="Src\MvcParserService.cs" />
<Compile Include="Src\MvcProject.cs" />
<Compile Include="Src\MvcProjectContent.cs" />
<Compile Include="Src\MvcProjectFile.cs" />
<Compile Include="Src\MvcProjectRazorFile.cs" />
<Compile Include="Src\MvcTextTemplateCriteria.cs" />
<Compile Include="Src\MvcTextTemplateFileName.cs" />
<Compile Include="Src\MvcTextTemplateHost.cs" />

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

@ -20,7 +20,7 @@ namespace ICSharpCode.AspNet.Mvc @@ -20,7 +20,7 @@ namespace ICSharpCode.AspNet.Mvc
bool isStronglyTypedView;
bool isContentPage;
bool isSelectMasterPageViewOpen;
MvcMasterPageFileName selectedMasterPage;
MvcProjectFile selectedMasterPage;
string masterPageFile = String.Empty;
MvcModelClassViewModelsForSelectedFolder modelClassesForSelectedFolder;
@ -41,7 +41,7 @@ namespace ICSharpCode.AspNet.Mvc @@ -41,7 +41,7 @@ namespace ICSharpCode.AspNet.Mvc
this.viewFileName.Folder = selectedViewFolder.Path;
this.ModelClassName = String.Empty;
this.PrimaryContentPlaceHolderId = "Main";
this.MasterPages = new ObservableCollection<MvcMasterPageFileName>();
this.MasterPages = new ObservableCollection<MvcProjectFile>();
CreateModelClassesForSelectedFolder();
CreateCommands();
@ -273,27 +273,36 @@ namespace ICSharpCode.AspNet.Mvc @@ -273,27 +273,36 @@ namespace ICSharpCode.AspNet.Mvc
void UpdateMasterPages()
{
MasterPages.Clear();
foreach (MvcMasterPageFileName fileName in GetAspxMasterPageFileNames()) {
foreach (MvcProjectFile fileName in GetMasterPageFileNames()) {
MasterPages.Add(fileName);
}
}
IEnumerable<MvcMasterPageFileName> GetAspxMasterPageFileNames()
IEnumerable<MvcProjectFile> GetMasterPageFileNames()
{
var unsortedMasterPages = selectedViewFolder.Project.GetAspxMasterPageFileNames() as IEnumerable<MvcMasterPageFileName>;
var masterPages = new List<MvcMasterPageFileName>(unsortedMasterPages);
IEnumerable<MvcProjectFile> unsortedMasterPages = GetMasterPageFileNamesForSelectedViewEngine();
var masterPages = new List<MvcProjectFile>(unsortedMasterPages);
masterPages.Sort();
return masterPages;
}
IEnumerable<MvcProjectFile> GetMasterPageFileNamesForSelectedViewEngine()
{
IMvcProject project = selectedViewFolder.Project;
if (IsAspxViewEngineSelected) {
return project.GetAspxMasterPageFiles();
}
return project.GetRazorFiles();
}
public void CloseSelectMasterPageView()
{
IsSelectMasterPageViewOpen = false;
}
public ObservableCollection<MvcMasterPageFileName> MasterPages { get; private set; }
public ObservableCollection<MvcProjectFile> MasterPages { get; private set; }
public MvcMasterPageFileName SelectedMasterPage {
public MvcProjectFile SelectedMasterPage {
get { return selectedMasterPage; }
set { selectedMasterPage = value; }
}

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

@ -17,6 +17,7 @@ namespace ICSharpCode.AspNet.Mvc @@ -17,6 +17,7 @@ namespace ICSharpCode.AspNet.Mvc
MvcTextTemplateLanguage GetTemplateLanguage();
IEnumerable<IMvcClass> GetModelClasses();
IEnumerable<MvcMasterPageFileName> GetAspxMasterPageFileNames();
IEnumerable<MvcProjectFile> GetAspxMasterPageFiles();
IEnumerable<MvcProjectFile> GetRazorFiles();
}
}

8
src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/MvcFileName.cs

@ -46,5 +46,13 @@ namespace ICSharpCode.AspNet.Mvc @@ -46,5 +46,13 @@ namespace ICSharpCode.AspNet.Mvc
}
return String.Empty;
}
public static string GetLowerCaseFileExtension(string fileName)
{
if (fileName != null) {
return Path.GetExtension(fileName).ToLowerInvariant();
}
return String.Empty;
}
}
}

18
src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/MvcProject.cs

@ -44,12 +44,22 @@ namespace ICSharpCode.AspNet.Mvc @@ -44,12 +44,22 @@ namespace ICSharpCode.AspNet.Mvc
return modelClassLocator.GetModelClasses(this);
}
public IEnumerable<MvcMasterPageFileName> GetAspxMasterPageFileNames()
public IEnumerable<MvcProjectFile> GetAspxMasterPageFiles()
{
foreach (ProjectItem projectItem in Project.Items) {
MvcMasterPageFileName fileName = MvcMasterPageFileName.CreateMvcMasterPageFileName(projectItem);
if (fileName != null) {
yield return fileName;
MvcProjectFile file = MvcProjectMasterPageFile.CreateMvcProjectMasterPageFile(projectItem);
if (file != null) {
yield return file;
}
}
}
public IEnumerable<MvcProjectFile> GetRazorFiles()
{
foreach (ProjectItem projectItem in Project.Items) {
MvcProjectFile file = MvcProjectRazorFile.CreateMvcProjectRazorFile(projectItem);
if (file != null) {
yield return file;
}
}
}

35
src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/MvcMasterPageFileName.cs → src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/MvcProjectFile.cs

@ -7,9 +7,9 @@ using ICSharpCode.SharpDevelop.Project; @@ -7,9 +7,9 @@ using ICSharpCode.SharpDevelop.Project;
namespace ICSharpCode.AspNet.Mvc
{
public class MvcMasterPageFileName : IComparable<MvcMasterPageFileName>
public class MvcProjectFile : IComparable<MvcProjectFile>
{
public MvcMasterPageFileName(FileProjectItem fileProjectItem)
public MvcProjectFile(FileProjectItem fileProjectItem)
{
UpdateFileName(fileProjectItem);
}
@ -33,7 +33,7 @@ namespace ICSharpCode.AspNet.Mvc @@ -33,7 +33,7 @@ namespace ICSharpCode.AspNet.Mvc
return virtualPath.VirtualPath;
}
public MvcMasterPageFileName()
public MvcProjectFile()
{
FullPath = String.Empty;
FileName = String.Empty;
@ -51,29 +51,6 @@ namespace ICSharpCode.AspNet.Mvc @@ -51,29 +51,6 @@ namespace ICSharpCode.AspNet.Mvc
return FullPath;
}
public static MvcMasterPageFileName CreateMvcMasterPageFileName(ProjectItem projectItem)
{
var fileProjectItem = projectItem as FileProjectItem;
if (fileProjectItem != null) {
return CreateMvcMasterPageFileName(fileProjectItem);
}
return null;
}
public static MvcMasterPageFileName CreateMvcMasterPageFileName(FileProjectItem fileProjectItem)
{
if (IsMasterPageFileName(fileProjectItem.FileName)) {
return new MvcMasterPageFileName(fileProjectItem);
}
return null;
}
public static bool IsMasterPageFileName(string fileName)
{
string extension = GetLowerCaseFileExtension(fileName);
return extension == ".master";
}
static string GetLowerCaseFileExtension(string fileName)
{
if (fileName != null) {
@ -82,7 +59,7 @@ namespace ICSharpCode.AspNet.Mvc @@ -82,7 +59,7 @@ namespace ICSharpCode.AspNet.Mvc
return String.Empty;
}
public int CompareTo(MvcMasterPageFileName other)
public int CompareTo(MvcProjectFile other)
{
int result = CompareFileNames(other);
if (result == 0) {
@ -91,12 +68,12 @@ namespace ICSharpCode.AspNet.Mvc @@ -91,12 +68,12 @@ namespace ICSharpCode.AspNet.Mvc
return result;
}
int CompareFileNames(MvcMasterPageFileName other)
int CompareFileNames(MvcProjectFile other)
{
return FileName.CompareTo(other.FileName);
}
int CompareFolderRelativeToProject(MvcMasterPageFileName other)
int CompareFolderRelativeToProject(MvcProjectFile other)
{
return FolderRelativeToProject.CompareTo(other.FolderRelativeToProject);
}

40
src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/MvcProjectMasterPageFile.cs

@ -0,0 +1,40 @@ @@ -0,0 +1,40 @@
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
using System.IO;
using ICSharpCode.SharpDevelop.Project;
namespace ICSharpCode.AspNet.Mvc
{
public class MvcProjectMasterPageFile
{
public static MvcProjectFile CreateMvcProjectMasterPageFile(ProjectItem projectItem)
{
var fileProjectItem = projectItem as FileProjectItem;
return CreateMvcProjectMasterPageFile(fileProjectItem);
}
public static MvcProjectFile CreateMvcProjectMasterPageFile(FileProjectItem fileProjectItem)
{
if (IsMasterPageFile(fileProjectItem)) {
return new MvcProjectFile(fileProjectItem);
}
return null;
}
public static bool IsMasterPageFile(FileProjectItem fileProjectItem)
{
if (fileProjectItem != null) {
return IsMasterPageFileName(fileProjectItem.FileName);
}
return false;
}
public static bool IsMasterPageFileName(string fileName)
{
string extension = MvcFileName.GetLowerCaseFileExtension(fileName);
return extension == ".master";
}
}
}

39
src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/MvcProjectRazorFile.cs

@ -0,0 +1,39 @@ @@ -0,0 +1,39 @@
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
using ICSharpCode.SharpDevelop.Project;
namespace ICSharpCode.AspNet.Mvc
{
public class MvcProjectRazorFile
{
public static MvcProjectFile CreateMvcProjectRazorFile(ProjectItem projectItem)
{
FileProjectItem fileProjectItem = projectItem as FileProjectItem;
return CreateMvcProjectRazorFile(fileProjectItem);
}
public static MvcProjectFile CreateMvcProjectRazorFile(FileProjectItem fileProjectItem)
{
if (IsRazorFile(fileProjectItem)) {
return new MvcProjectFile(fileProjectItem);
}
return null;
}
public static bool IsRazorFile(FileProjectItem fileProjectItem)
{
if (fileProjectItem != null) {
return IsRazorFileName(fileProjectItem.FileName);
}
return false;
}
public static bool IsRazorFileName(string fileName)
{
string extension = MvcFileName.GetLowerCaseFileExtension(fileName);
return extension == ".cshtml";
}
}
}

8
src/AddIns/BackendBindings/AspNet.Mvc/Test/AspNet.Mvc.Tests.csproj

@ -66,8 +66,8 @@ @@ -66,8 +66,8 @@
<Compile Include="Helpers\FakeMvcViewFileGenerator.cs" />
<Compile Include="Helpers\FakeSelectedFolderNodeInProjectsView.cs" />
<Compile Include="Helpers\FakeSelectedMvcFolder.cs" />
<Compile Include="Helpers\MvcMasterPageFileNameAssert.cs" />
<Compile Include="Helpers\MvcMasterPageFileNameCollectionAssert.cs" />
<Compile Include="Helpers\MvcProjectFileAssert.cs" />
<Compile Include="Helpers\MvcProjectFileCollectionAssert.cs" />
<Compile Include="Helpers\TestableAddMvcControllerToProjectCommand.cs" />
<Compile Include="Helpers\TestableAddMvcViewToProjectCommand.cs" />
<Compile Include="Helpers\TestableProject.cs" />
@ -81,11 +81,13 @@ @@ -81,11 +81,13 @@
<Compile Include="Src\IsMvcViewFolderSelectedConditionEvaluatorTests.cs" />
<Compile Include="Configuration\AssemblyInfo.cs" />
<Compile Include="Src\MvcClassTests.cs" />
<Compile Include="Src\MvcMasterPageFileNameTests.cs" />
<Compile Include="Src\MvcProjectFileTests.cs" />
<Compile Include="Src\MvcProjectMasterPageFileTests.cs" />
<Compile Include="Src\MvcModelClassLocatorTests.cs" />
<Compile Include="Src\MvcControllerFileGeneratorTests.cs" />
<Compile Include="Src\MvcControllerFileNameTests.cs" />
<Compile Include="Src\MvcModelClassViewModelTests.cs" />
<Compile Include="Src\MvcProjectRazorFileTests.cs" />
<Compile Include="Src\MvcProjectTests.cs" />
<Compile Include="Src\MvcTextTemplateHostTests.cs" />
<Compile Include="Src\MvcTextTemplateRepositoryTests.cs" />

22
src/AddIns/BackendBindings/AspNet.Mvc/Test/Helpers/FakeMvcProject.cs

@ -64,16 +64,28 @@ namespace AspNet.Mvc.Tests.Helpers @@ -64,16 +64,28 @@ namespace AspNet.Mvc.Tests.Helpers
return ModelClasses;
}
public List<MvcMasterPageFileName> MasterPageFileNames = new List<MvcMasterPageFileName>();
public List<MvcProjectFile> AspxMasterPageFiles = new List<MvcProjectFile>();
public void AddMasterPageFile(MvcMasterPageFileName fileName)
public void AddAspxMasterPageFile(MvcProjectFile file)
{
MasterPageFileNames.Add(fileName);
AspxMasterPageFiles.Add(file);
}
public IEnumerable<MvcMasterPageFileName> GetAspxMasterPageFileNames()
public IEnumerable<MvcProjectFile> GetAspxMasterPageFiles()
{
return MasterPageFileNames;
return AspxMasterPageFiles;
}
public List<MvcProjectFile> RazorFiles = new List<MvcProjectFile>();
public void AddRazorFile(MvcProjectFile file)
{
RazorFiles.Add(file);
}
public IEnumerable<MvcProjectFile> GetRazorFiles()
{
return RazorFiles;
}
}
}

32
src/AddIns/BackendBindings/AspNet.Mvc/Test/Helpers/MvcMasterPageFileNameCollectionAssert.cs

@ -1,32 +0,0 @@ @@ -1,32 +0,0 @@
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
using System.Collections.Generic;
using ICSharpCode.AspNet.Mvc;
using ICSharpCode.SharpDevelop;
using NUnit.Framework;
namespace AspNet.Mvc.Tests.Helpers
{
public static class MvcMasterPageFileNameCollectionAssert
{
public static void AreEqual(IEnumerable<MvcMasterPageFileName> expected, IEnumerable<MvcMasterPageFileName> actual)
{
List<string> expectedAsStrings = GetMvcMasterPageFileNamesAsStrings(expected);
List<string> actualAsStrings = GetMvcMasterPageFileNamesAsStrings(actual);
CollectionAssert.AreEqual(expectedAsStrings, actualAsStrings);
}
static List<string> GetMvcMasterPageFileNamesAsStrings(IEnumerable<MvcMasterPageFileName> fileNames)
{
var convertedFileNames = new List<string>();
foreach (MvcMasterPageFileName fileName in fileNames) {
string fileNameAsString = MvcMasterPageFileNameAssert.GetMvcMasterPageFileNameAsString(fileName);
convertedFileNames.Add(fileNameAsString);
}
return convertedFileNames;
}
}
}

10
src/AddIns/BackendBindings/AspNet.Mvc/Test/Helpers/MvcMasterPageFileNameAssert.cs → src/AddIns/BackendBindings/AspNet.Mvc/Test/Helpers/MvcProjectFileAssert.cs

@ -7,16 +7,16 @@ using NUnit.Framework; @@ -7,16 +7,16 @@ using NUnit.Framework;
namespace AspNet.Mvc.Tests.Helpers
{
public static class MvcMasterPageFileNameAssert
public static class MvcProjectFileAssert
{
public static void AreEqual(MvcMasterPageFileName expected, MvcMasterPageFileName actual)
public static void AreEqual(MvcProjectFile expected, MvcProjectFile actual)
{
string expectedAsString = GetMvcMasterPageFileNameAsString(expected);
string actualAsString = GetMvcMasterPageFileNameAsString(actual);
string expectedAsString = GetMvcProjectFileAsString(expected);
string actualAsString = GetMvcProjectFileAsString(actual);
Assert.AreEqual(expectedAsString, actualAsString);
}
public static string GetMvcMasterPageFileNameAsString(MvcMasterPageFileName fileName)
public static string GetMvcProjectFileAsString(MvcProjectFile fileName)
{
return String.Format(
"FileName: {0}\r\nFolder: {1}\r\n, FullPath: {2}",

32
src/AddIns/BackendBindings/AspNet.Mvc/Test/Helpers/MvcProjectFileCollectionAssert.cs

@ -0,0 +1,32 @@ @@ -0,0 +1,32 @@
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
using System.Collections.Generic;
using ICSharpCode.AspNet.Mvc;
using ICSharpCode.SharpDevelop;
using NUnit.Framework;
namespace AspNet.Mvc.Tests.Helpers
{
public static class MvcProjectFileCollectionAssert
{
public static void AreEqual(IEnumerable<MvcProjectFile> expected, IEnumerable<MvcProjectFile> actual)
{
List<string> expectedAsStrings = GetMvcProjectFilesAsStrings(expected);
List<string> actualAsStrings = GetMvcProjectFilesAsStrings(actual);
CollectionAssert.AreEqual(expectedAsStrings, actualAsStrings);
}
static List<string> GetMvcProjectFilesAsStrings(IEnumerable<MvcProjectFile> fileNames)
{
var convertedFileNames = new List<string>();
foreach (MvcProjectFile fileName in fileNames) {
string fileNameAsString = MvcProjectFileAssert.GetMvcProjectFileAsString(fileName);
convertedFileNames.Add(fileNameAsString);
}
return convertedFileNames;
}
}
}

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

@ -793,21 +793,21 @@ namespace AspNet.Mvc.Tests @@ -793,21 +793,21 @@ namespace AspNet.Mvc.Tests
{
CreateViewModel();
SelectAspxViewEngine();
var masterPageFile = new MvcMasterPageFileName() {
var masterPageFile = new MvcProjectFile() {
FullPath = @"d:\projects\MyProject\Views\Shared\Site.Master",
FileName = "Site.Master",
FolderRelativeToProject = @"Views\Shared"
};
fakeProject.AddMasterPageFile(masterPageFile);
fakeProject.AddAspxMasterPageFile(masterPageFile);
viewModel.OpenSelectMasterPageView();
var expectedFileNames = new MvcMasterPageFileName[] {
var expectedFiles = new MvcProjectFile[] {
masterPageFile
};
ObservableCollection<MvcMasterPageFileName> fileNames = viewModel.MasterPages;
ObservableCollection<MvcProjectFile> files = viewModel.MasterPages;
Assert.AreEqual(expectedFileNames, fileNames);
Assert.AreEqual(expectedFiles, files);
}
[Test]
@ -815,19 +815,19 @@ namespace AspNet.Mvc.Tests @@ -815,19 +815,19 @@ namespace AspNet.Mvc.Tests
{
CreateViewModel();
SelectAspxViewEngine();
var masterPageFile = new MvcMasterPageFileName();
fakeProject.AddMasterPageFile(masterPageFile);
var masterPageFile = new MvcProjectFile();
fakeProject.AddAspxMasterPageFile(masterPageFile);
viewModel.OpenSelectMasterPageView();
viewModel.CloseSelectMasterPageView();
viewModel.OpenSelectMasterPageView();
var expectedFileNames = new MvcMasterPageFileName[] {
var expectedFiles = new MvcProjectFile[] {
masterPageFile
};
ObservableCollection<MvcMasterPageFileName> fileNames = viewModel.MasterPages;
ObservableCollection<MvcProjectFile> files = viewModel.MasterPages;
Assert.AreEqual(expectedFileNames, fileNames);
Assert.AreEqual(expectedFiles, files);
}
[Test]
@ -845,7 +845,7 @@ namespace AspNet.Mvc.Tests @@ -845,7 +845,7 @@ namespace AspNet.Mvc.Tests
public void SelectMasterPageCommand_MasterPageIsSelected_CommandIsEnabled()
{
CreateViewModel();
viewModel.SelectedMasterPage = new MvcMasterPageFileName();
viewModel.SelectedMasterPage = new MvcProjectFile();
bool canExecute = viewModel.SelectMasterPageCommand.CanExecute(null);
@ -883,7 +883,7 @@ namespace AspNet.Mvc.Tests @@ -883,7 +883,7 @@ namespace AspNet.Mvc.Tests
CreateViewModel();
viewModel.MasterPageFile = "test.master";
viewModel.OpenSelectMasterPageView();
var masterPageFileName = new MvcMasterPageFileName() {
var masterPageFileName = new MvcProjectFile() {
FullPath = @"d:\projects\MyProject\Views\Shared\site.master",
FileName = "site.master",
FolderRelativeToProject = @"Views\Shared",
@ -902,7 +902,7 @@ namespace AspNet.Mvc.Tests @@ -902,7 +902,7 @@ namespace AspNet.Mvc.Tests
{
CreateViewModel();
viewModel.OpenSelectMasterPageView();
var masterPageFileName = new MvcMasterPageFileName();
var masterPageFileName = new MvcProjectFile();
viewModel.SelectedMasterPage = masterPageFileName;
MonitorPropertyChangedEvents();
@ -918,28 +918,79 @@ namespace AspNet.Mvc.Tests @@ -918,28 +918,79 @@ namespace AspNet.Mvc.Tests
{
CreateViewModel();
SelectAspxViewEngine();
var masterPageFile1 = new MvcMasterPageFileName() {
var masterPageFile1 = new MvcProjectFile() {
FullPath = @"d:\projects\MyProject\Views\Shared\ViewSite.Master",
FileName = "ViewSite.Master",
FolderRelativeToProject = @"Views\Shared"
};
fakeProject.AddMasterPageFile(masterPageFile1);
var masterPageFile2 = new MvcMasterPageFileName() {
fakeProject.AddAspxMasterPageFile(masterPageFile1);
var masterPageFile2 = new MvcProjectFile() {
FullPath = @"d:\projects\MyProject\Views\Shared\Site.Master",
FileName = "Site.Master",
FolderRelativeToProject = @"Views\Shared"
};
fakeProject.AddMasterPageFile(masterPageFile2);
fakeProject.AddAspxMasterPageFile(masterPageFile2);
viewModel.OpenSelectMasterPageView();
var expectedFileNames = new MvcMasterPageFileName[] {
var expectedFiles = new MvcProjectFile[] {
masterPageFile2,
masterPageFile1
};
ObservableCollection<MvcMasterPageFileName> fileNames = viewModel.MasterPages;
ObservableCollection<MvcProjectFile> files = viewModel.MasterPages;
Assert.AreEqual(expectedFileNames, fileNames);
Assert.AreEqual(expectedFiles, files);
}
[Test]
public void MasterPages_ProjectContainsOneRazorFileAndRazorEngineSelected_ReturnsOneRazorFile()
{
CreateViewModel();
SelectRazorViewEngine();
var razorFile = new MvcProjectFile() {
FullPath = @"d:\projects\MyProject\Views\Shared\_Layout.cshtml",
FileName = "_Layout.cshtml",
FolderRelativeToProject = @"Views\Shared"
};
fakeProject.AddRazorFile(razorFile);
viewModel.OpenSelectMasterPageView();
var expectedFiles = new MvcProjectFile[] {
razorFile
};
ObservableCollection<MvcProjectFile> files = viewModel.MasterPages;
Assert.AreEqual(expectedFiles, files);
}
[Test]
public void MasterPages_ProjectContainsTwoRazorPagesInIncorrectSortOrder_ReturnsTwoRazorFilesSorted()
{
CreateViewModel();
SelectRazorViewEngine();
var razorFile1 = new MvcProjectFile() {
FullPath = @"d:\projects\MyProject\Views\Shared\ViewSite.cshtml",
FileName = "ViewSite.cshtml",
FolderRelativeToProject = @"Views\Shared"
};
fakeProject.AddRazorFile(razorFile1);
var razorFile2 = new MvcProjectFile() {
FullPath = @"d:\projects\MyProject\Views\Shared\Site.cshtml",
FileName = "Site.cshtml",
FolderRelativeToProject = @"Views\Shared"
};
fakeProject.AddRazorFile(razorFile2);
viewModel.OpenSelectMasterPageView();
var expectedFiles = new MvcProjectFile[] {
razorFile2,
razorFile1
};
ObservableCollection<MvcProjectFile> files = viewModel.MasterPages;
Assert.AreEqual(expectedFiles, files);
}
}
}

51
src/AddIns/BackendBindings/AspNet.Mvc/Test/Src/MvcMasterPageFileNameTests.cs → src/AddIns/BackendBindings/AspNet.Mvc/Test/Src/MvcProjectFileTests.cs

@ -9,23 +9,22 @@ using NUnit.Framework; @@ -9,23 +9,22 @@ using NUnit.Framework;
namespace AspNet.Mvc.Tests
{
[TestFixture]
public class MvcMasterPageFileNameTests
public class MvcProjectFileTests
{
TestableProject project;
MvcMasterPageFileName masterPageFileName;
MvcProjectFile file;
void CreateProject(string fileName)
{
project = TestableProject.CreateProject(fileName, "MyProject");
}
MvcMasterPageFileName CreateMasterPageFileName(string fullPath)
MvcProjectFile CreateProjectFile(string fullPath)
{
var projectItem = new FileProjectItem(project, ItemType.Compile);
projectItem.FileName = fullPath;
masterPageFileName = new MvcMasterPageFileName(projectItem);
return masterPageFileName;
file = new MvcProjectFile(projectItem);
return file;
}
[Test]
@ -33,9 +32,9 @@ namespace AspNet.Mvc.Tests @@ -33,9 +32,9 @@ namespace AspNet.Mvc.Tests
{
CreateProject(@"d:\projects\MyProject\MyProject.csproj");
string expectedFullPath = @"d:\projects\MyProject\Views\Shared\Site.Master";
CreateMasterPageFileName(expectedFullPath);
CreateProjectFile(expectedFullPath);
string fullPath = masterPageFileName.FullPath;
string fullPath = file.FullPath;
Assert.AreEqual(expectedFullPath, fullPath);
}
@ -44,9 +43,9 @@ namespace AspNet.Mvc.Tests @@ -44,9 +43,9 @@ namespace AspNet.Mvc.Tests
public void FileName_CreatedFromFileProjectItem_ReturnsFileNameWithoutFolder()
{
CreateProject(@"d:\projects\MyProject\MyProject.csproj");
CreateMasterPageFileName(@"d:\projects\MyProject\Views\Shared\Site.Master");
CreateProjectFile(@"d:\projects\MyProject\Views\Shared\Site.Master");
string fileName = masterPageFileName.FileName;
string fileName = file.FileName;
Assert.AreEqual("Site.Master", fileName);
}
@ -55,9 +54,9 @@ namespace AspNet.Mvc.Tests @@ -55,9 +54,9 @@ namespace AspNet.Mvc.Tests
public void FolderRelativeToProject_CreatedFromFileProjectItem_ReturnsFileNameWithoutFolder()
{
CreateProject(@"d:\projects\MyProject\MyProject.csproj");
CreateMasterPageFileName(@"d:\projects\MyProject\Views\Shared\Site.Master");
CreateProjectFile(@"d:\projects\MyProject\Views\Shared\Site.Master");
string folder = masterPageFileName.FolderRelativeToProject;
string folder = file.FolderRelativeToProject;
Assert.AreEqual(@"Views\Shared", folder);
}
@ -66,9 +65,9 @@ namespace AspNet.Mvc.Tests @@ -66,9 +65,9 @@ namespace AspNet.Mvc.Tests
public void VirtualPath_CreatedFromFileProjectItem_ReturnsAspNetVirtualPathForFileName()
{
CreateProject(@"d:\projects\MyProject\MyProject.csproj");
CreateMasterPageFileName(@"d:\projects\MyProject\Views\Shared\Site.Master");
CreateProjectFile(@"d:\projects\MyProject\Views\Shared\Site.Master");
string virtualPath = masterPageFileName.VirtualPath;
string virtualPath = file.VirtualPath;
Assert.AreEqual("~/Views/Shared/Site.Master", virtualPath);
}
@ -77,9 +76,9 @@ namespace AspNet.Mvc.Tests @@ -77,9 +76,9 @@ namespace AspNet.Mvc.Tests
public void VirtualPath_FileInProjectRootDirectory_ReturnsAspNetVirtualPathForFileName()
{
CreateProject(@"d:\projects\MyProject\MyProject.csproj");
CreateMasterPageFileName(@"d:\projects\MyProject\Site.Master");
CreateProjectFile(@"d:\projects\MyProject\Site.Master");
string virtualPath = masterPageFileName.VirtualPath;
string virtualPath = file.VirtualPath;
Assert.AreEqual("~/Site.Master", virtualPath);
}
@ -88,8 +87,8 @@ namespace AspNet.Mvc.Tests @@ -88,8 +87,8 @@ namespace AspNet.Mvc.Tests
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");
MvcProjectFile lhs = CreateProjectFile(@"d:\projects\MyProject\Site.Master");
MvcProjectFile rhs = CreateProjectFile(@"d:\projects\MyProject\Site.Master");
int result = lhs.CompareTo(rhs);
@ -100,8 +99,8 @@ namespace AspNet.Mvc.Tests @@ -100,8 +99,8 @@ namespace AspNet.Mvc.Tests
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");
MvcProjectFile lhs = CreateProjectFile(@"d:\projects\MyProject\Shared\A.Master");
MvcProjectFile rhs = CreateProjectFile(@"d:\projects\MyProject\Shared\Z.Master");
int result = lhs.CompareTo(rhs);
@ -112,8 +111,8 @@ namespace AspNet.Mvc.Tests @@ -112,8 +111,8 @@ namespace AspNet.Mvc.Tests
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");
MvcProjectFile lhs = CreateProjectFile(@"d:\projects\MyProject\Shared\Z.Master");
MvcProjectFile rhs = CreateProjectFile(@"d:\projects\MyProject\Shared\A.Master");
int result = lhs.CompareTo(rhs);
@ -124,8 +123,8 @@ namespace AspNet.Mvc.Tests @@ -124,8 +123,8 @@ namespace AspNet.Mvc.Tests
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");
MvcProjectFile lhs = CreateProjectFile(@"d:\projects\MyProject\Z\site.Master");
MvcProjectFile rhs = CreateProjectFile(@"d:\projects\MyProject\A\site.Master");
int result = lhs.CompareTo(rhs);
@ -136,8 +135,8 @@ namespace AspNet.Mvc.Tests @@ -136,8 +135,8 @@ namespace AspNet.Mvc.Tests
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");
MvcProjectFile lhs = CreateProjectFile(@"d:\projects\MyProject\A\site.Master");
MvcProjectFile rhs = CreateProjectFile(@"d:\projects\MyProject\Z\site.Master");
int result = lhs.CompareTo(rhs);

45
src/AddIns/BackendBindings/AspNet.Mvc/Test/Src/MvcProjectMasterPageFileTests.cs

@ -0,0 +1,45 @@ @@ -0,0 +1,45 @@
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
using ICSharpCode.AspNet.Mvc;
using NUnit.Framework;
namespace AspNet.Mvc.Tests
{
[TestFixture]
public class MvcProjectMasterPageFileTests
{
[Test]
public void IsMasterPageFileName_NullFileNamePassed_ReturnsFalse()
{
bool result = MvcProjectMasterPageFile.IsMasterPageFileName(null);
Assert.IsFalse(result);
}
[Test]
public void IsMasterPageFileName_MasterPageFileNamePassed_ReturnsTrue()
{
bool result = MvcProjectMasterPageFile.IsMasterPageFileName("Site.master");
Assert.IsTrue(result);
}
[Test]
public void IsMasterPageFileName_UpperCaseMasterPageFileNamePassed_ReturnsTrue()
{
bool result = MvcProjectMasterPageFile.IsMasterPageFileName("Site.MASTER");
Assert.IsTrue(result);
}
[Test]
public void CreateMvcProjectMasterPageFile_NullProjectItemPassed_ReturnsNull()
{
MvcProjectFile file = MvcProjectMasterPageFile.CreateMvcProjectMasterPageFile(null);
Assert.IsNull(file);
}
}
}

45
src/AddIns/BackendBindings/AspNet.Mvc/Test/Src/MvcProjectRazorFileTests.cs

@ -0,0 +1,45 @@ @@ -0,0 +1,45 @@
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
using ICSharpCode.AspNet.Mvc;
using NUnit.Framework;
namespace AspNet.Mvc.Tests
{
[TestFixture]
public class MvcProjectRazorFileTests
{
[Test]
public void IsRazorFileName_NullFileNamePassed_ReturnsFalse()
{
bool result = MvcProjectRazorFile.IsRazorFile(null);
Assert.IsFalse(result);
}
[Test]
public void IsRazorFileName_RazorFileNamePassed_ReturnsTrue()
{
bool result = MvcProjectRazorFile.IsRazorFileName("layout.cshtml");
Assert.IsTrue(result);
}
[Test]
public void IsRazorFileName_UpperCaseRazorFileNamePassed_ReturnsTrue()
{
bool result = MvcProjectRazorFile.IsRazorFileName("test.CSHTML");
Assert.IsTrue(result);
}
[Test]
public void CreateMvcProjectRazorFile_NullProjectItemPassed_ReturnsNull()
{
MvcProjectFile file = MvcProjectRazorFile.CreateMvcProjectRazorFile(null);
Assert.IsNull(file);
}
}
}

106
src/AddIns/BackendBindings/AspNet.Mvc/Test/Src/MvcProjectTests.cs

@ -35,10 +35,17 @@ namespace AspNet.Mvc.Tests @@ -35,10 +35,17 @@ namespace AspNet.Mvc.Tests
testableProject.AddFileToProject(fileName);
}
List<MvcMasterPageFileName> GetAspxMasterPageFileNames()
List<MvcProjectFile> GetAspxMasterPageFiles()
{
return new List<MvcMasterPageFileName>(
project.GetAspxMasterPageFileNames()
return new List<MvcProjectFile>(
project.GetAspxMasterPageFiles()
);
}
List<MvcProjectFile> GetRazorFiles()
{
return new List<MvcProjectFile>(
project.GetRazorFiles()
);
}
@ -125,74 +132,129 @@ namespace AspNet.Mvc.Tests @@ -125,74 +132,129 @@ namespace AspNet.Mvc.Tests
}
[Test]
public void GetAspxMasterPageFileNames_OneMasterPageInProject_ReturnsOneFileName()
public void GetAspxMasterPageFiles_OneMasterPageInProject_ReturnsOneFile()
{
CreateProject(@"d:\projects\AspNetMvcProject\MyProject.csproj");
AddFileToProject(@"d:\projects\AspNetMvcProject\Views\Shared\Site.Master");
List<MvcMasterPageFileName> fileNames = GetAspxMasterPageFileNames();
List<MvcProjectFile> files = GetAspxMasterPageFiles();
Assert.AreEqual(1, fileNames.Count);
Assert.AreEqual(1, files.Count);
}
[Test]
public void GetAspxMasterPageFileNames_OneMasterPageInProject_ReturnsOneMasterPageWithExpectedFileName()
public void GetAspxMasterPageFiles_OneMasterPageInProject_ReturnsOneMasterPageWithExpectedFile()
{
CreateProject(@"d:\projects\AspNetMvcProject\MyProject.csproj");
AddFileToProject(@"d:\projects\AspNetMvcProject\Views\Shared\Site.Master");
MvcMasterPageFileName fileName = GetAspxMasterPageFileNames().First();
MvcProjectFile file = GetAspxMasterPageFiles().First();
var expectedFileName = new MvcMasterPageFileName() {
var expectedFile = new MvcProjectFile() {
FullPath = @"d:\projects\AspNetMvcProject\Views\Shared\Site.Master",
FileName = "Site.Master",
FolderRelativeToProject = @"Views\Shared"
};
MvcMasterPageFileNameAssert.AreEqual(expectedFileName, fileName);
MvcProjectFileAssert.AreEqual(expectedFile, file);
}
[Test]
public void GetAspxMasterPageFileNames_OneHtmlFileAndOneMasterPageInProject_ReturnsOneMasterPageWithExpectedFileName()
public void GetAspxMasterPageFiles_OneHtmlFileAndOneMasterPageInProject_ReturnsOneMasterPageWithExpectedFileName()
{
CreateProject(@"d:\projects\AspNetMvcProject\MyProject.csproj");
AddFileToProject(@"d:\projects\AspNetMvcProject\Views\Shared\test.html");
AddFileToProject(@"d:\projects\AspNetMvcProject\Views\Shared\Site.Master");
List<MvcMasterPageFileName> fileNames = GetAspxMasterPageFileNames();
List<MvcProjectFile> files = GetAspxMasterPageFiles();
var expectedFileName = new MvcMasterPageFileName() {
var expectedFileName = new MvcProjectFile() {
FullPath = @"d:\projects\AspNetMvcProject\Views\Shared\Site.Master",
FileName = "Site.Master",
FolderRelativeToProject = @"Views\Shared"
};
var expectedFileNames = new MvcMasterPageFileName[] {
var expectedFiles = new MvcProjectFile[] {
expectedFileName
};
MvcMasterPageFileNameCollectionAssert.AreEqual(expectedFileNames, fileNames);
MvcProjectFileCollectionAssert.AreEqual(expectedFiles, files);
}
[Test]
public void GetAspxMasterPageFileNames_OneMasterPageWithFileExtensionInUpperCaseInProject_ReturnsOneMasterPageWithExpectedFileName()
public void GetAspxMasterPageFiles_OneMasterPageWithFileExtensionInUpperCaseInProject_ReturnsOneMasterPageWithExpectedFileName()
{
CreateProject(@"d:\projects\AspNetMvcProject\MyProject.csproj");
AddFileToProject(@"d:\projects\AspNetMvcProject\Views\Shared\TEST.MASTER");
MvcMasterPageFileName fileName = GetAspxMasterPageFileNames().First();
MvcProjectFile fileName = GetAspxMasterPageFiles().First();
var expectedFileName = new MvcMasterPageFileName() {
var expectedFileName = new MvcProjectFile() {
FullPath = @"d:\projects\AspNetMvcProject\Views\Shared\TEST.MASTER",
FileName = "TEST.MASTER",
FolderRelativeToProject = @"Views\Shared"
};
MvcMasterPageFileNameAssert.AreEqual(expectedFileName, fileName);
MvcProjectFileAssert.AreEqual(expectedFileName, fileName);
}
[Test]
public void GetRazorFiles_OneRazorFileInProject_ReturnsOneFile()
{
CreateProject(@"d:\projects\AspNetMvcProject\MyProject.csproj");
AddFileToProject(@"d:\projects\AspNetMvcProject\Views\Shared\_Layout.cshtml");
List<MvcProjectFile> files = GetRazorFiles();
Assert.AreEqual(1, files.Count);
}
[Test]
public void GetRazorFiles_OneRazorFileInProject_ReturnsOneRazorFileWithExpectedFile()
{
CreateProject(@"d:\projects\AspNetMvcProject\MyProject.csproj");
AddFileToProject(@"d:\projects\AspNetMvcProject\Views\Shared\_Layout.cshtml");
MvcProjectFile file = GetRazorFiles().First();
var expectedFile = new MvcProjectFile() {
FullPath = @"d:\projects\AspNetMvcProject\Views\Shared\_Layout.cshtml",
FileName = "_Layout.cshtml",
FolderRelativeToProject = @"Views\Shared"
};
MvcProjectFileAssert.AreEqual(expectedFile, file);
}
[Test]
public void GetRazorFiles_OneHtmlFileAndOneRazorFileInProject_ReturnsOneRazorFileWithExpectedFileName()
{
CreateProject(@"d:\projects\AspNetMvcProject\MyProject.csproj");
AddFileToProject(@"d:\projects\AspNetMvcProject\Views\Shared\test.html");
AddFileToProject(@"d:\projects\AspNetMvcProject\Views\Shared\test.cshtml");
List<MvcProjectFile> files = GetRazorFiles();
var expectedFileName = new MvcProjectFile() {
FullPath = @"d:\projects\AspNetMvcProject\Views\Shared\test.cshtml",
FileName = "test.cshtml",
FolderRelativeToProject = @"Views\Shared"
};
var expectedFiles = new MvcProjectFile[] {
expectedFileName
};
MvcProjectFileCollectionAssert.AreEqual(expectedFiles, files);
}
[Test]
public void IsMvcMasterPage_NullFileNamePassed_ReturnsFalse()
public void GetRazorFiles_OneRazorWithFileExtensionInUpperCaseInProject_ReturnsOneRazorFileWithExpectedFileName()
{
bool result = MvcMasterPageFileName.IsMasterPageFileName(null);
CreateProject(@"d:\projects\AspNetMvcProject\MyProject.csproj");
AddFileToProject(@"d:\projects\AspNetMvcProject\Views\Shared\TEST.CSHTML");
MvcProjectFile fileName = GetRazorFiles().First();
var expectedFileName = new MvcProjectFile() {
FullPath = @"d:\projects\AspNetMvcProject\Views\Shared\TEST.CSHTML",
FileName = "TEST.CSHTML",
FolderRelativeToProject = @"Views\Shared"
};
Assert.IsFalse(result);
MvcProjectFileAssert.AreEqual(expectedFileName, fileName);
}
}
}

Loading…
Cancel
Save