You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
310 lines
8.8 KiB
310 lines
8.8 KiB
// 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; |
|
using System.Collections.Generic; |
|
using ICSharpCode.PackageManagement.EnvDTE; |
|
using DTE = ICSharpCode.PackageManagement.EnvDTE; |
|
using ICSharpCode.SharpDevelop.Project; |
|
using NUnit.Framework; |
|
using PackageManagement.Tests.Helpers; |
|
|
|
namespace PackageManagement.Tests.EnvDTE |
|
{ |
|
[TestFixture] |
|
public class ProjectItemsTests |
|
{ |
|
TestableDTEProject project; |
|
ProjectItems projectItems; |
|
TestableProject msbuildProject; |
|
FakeFileService fakeFileService; |
|
|
|
void CreateProjectItems() |
|
{ |
|
project = new TestableDTEProject(); |
|
msbuildProject = project.TestableProject; |
|
projectItems = project.ProjectItems; |
|
fakeFileService = project.FakeFileService; |
|
} |
|
|
|
[Test] |
|
public void AddFromFileCopy_AddFileNameOutsideProjectFolder_FileIsIncludedInProjectInProjectFolder() |
|
{ |
|
CreateProjectItems(); |
|
msbuildProject.FileName = @"d:\projects\myproject\myproject\myproject.csproj"; |
|
string fileName = @"d:\projects\myproject\packages\tools\test.cs"; |
|
|
|
projectItems.AddFromFileCopy(fileName); |
|
|
|
var fileItem = msbuildProject.Items[0] as FileProjectItem; |
|
|
|
Assert.AreEqual("test.cs", fileItem.Include); |
|
} |
|
|
|
[Test] |
|
public void AddFromFileCopy_AddFileNameOutsideProjectFolder_FileItemTypeTakenFromProject() |
|
{ |
|
CreateProjectItems(); |
|
msbuildProject.FileName = @"d:\projects\myproject\myproject\myproject.csproj"; |
|
string fileName = @"d:\projects\myproject\packages\tools\test.cs"; |
|
|
|
msbuildProject.ItemTypeToReturnFromGetDefaultItemType = ItemType.Page; |
|
projectItems.AddFromFileCopy(fileName); |
|
|
|
var fileItem = msbuildProject.Items[0] as FileProjectItem; |
|
|
|
Assert.AreEqual(ItemType.Page, fileItem.ItemType); |
|
} |
|
|
|
[Test] |
|
public void AddFromFileCopy_AddFileNameOutsideProjectFolder_FileNamePassedToDetermineFileItemType() |
|
{ |
|
CreateProjectItems(); |
|
msbuildProject.FileName = @"d:\projects\myproject\myproject\myproject.csproj"; |
|
string fileName = @"d:\projects\myproject\packages\tools\test.cs"; |
|
|
|
msbuildProject.ItemTypeToReturnFromGetDefaultItemType = ItemType.Page; |
|
projectItems.AddFromFileCopy(fileName); |
|
|
|
Assert.AreEqual("test.cs", msbuildProject.FileNamePassedToGetDefaultItemType); |
|
} |
|
|
|
[Test] |
|
public void AddFromFileCopy_AddFileNameOutsideProjectFolder_ProjectIsSaved() |
|
{ |
|
CreateProjectItems(); |
|
msbuildProject.FileName = @"d:\projects\myproject\myproject\myproject.csproj"; |
|
string fileName = @"d:\projects\myproject\packages\tools\test.cs"; |
|
|
|
msbuildProject.ItemTypeToReturnFromGetDefaultItemType = ItemType.Page; |
|
projectItems.AddFromFileCopy(fileName); |
|
|
|
bool saved = msbuildProject.IsSaved; |
|
|
|
Assert.IsTrue(saved); |
|
} |
|
|
|
[Test] |
|
public void AddFromFileCopy_AddFileNameOutsideProjectFolder_FileIsCopied() |
|
{ |
|
CreateProjectItems(); |
|
msbuildProject.FileName = @"d:\projects\myproject\myproject\myproject.csproj"; |
|
string fileName = @"d:\projects\myproject\packages\tools\test.cs"; |
|
|
|
msbuildProject.ItemTypeToReturnFromGetDefaultItemType = ItemType.Page; |
|
projectItems.AddFromFileCopy(fileName); |
|
|
|
string[] expectedFileNames = new string[] { |
|
@"d:\projects\myproject\packages\tools\test.cs", |
|
@"d:\projects\myproject\myproject\test.cs" |
|
}; |
|
|
|
string[] actualFileNames = new string[] { |
|
fakeFileService.OldFileNamePassedToCopyFile, |
|
fakeFileService.NewFileNamePassedToCopyFile |
|
}; |
|
|
|
CollectionAssert.AreEqual(expectedFileNames, actualFileNames); |
|
} |
|
|
|
[Test] |
|
public void GetEnumerator_ProjectHasTwoFiles_TwoFilesReturned() |
|
{ |
|
CreateProjectItems(); |
|
msbuildProject.AddFile(@"Test.cs"); |
|
|
|
var itemsList = new List<DTE.ProjectItem>(); |
|
itemsList.AddRange(projectItems); |
|
|
|
var expectedItems = new string[] { |
|
"Test.cs" |
|
}; |
|
|
|
ProjectItemCollectionAssert.AreEqual(expectedItems, itemsList); |
|
} |
|
|
|
[Test] |
|
public void GetEnumerator_UseUntypedEnumeratorProjectHasOneFile_OneFileReturned() |
|
{ |
|
CreateProjectItems(); |
|
msbuildProject.AddFile(@"Program.cs"); |
|
|
|
var enumerable = projectItems as IEnumerable; |
|
|
|
var expectedFiles = new string[] { |
|
"Program.cs" |
|
}; |
|
|
|
ProjectItemCollectionAssert.AreEqual(expectedFiles, enumerable); |
|
} |
|
|
|
[Test] |
|
public void GetEnumerator_ProjectHasOneFileAndOneReference_OneFileReturned() |
|
{ |
|
CreateProjectItems(); |
|
msbuildProject.AddReference("NUnit.Framework"); |
|
msbuildProject.AddFile(@"Program.cs"); |
|
|
|
var enumerable = projectItems as IEnumerable; |
|
|
|
var expectedFiles = new string[] { |
|
"Program.cs" |
|
}; |
|
|
|
ProjectItemCollectionAssert.AreEqual(expectedFiles, enumerable); |
|
} |
|
|
|
[Test] |
|
public void GetEnumerator_ProjectHasOneFileInSubDirectory_OneFolderReturned() |
|
{ |
|
CreateProjectItems(); |
|
msbuildProject.AddFile(@"src\Program.cs"); |
|
|
|
var enumerable = projectItems as IEnumerable; |
|
|
|
var expectedItems = new string[] { |
|
"src" |
|
}; |
|
|
|
ProjectItemCollectionAssert.AreEqual(expectedItems, enumerable); |
|
} |
|
|
|
[Test] |
|
public void GetEnumerator_ProjectHasTwoFilesInDifferentSubDirectories_TwoFoldersReturned() |
|
{ |
|
CreateProjectItems(); |
|
msbuildProject.AddFile(@"Controllers\Program.cs"); |
|
msbuildProject.AddFile(@"ViewModels\Program.cs"); |
|
|
|
var enumerable = projectItems as IEnumerable; |
|
|
|
var expectedItems = new string[] { |
|
"Controllers", |
|
"ViewModels" |
|
}; |
|
|
|
ProjectItemCollectionAssert.AreEqual(expectedItems, enumerable); |
|
} |
|
|
|
[Test] |
|
public void GetEnumerator_ProjectHasTwoFilesInSameSubDirectory_OneFolderReturned() |
|
{ |
|
CreateProjectItems(); |
|
msbuildProject.AddFile(@"Controllers\Tests\Program1.cs"); |
|
msbuildProject.AddFile(@"Controllers\Tests\Program2.cs"); |
|
|
|
var enumerable = projectItems as IEnumerable; |
|
|
|
var expectedItems = new string[] { |
|
"Controllers", |
|
}; |
|
|
|
ProjectItemCollectionAssert.AreEqual(expectedItems, enumerable); |
|
} |
|
|
|
[Test] |
|
public void GetEnumerator_ProjectHasOneFolderAndOneFileInSameSubDirectory_OneFileAndOneFolderReturned() |
|
{ |
|
CreateProjectItems(); |
|
msbuildProject.AddFile(@"Controllers\Program.cs"); |
|
msbuildProject.AddDirectory(@"Controllers"); |
|
|
|
var enumerable = projectItems as IEnumerable; |
|
|
|
var expectedItems = new string[] { |
|
"Controllers", |
|
}; |
|
|
|
ProjectItemCollectionAssert.AreEqual(expectedItems, enumerable); |
|
} |
|
|
|
[Test] |
|
public void GetEnumerator_ProjectHasOneFolderAndOneFileInSameSubDirectoryWithDirectoryFirstInProject_OneFileAndOneFolderReturned() |
|
{ |
|
CreateProjectItems(); |
|
msbuildProject.AddDirectory(@"Controllers"); |
|
msbuildProject.AddFile(@"Controllers\Program.cs"); |
|
|
|
var enumerable = projectItems as IEnumerable; |
|
|
|
var expectedItems = new string[] { |
|
"Controllers", |
|
}; |
|
|
|
ProjectItemCollectionAssert.AreEqual(expectedItems, enumerable); |
|
} |
|
|
|
[Test] |
|
public void GetEnumerator_ProjectHasOneLinkedFile_OneFileReturned() |
|
{ |
|
CreateProjectItems(); |
|
var fileItem = msbuildProject.AddFile(@"..\..\Program.cs"); |
|
fileItem.SetMetadata("Link", "MyProgram.cs"); |
|
|
|
var enumerable = projectItems as IEnumerable; |
|
|
|
var expectedFiles = new string[] { |
|
"Program.cs" |
|
}; |
|
|
|
ProjectItemCollectionAssert.AreEqual(expectedFiles, enumerable); |
|
} |
|
|
|
[Test] |
|
public void GetEnumerator_ProjectHasFileWithRelativePath_FileIsTreatedAsLinkAndReturned() |
|
{ |
|
CreateProjectItems(); |
|
msbuildProject.AddFile(@"..\..\Program.cs"); |
|
|
|
var enumerable = projectItems as IEnumerable; |
|
|
|
var expectedFiles = new string[] { |
|
"Program.cs" |
|
}; |
|
|
|
ProjectItemCollectionAssert.AreEqual(expectedFiles, enumerable); |
|
} |
|
|
|
[Test] |
|
public void GetEnumerator_ProjectHasOneLinkedFileInProjectSubDirectoryAndOneDirectory_OneDirectoryReturned() |
|
{ |
|
CreateProjectItems(); |
|
msbuildProject.AddDirectory("Configuration"); |
|
var fileItem = msbuildProject.AddFile(@"..\..\AssemblyInfo.cs"); |
|
fileItem.SetMetadata("Link", @"Configuration\MyAssemblyInfo.cs"); |
|
|
|
var enumerable = projectItems as IEnumerable; |
|
|
|
var expectedItems = new string[] { |
|
"Configuration" |
|
}; |
|
|
|
ProjectItemCollectionAssert.AreEqual(expectedItems, enumerable); |
|
} |
|
|
|
[Test] |
|
public void Item_GetProjectItemByName_ReturnsFileInsideProject() |
|
{ |
|
CreateProjectItems(); |
|
msbuildProject.AddFile("Program.cs"); |
|
|
|
var projectItem = projectItems.Item("Program.cs") as DTE.ProjectItem; |
|
string projectItemName = projectItem.Name; |
|
|
|
Assert.AreEqual("Program.cs", projectItemName); |
|
} |
|
|
|
[Test] |
|
public void Item_GetProjectItemByNameWhenNameCaseDoesNotMatchFileNameInProject_ReturnsFileInsideProject() |
|
{ |
|
CreateProjectItems(); |
|
msbuildProject.AddFile("Program.cs"); |
|
|
|
var projectItem = projectItems.Item("PROGRAM.CS") as DTE.ProjectItem; |
|
string projectItemName = projectItem.Name; |
|
|
|
Assert.AreEqual("Program.cs", projectItemName); |
|
} |
|
} |
|
}
|
|
|