#develop (short for SharpDevelop) is a free IDE for .NET programming languages.
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

// 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);
}
}
}