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.
448 lines
13 KiB
448 lines
13 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.Generic; |
|
using System.Linq; |
|
using ICSharpCode.PackageManagement; |
|
using ICSharpCode.PackageManagement.Design; |
|
using ICSharpCode.PackageManagement.Scripting; |
|
using ICSharpCode.SharpDevelop.Project; |
|
using NuGet; |
|
using NUnit.Framework; |
|
using PackageManagement.Tests.Helpers; |
|
|
|
namespace PackageManagement.Tests.Scripting |
|
{ |
|
[TestFixture] |
|
public class PackageManagementConsoleViewModelTests |
|
{ |
|
TestablePackageManagementConsoleViewModel viewModel; |
|
FakePackageManagementProjectService projectService; |
|
FakePackageManagementConsoleHost consoleHost; |
|
List<string> propertiesChanged; |
|
|
|
void CreateConsoleHost() |
|
{ |
|
consoleHost = new FakePackageManagementConsoleHost(); |
|
projectService = consoleHost.FakeProjectService; |
|
} |
|
|
|
void CreateViewModel() |
|
{ |
|
CreateConsoleHost(); |
|
CreateViewModel(consoleHost); |
|
} |
|
|
|
void CreateViewModel(IPackageManagementConsoleHost consoleHost) |
|
{ |
|
viewModel = new TestablePackageManagementConsoleViewModel(consoleHost); |
|
} |
|
|
|
void CreateViewModelWithOneRegisteredPackageSource() |
|
{ |
|
CreateConsoleHost(); |
|
AddOnePackageSourceAndRemoveAnyExistingPackageSources(); |
|
CreateViewModel(consoleHost); |
|
} |
|
|
|
Solution CreateViewModelWithOneProjectOpen() |
|
{ |
|
CreateConsoleHost(); |
|
Solution solution = CreateSolutionWithOneProject(); |
|
projectService.OpenSolution = solution; |
|
CreateViewModel(consoleHost); |
|
|
|
return solution; |
|
} |
|
|
|
Solution CreateSolutionWithOneProject() |
|
{ |
|
TestableProject project = ProjectHelper.CreateTestProject(); |
|
Solution solution = project.ParentSolution; |
|
solution.AddFolder(project); |
|
|
|
return solution; |
|
} |
|
|
|
void AddOnePackageSourceAndRemoveAnyExistingPackageSources() |
|
{ |
|
viewModel.RegisteredPackageSources.Clear(); |
|
AddOnePackageSource(); |
|
} |
|
|
|
void AddOnePackageSource() |
|
{ |
|
AddOnePackageSource("NewSource"); |
|
} |
|
|
|
void AddOnePackageSource(string name) |
|
{ |
|
viewModel.RegisteredPackageSources.Add(new PackageSource(name)); |
|
} |
|
|
|
PackageSourceViewModel SelectSecondPackageSource() |
|
{ |
|
var selectedPackageSource = viewModel.PackageSources[1]; |
|
viewModel.ActivePackageSource = selectedPackageSource; |
|
return selectedPackageSource; |
|
} |
|
|
|
void RecordPropertyChangedEvents() |
|
{ |
|
propertiesChanged = new List<string>(); |
|
viewModel.PropertyChanged += (sender, e) => propertiesChanged.Add(e.PropertyName); |
|
} |
|
|
|
Solution CreateConsoleHostWithEmptySolutionOpen() |
|
{ |
|
CreateConsoleHost(); |
|
var solution = new Solution(); |
|
projectService.OpenSolution = solution; |
|
return solution; |
|
} |
|
|
|
Solution CreateViewModelWithEmptySolutionOpen() |
|
{ |
|
var solution = CreateConsoleHostWithEmptySolutionOpen(); |
|
CreateViewModel(consoleHost); |
|
return solution; |
|
} |
|
|
|
TestableProject AddProjectToSolution(Solution solution) |
|
{ |
|
var project = ProjectHelper.CreateTestProject(); |
|
solution.AddFolder(project); |
|
return project; |
|
} |
|
|
|
void CloseSolution() |
|
{ |
|
projectService.OpenSolution = null; |
|
projectService.FireSolutionClosedEvent(); |
|
} |
|
|
|
void OpenSolution(Solution solution) |
|
{ |
|
projectService.OpenSolution = solution; |
|
projectService.FireSolutionLoadedEvent(solution); |
|
} |
|
|
|
IProject RemoveProjectFromSolution(Solution solution) |
|
{ |
|
var project = solution.Projects.FirstOrDefault(); |
|
solution.RemoveFolder(project); |
|
return project; |
|
} |
|
|
|
[Test] |
|
public void PackageSources_OneRegisteredPackageSourceWhenConsoleCreated_OnePackageSourceDisplayed() |
|
{ |
|
CreateViewModelWithOneRegisteredPackageSource(); |
|
|
|
var expectedPackageSources = viewModel.RegisteredPackageSources; |
|
var actualPackageSources = viewModel.PackageSources; |
|
|
|
PackageSourceCollectionAssert.AreEqual(expectedPackageSources, actualPackageSources); |
|
} |
|
|
|
[Test] |
|
public void ActivePackageSource_OneRegisteredPackageSourceWhenConsoleCreated_SinglePackageSourceIsActivePackageSource() |
|
{ |
|
CreateViewModelWithOneRegisteredPackageSource(); |
|
var expectedPackageSource = viewModel.RegisteredPackageSources[0]; |
|
var actualPackageSource = viewModel.ActivePackageSource.GetPackageSource(); |
|
|
|
Assert.AreEqual(expectedPackageSource, actualPackageSource); |
|
} |
|
|
|
[Test] |
|
public void PackageSources_OriginalPackageSourceRemovedAndOnePackageSourceAddedAfterConsoleCreated_NewPackageSourceIsDisplayed() |
|
{ |
|
CreateViewModel(); |
|
AddOnePackageSourceAndRemoveAnyExistingPackageSources(); |
|
|
|
var expectedPackageSources = viewModel.RegisteredPackageSources; |
|
var actualPackageSources = viewModel.PackageSources; |
|
|
|
PackageSourceCollectionAssert.AreEqual(expectedPackageSources, actualPackageSources); |
|
} |
|
|
|
[Test] |
|
public void ActivePackageSource_OriginalPackageSourceRemovedAndOnePackageSourceAddedAfterConsoleCreated_ActivePackageSourceIsUpdatedToNewPackageSource() |
|
{ |
|
CreateViewModel(); |
|
AddOnePackageSourceAndRemoveAnyExistingPackageSources(); |
|
|
|
var expectedPackageSource = viewModel.RegisteredPackageSources[0]; |
|
var actualPackageSource = viewModel.ActivePackageSource.GetPackageSource(); |
|
|
|
Assert.AreEqual(expectedPackageSource, actualPackageSource); |
|
} |
|
|
|
[Test] |
|
public void ActivePackageSource_OriginalPackageSourceRemovedAndOnePackageSourceAddedAfterConsoleCreated_PropertyChangedEventFiredForActivePackageSource() |
|
{ |
|
CreateViewModel(); |
|
RecordPropertyChangedEvents(); |
|
AddOnePackageSourceAndRemoveAnyExistingPackageSources(); |
|
|
|
bool result = propertiesChanged.Contains("ActivePackageSource"); |
|
Assert.IsTrue(result); |
|
} |
|
|
|
[Test] |
|
public void ActivePackageSource_TwoPackageSourcesAndActivePackageSourceChangedToSecondOne_ActivePackageSourceChoiceIsRemembered() |
|
{ |
|
CreateViewModel(); |
|
AddOnePackageSource(); |
|
var selectedPackageSource = SelectSecondPackageSource(); |
|
|
|
var actualPackageSource = viewModel.ActivePackageSource; |
|
|
|
Assert.AreEqual(selectedPackageSource, actualPackageSource); |
|
} |
|
|
|
[Test] |
|
public void ActivePackageSource_OnePackageSourceAddedAfterSelectingSecondPackageSource_ActivePackageSourceIsChangedToFirstPackageSource() |
|
{ |
|
CreateViewModel(); |
|
AddOnePackageSource(); |
|
SelectSecondPackageSource(); |
|
AddOnePackageSource("ThirdPackageSource"); |
|
|
|
var expectedPackageSource = viewModel.PackageSources[0]; |
|
var actualPackageSource = viewModel.ActivePackageSource; |
|
|
|
Assert.AreEqual(expectedPackageSource, actualPackageSource); |
|
} |
|
|
|
[Test] |
|
public void ActivePackageSource_SelectedPackageSourceIsRemoved_ActivePackageSourceIsChangedToFirstPackageSource() |
|
{ |
|
CreateViewModel(); |
|
AddOnePackageSource(); |
|
SelectSecondPackageSource(); |
|
viewModel.RegisteredPackageSources.RemoveAt(1); |
|
|
|
var expectedPackageSource = viewModel.PackageSources[0]; |
|
var actualPackageSource = viewModel.ActivePackageSource; |
|
|
|
Assert.AreEqual(expectedPackageSource, actualPackageSource); |
|
} |
|
|
|
[Test] |
|
public void Projects_OneProjectOpenWhenConsoleCreated_OpenProjectIsInProjectsCollection() |
|
{ |
|
var solution = CreateViewModelWithOneProjectOpen(); |
|
var expectedProjects = solution.Projects; |
|
var actualProjects = viewModel.Projects; |
|
|
|
CollectionAssert.AreEqual(expectedProjects, actualProjects); |
|
} |
|
|
|
[Test] |
|
public void DefaultProject_OneProjectOpenWhenConsoleCreated_OpenProjectIsDefaultProject() |
|
{ |
|
var solution = CreateViewModelWithOneProjectOpen(); |
|
var expectedProject = solution.Projects.First(); |
|
var actualProject = viewModel.DefaultProject; |
|
|
|
Assert.AreEqual(expectedProject, actualProject); |
|
} |
|
|
|
[Test] |
|
public void Constructor_EmptySolutionOpenWhenConsoleCreated_DoesNotThrowException() |
|
{ |
|
CreateConsoleHostWithEmptySolutionOpen(); |
|
Assert.DoesNotThrow(() => CreateViewModel(consoleHost)); |
|
} |
|
|
|
[Test] |
|
public void Projects_ProjectAddedToEmptySolution_ProjectDisplayed() |
|
{ |
|
var solution = CreateViewModelWithEmptySolutionOpen(); |
|
var project = AddProjectToSolution(solution); |
|
projectService.FireProjectAddedEvent(project); |
|
|
|
var actualProjects = viewModel.Projects; |
|
var expectedProjects = solution.Projects; |
|
|
|
CollectionAssert.AreEqual(expectedProjects, actualProjects); |
|
} |
|
|
|
[Test] |
|
public void DefaultProject_ProjectAddedToEmptySolution_ProjectAddedIsDefaultProject() |
|
{ |
|
var solution = CreateViewModelWithEmptySolutionOpen(); |
|
var project = AddProjectToSolution(solution); |
|
projectService.FireProjectAddedEvent(project); |
|
|
|
var actualProject = viewModel.DefaultProject; |
|
|
|
Assert.AreEqual(project, actualProject); |
|
} |
|
|
|
[Test] |
|
public void Projects_SolutionClosed_ProjectsRemovedFromList() |
|
{ |
|
CreateViewModelWithOneProjectOpen(); |
|
CloseSolution(); |
|
|
|
int count = viewModel.Projects.Count; |
|
|
|
Assert.AreEqual(0, count); |
|
} |
|
|
|
[Test] |
|
public void DefaultProject_SolutionClosed_DefaultProjectIsSetToNull() |
|
{ |
|
CreateViewModelWithOneProjectOpen(); |
|
CloseSolution(); |
|
|
|
Assert.IsNull(viewModel.DefaultProject); |
|
} |
|
|
|
[Test] |
|
public void DefaultProject_SolutionClosed_PropertyChangedEventFiredForDefaultProject() |
|
{ |
|
CreateViewModelWithOneProjectOpen(); |
|
RecordPropertyChangedEvents(); |
|
CloseSolution(); |
|
|
|
bool result = propertiesChanged.Contains("DefaultProject"); |
|
|
|
Assert.IsTrue(result); |
|
} |
|
|
|
[Test] |
|
public void Projects_SolutionWithOneProjectLoaded_ProjectsListUpdated() |
|
{ |
|
CreateViewModel(); |
|
var solution = CreateSolutionWithOneProject(); |
|
OpenSolution(solution); |
|
|
|
var actualProjects = viewModel.Projects; |
|
var expectedProjects = solution.Projects; |
|
|
|
CollectionAssert.AreEqual(expectedProjects, actualProjects); |
|
} |
|
|
|
[Test] |
|
public void DefaultProject_SolutionWithOneProjectLoaded_DefaultProjectIsSetToProjectInSolution() |
|
{ |
|
CreateViewModel(); |
|
var solution = CreateSolutionWithOneProject(); |
|
OpenSolution(solution); |
|
|
|
var actualProject = viewModel.DefaultProject; |
|
var expectedProject = viewModel.Projects[0]; |
|
|
|
Assert.AreEqual(expectedProject, actualProject); |
|
} |
|
|
|
[Test] |
|
public void DefaultProject_SolutionWithOneProjectLoaded_PropertyChangedEventFiredForDefaultProjectI() |
|
{ |
|
CreateViewModel(); |
|
var solution = CreateSolutionWithOneProject(); |
|
RecordPropertyChangedEvents(); |
|
OpenSolution(solution); |
|
|
|
bool result = propertiesChanged.Contains("DefaultProject"); |
|
|
|
Assert.IsTrue(result); |
|
} |
|
|
|
[Test] |
|
public void Projects_ProjectRemovedFromSolution_ProjectRemovedFromList() |
|
{ |
|
var solution = CreateViewModelWithOneProjectOpen(); |
|
var project = RemoveProjectFromSolution(solution); |
|
projectService.FireSolutionFolderRemoved(project); |
|
|
|
var actualProjects = viewModel.Projects; |
|
var expectedProjects = solution.Projects; |
|
|
|
CollectionAssert.AreEqual(expectedProjects, actualProjects); |
|
} |
|
|
|
[Test] |
|
public void DefaultProject_ProjectRemovedFromSolution_DefaultProjectIsUpdated() |
|
{ |
|
var solution = CreateViewModelWithOneProjectOpen(); |
|
var project = RemoveProjectFromSolution(solution); |
|
projectService.FireSolutionFolderRemoved(project); |
|
|
|
var actualProject = viewModel.DefaultProject; |
|
|
|
Assert.IsNull(actualProject); |
|
} |
|
|
|
[Test] |
|
public void Projects_SolutionFolderRemovedFromSolution_ProjectListIsUnchanged() |
|
{ |
|
var solution = CreateViewModelWithOneProjectOpen(); |
|
var solutionFolder = new SolutionFolder("Test", "Location", "Guid"); |
|
projectService.FireSolutionFolderRemoved(solutionFolder); |
|
|
|
int count = viewModel.Projects.Count; |
|
|
|
Assert.AreEqual(1, count); |
|
} |
|
|
|
[Test] |
|
public void DefaultProject_OneProjectOpenWhenConsoleCreated_DefaultProjectSetForConsole() |
|
{ |
|
var solution = CreateViewModelWithOneProjectOpen(); |
|
var expectedProject = solution.Projects.First(); |
|
var actualProject = consoleHost.DefaultProject; |
|
|
|
Assert.AreEqual(expectedProject, actualProject); |
|
} |
|
|
|
[Test] |
|
public void ActivePackageSource_OneRegisteredPackageSourceWhenConsoleCreated_ActivePackageSourceSetForConsole() |
|
{ |
|
CreateViewModelWithOneRegisteredPackageSource(); |
|
var expectedPackageSource = viewModel.RegisteredPackageSources[0]; |
|
var actualPackageSource = consoleHost.ActivePackageSource; |
|
|
|
Assert.AreEqual(expectedPackageSource, actualPackageSource); |
|
} |
|
|
|
[Test] |
|
public void Dispose_ViewModelDisposed_ConsoleIsDisposed() |
|
{ |
|
CreateViewModel(); |
|
viewModel.Dispose(); |
|
|
|
Assert.IsTrue(consoleHost.IsDisposeCalled); |
|
} |
|
|
|
[Test] |
|
public void ClearConsoleCommand_Executed_ClearsConsole() |
|
{ |
|
CreateViewModel(); |
|
viewModel.ClearConsoleCommand.Execute(null); |
|
|
|
Assert.IsTrue(consoleHost.IsClearCalled); |
|
} |
|
|
|
[Test] |
|
public void Constructor_NewViewModelCreated_ConsoleSetOnConsoleHost() |
|
{ |
|
CreateViewModel(); |
|
|
|
Assert.AreEqual(viewModel.FakeConsole, consoleHost.ScriptingConsole); |
|
} |
|
|
|
[Test] |
|
public void Constructor_NewViewModelCreated_ConsoleHostIsRun() |
|
{ |
|
CreateViewModel(); |
|
|
|
Assert.IsTrue(consoleHost.IsRunCalled); |
|
} |
|
} |
|
}
|
|
|