Browse Source

Support using NuGet packages in project templates.

pull/16/merge
Matt Ward 14 years ago
parent
commit
2eb67539d6
  1. BIN
      data/templates/packages/Modernizr.1.7.nupkg
  2. BIN
      data/templates/packages/jQuery.1.6.1.nupkg
  3. 13
      data/templates/project/CSharp/MvcWebProject.xpt
  4. 13
      data/templates/project/VB/MvcWebProject.xpt
  5. 10
      src/AddIns/Misc/PackageManagement/Project/PackageManagement.addin
  6. 20
      src/AddIns/Misc/PackageManagement/Project/PackageManagement.csproj
  7. 34
      src/AddIns/Misc/PackageManagement/Project/Src/DefaultProjectTemplatePackageSource.cs
  8. 7
      src/AddIns/Misc/PackageManagement/Project/Src/Design/FakeSettings.cs
  9. 15
      src/AddIns/Misc/PackageManagement/Project/Src/IPackageReferenceFile.cs
  10. 12
      src/AddIns/Misc/PackageManagement/Project/Src/IPackageReferenceFileFactory.cs
  11. 17
      src/AddIns/Misc/PackageManagement/Project/Src/IPackageReferenceInstaller.cs
  12. 13
      src/AddIns/Misc/PackageManagement/Project/Src/IPackageReferencesForProject.cs
  13. 13
      src/AddIns/Misc/PackageManagement/Project/Src/IPropertyService.cs
  14. 13
      src/AddIns/Misc/PackageManagement/Project/Src/ISettingsFactory.cs
  15. 83
      src/AddIns/Misc/PackageManagement/Project/Src/InstallProjectTemplatePackagesCommand.cs
  16. 46
      src/AddIns/Misc/PackageManagement/Project/Src/NewProjectsCreated.cs
  17. 34
      src/AddIns/Misc/PackageManagement/Project/Src/OpenMSBuildProjects.cs
  18. 19
      src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementPropertyService.cs
  19. 15
      src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementServices.cs
  20. 13
      src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementSolution.cs
  21. 28
      src/AddIns/Misc/PackageManagement/Project/Src/PackageReferenceFile.cs
  22. 15
      src/AddIns/Misc/PackageManagement/Project/Src/PackageReferenceFileFactory.cs
  23. 30
      src/AddIns/Misc/PackageManagement/Project/Src/PackageReferenceFileNameForProject.cs
  24. 62
      src/AddIns/Misc/PackageManagement/Project/Src/PackageReferenceInstaller.cs
  25. 77
      src/AddIns/Misc/PackageManagement/Project/Src/PackageReferencesForProject.cs
  26. 1
      src/AddIns/Misc/PackageManagement/Project/Src/ProcessPackageOperationsAction.cs
  27. 69
      src/AddIns/Misc/PackageManagement/Project/Src/ProjectTemplatePackageRepositoryCache.cs
  28. 22
      src/AddIns/Misc/PackageManagement/Project/Src/ProjectTemplatePackagesSettingsFileName.cs
  29. 5
      src/AddIns/Misc/PackageManagement/Project/Src/RegisteredPackageRepositories.cs
  30. 11
      src/AddIns/Misc/PackageManagement/Project/Src/RegisteredPackageSourceSettings.cs
  31. 13
      src/AddIns/Misc/PackageManagement/Project/Src/RegisteredPackageSources.cs
  32. 49
      src/AddIns/Misc/PackageManagement/Project/Src/RegisteredProjectTemplatePackageSources.cs
  33. 17
      src/AddIns/Misc/PackageManagement/Project/Src/SettingsFactory.cs
  34. 17
      src/AddIns/Misc/PackageManagement/Test/PackageManagement.Tests.csproj
  35. 42
      src/AddIns/Misc/PackageManagement/Test/Src/DefaultProjectTemplatePackageSourceTests.cs
  36. 17
      src/AddIns/Misc/PackageManagement/Test/Src/Helpers/ExceptionThrowingPackageReferencesForProject.cs
  37. 76
      src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakeLoggingService.cs
  38. 57
      src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakeMessageService.cs
  39. 5
      src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakePackageActionRunner.cs
  40. 34
      src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakePackageReferenceFile.cs
  41. 24
      src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakePackageReferenceFileFactory.cs
  42. 23
      src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakePackageReferenceInstaller.cs
  43. 25
      src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakePackageReferencesForProject.cs
  44. 20
      src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakePropertyService.cs
  45. 22
      src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakeSettingsFactory.cs
  46. 58
      src/AddIns/Misc/PackageManagement/Test/Src/Helpers/TestableInstallProjectTemplatePackagesCommand.cs
  47. 36
      src/AddIns/Misc/PackageManagement/Test/Src/InstallPackageActionTests.cs
  48. 167
      src/AddIns/Misc/PackageManagement/Test/Src/InstallProjectTemplatePackagesCommandTests.cs
  49. 101
      src/AddIns/Misc/PackageManagement/Test/Src/NewProjectsCreatedTests.cs
  50. 86
      src/AddIns/Misc/PackageManagement/Test/Src/PackageReferenceInstallerTests.cs
  51. 137
      src/AddIns/Misc/PackageManagement/Test/Src/PackageReferencesForProjectTests.cs
  52. 87
      src/AddIns/Misc/PackageManagement/Test/Src/ProjectTemplatePackageRepositoryCacheTests.cs
  53. 88
      src/AddIns/Misc/PackageManagement/Test/Src/RegisteredProjectTemplatePackageSourcesTests.cs
  54. 2
      src/AddIns/Misc/PackageManagement/Test/Src/UpdatePackageActionTests.cs
  55. 11
      src/Main/Base/Project/Src/Internal/Templates/Project/ProjectCreateInformation.cs

BIN
data/templates/packages/Modernizr.1.7.nupkg

Binary file not shown.

BIN
data/templates/packages/jQuery.1.6.1.nupkg

Binary file not shown.

13
data/templates/project/CSharp/MvcWebProject.xpt

@ -1,7 +1,7 @@ @@ -1,7 +1,7 @@
<Template
originator="Matt Ward"
created="04/06/2011"
lastModified="04/06/2011">
lastModified="17/06/2011">
<!-- Template Header -->
<TemplateConfiguration>
@ -17,6 +17,7 @@ @@ -17,6 +17,7 @@
<Actions>
<Open filename="Views\Home\Index.aspx"/>
<Open filename="Controllers\HomeController.cs"/>
<RunCommand path="/AddIns/PackageManagement/TemplateCommands/InstallPackages"/>
</Actions>
<Project language="C#">
@ -46,6 +47,7 @@ @@ -46,6 +47,7 @@
</Imports>
<Files>
<File name="Properties\AssemblyInfo.cs" src="DefaultAssemblyInfo.cs" />
<File name="Content\Site.css">
<![CDATA[
body
@ -233,7 +235,6 @@ namespace ${StandardNamespace} @@ -233,7 +235,6 @@ namespace ${StandardNamespace}
}
]]>
</File>
<File name="Properties\AssemblyInfo.cs" src="DefaultAssemblyInfo.cs" />
<File name="Views\Home\Contact.aspx">
<![CDATA[<%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage" %>
@ -300,6 +301,14 @@ namespace ${StandardNamespace} @@ -300,6 +301,14 @@ namespace ${StandardNamespace}
</div>
</body>
</html>
]]>
</File>
<File name="packages.config">
<![CDATA[<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="jQuery" version="1.6.1" />
<package id="Modernizr" version="1.7" />
</packages>
]]>
</File>
<File name="web.config">

13
data/templates/project/VB/MvcWebProject.xpt

@ -1,7 +1,7 @@ @@ -1,7 +1,7 @@
<Template
originator="Matt Ward"
created="04/06/2011"
lastModified="04/06/2011">
lastModified="17/06/2011">
<!-- Template Header -->
<TemplateConfiguration>
@ -17,6 +17,7 @@ @@ -17,6 +17,7 @@
<Actions>
<Open filename="Views\Home\Index.aspx"/>
<Open filename="Controllers\HomeController.vb"/>
<RunCommand path="/AddIns/PackageManagement/TemplateCommands/InstallPackages"/>
</Actions>
<Project language="VBNet">
@ -46,6 +47,7 @@ @@ -46,6 +47,7 @@
</Imports>
<Files>
<File name="Properties\AssemblyInfo.vb" src="DefaultAssemblyInfo.vb" />
<File name="Content\Site.css">
<![CDATA[
body
@ -225,7 +227,6 @@ Public Class MvcApplication @@ -225,7 +227,6 @@ Public Class MvcApplication
End Class
]]>
</File>
<File name="Properties\AssemblyInfo.vb" src="DefaultAssemblyInfo.vb" />
<File name="Views\Home\Contact.aspx">
<![CDATA[<%@ Page Language="VB" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage" %>
@ -292,6 +293,14 @@ End Class @@ -292,6 +293,14 @@ End Class
</div>
</body>
</html>
]]>
</File>
<File name="packages.config">
<![CDATA[<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="jQuery" version="1.6.1" />
<package id="Modernizr" version="1.7" />
</packages>
]]>
</File>
<File name="web.config">

10
src/AddIns/Misc/PackageManagement/Project/PackageManagement.addin

@ -68,7 +68,8 @@ @@ -68,7 +68,8 @@
class="ICSharpCode.PackageManagement.RegisteredPackageSourcesView"/>
</OptionPanel>
</Path>
<!-- Package Management Console Pad -->
<Path name="/SharpDevelop/Workbench/Pads">
<Pad
id="PackageManagementConsole"
@ -78,4 +79,11 @@ @@ -78,4 +79,11 @@
defaultPosition="Bottom, Hidden"
class="ICSharpCode.PackageManagement.Scripting.PackageManagementConsolePad"/>
</Path>
<!-- Project template command -->
<Path name="/AddIns/PackageManagement/TemplateCommands">
<Class
id="InstallPackages"
class="ICSharpCode.PackageManagement.InstallProjectTemplatePackagesCommand"/>
</Path>
</AddIn>

20
src/AddIns/Misc/PackageManagement/Project/PackageManagement.csproj

@ -73,6 +73,7 @@ @@ -73,6 +73,7 @@
<Compile Include="Src\AddPackageReferenceCommand.cs" />
<Compile Include="Src\AggregateExceptionErrorMessage.cs" />
<Compile Include="Src\ConsolePackageActionRunner.cs" />
<Compile Include="Src\DefaultProjectTemplatePackageSource.cs" />
<Compile Include="Src\Design\FakePackageManagementProject.cs" />
<Compile Include="Src\EnvDTE\ColorableItems.cs" />
<Compile Include="Src\EnvDTE\CustomizedHighlightingRules.cs" />
@ -107,13 +108,22 @@ @@ -107,13 +108,22 @@
<Compile Include="Src\EnvDTE\TextEditorOptions.cs" />
<Compile Include="Src\FileExistsException.cs" />
<Compile Include="Src\IAddPackageReferenceView.cs" />
<Compile Include="Src\InstallProjectTemplatePackagesCommand.cs" />
<Compile Include="Src\IPackageActionRunner.cs" />
<Compile Include="Src\IPackageFromRepository.cs" />
<Compile Include="Src\IPackageManagementEvents.cs" />
<Compile Include="Src\IPackageManagementProject.cs" />
<Compile Include="Src\IPackageManagementProjectFactory.cs" />
<Compile Include="Src\IPackageManagementWorkbench.cs" />
<Compile Include="Src\IPackageReferenceFile.cs" />
<Compile Include="Src\IPackageReferenceFileFactory.cs" />
<Compile Include="Src\IPackageReferenceInstaller.cs" />
<Compile Include="Src\IPackageReferencesForProject.cs" />
<Compile Include="Src\IPropertyService.cs" />
<Compile Include="Src\ISettingsFactory.cs" />
<Compile Include="Src\IThreadSafePackageManagementEvents.cs" />
<Compile Include="Src\NewProjectsCreated.cs" />
<Compile Include="Src\OpenMSBuildProjects.cs" />
<Compile Include="Src\PackageActionRunner.cs" />
<Compile Include="Src\PackageActionsToRun.cs" />
<Compile Include="Src\PackageFiles.cs" />
@ -123,14 +133,22 @@ @@ -123,14 +133,22 @@
<Compile Include="Src\PackageManagementLogger.cs" />
<Compile Include="Src\PackageManagementProject.cs" />
<Compile Include="Src\PackageManagementProjectFactory.cs" />
<Compile Include="Src\PackageManagementPropertyService.cs" />
<Compile Include="Src\PackageManagementWorkbench.cs" />
<Compile Include="Src\PackageOperationExceptionEventArgs.cs" />
<Compile Include="Src\PackageOperationMessage.cs" />
<Compile Include="Src\PackageOperationMessageLoggedEventArgs.cs" />
<Compile Include="Src\PackageReferenceFile.cs" />
<Compile Include="Src\PackageReferenceFileFactory.cs" />
<Compile Include="Src\PackageReferenceFileNameForProject.cs" />
<Compile Include="Src\PackageReferenceInstaller.cs" />
<Compile Include="Src\PackageReferencesForProject.cs" />
<Compile Include="Src\PackageViewModelOperationLogger.cs" />
<Compile Include="Src\ParentPackageOperationEventArgs.cs" />
<Compile Include="Src\ProcessPackageOperationsAction.cs" />
<Compile Include="Src\ProjectBrowserRefresher.cs" />
<Compile Include="Src\ProjectTemplatePackageRepositoryCache.cs" />
<Compile Include="Src\ProjectTemplatePackagesSettingsFileName.cs" />
<Compile Include="Src\RegisteredPackageRepositories.cs" />
<Compile Include="Src\AddPackageReferenceView.xaml.cs">
<DependentUpon>AddPackageReferenceView.xaml</DependentUpon>
@ -218,6 +236,7 @@ @@ -218,6 +236,7 @@
<Compile Include="Src\PackageManagementSolution.cs" />
<Compile Include="Src\PackageManagementTask.cs" />
<Compile Include="Src\PackageManagementTaskFactory.cs" />
<Compile Include="Src\RegisteredProjectTemplatePackageSources.cs" />
<Compile Include="Src\Scripting\IPackageManagementConsoleHost.cs" />
<Compile Include="Src\Scripting\IPackageScriptRunner.cs" />
<Compile Include="Src\Scripting\IPowerShellDetection.cs" />
@ -230,6 +249,7 @@ @@ -230,6 +249,7 @@
<Compile Include="Src\Scripting\PowerShellMissingConsoleHost.cs" />
<Compile Include="Src\Scripting\PowerShellWorkingDirectory.cs" />
<Compile Include="Src\Scripting\ResetPowerShellWorkingDirectoryOnSolutionClosed.cs" />
<Compile Include="Src\SettingsFactory.cs" />
<Compile Include="Src\SolutionPackageRepositoryPath.cs" />
<Compile Include="Src\PackageSourceConverter.cs" />
<Compile Include="Src\PackageSourceViewModel.cs" />

34
src/AddIns/Misc/PackageManagement/Project/Src/DefaultProjectTemplatePackageSource.cs

@ -0,0 +1,34 @@ @@ -0,0 +1,34 @@
// 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 NuGet;
namespace ICSharpCode.PackageManagement
{
public class DefaultProjectTemplatePackageSource
{
PackageSource packageSource;
public DefaultProjectTemplatePackageSource()
: this(new PackageManagementPropertyService())
{
}
public DefaultProjectTemplatePackageSource(IPropertyService propertyService)
{
CreatePackageSource(propertyService.DataDirectory);
}
void CreatePackageSource(string dataDirectory)
{
string packageDirectory = Path.Combine(dataDirectory, @"templates\packages");
packageSource = new PackageSource(packageDirectory, "Default");
}
public PackageSource PackageSource {
get { return packageSource; }
}
}
}

7
src/AddIns/Misc/PackageManagement/Project/Src/Design/FakeSettings.cs

@ -111,5 +111,12 @@ namespace ICSharpCode.PackageManagement.Design @@ -111,5 +111,12 @@ namespace ICSharpCode.PackageManagement.Design
Sections.Remove(RegisteredPackageSourceSettings.PackageSourcesSectionName);
Sections.Add(RegisteredPackageSourceSettings.PackageSourcesSectionName, null);
}
public void AddFakePackageSources(IEnumerable<PackageSource> packageSources)
{
foreach (PackageSource packageSource in packageSources) {
AddFakePackageSource(packageSource);
}
}
}
}

15
src/AddIns/Misc/PackageManagement/Project/Src/IPackageReferenceFile.cs

@ -0,0 +1,15 @@ @@ -0,0 +1,15 @@
// 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 NuGet;
namespace ICSharpCode.PackageManagement
{
public interface IPackageReferenceFile
{
IEnumerable<PackageReference> GetPackageReferences();
void DeleteEntry(string id, Version version);
}
}

12
src/AddIns/Misc/PackageManagement/Project/Src/IPackageReferenceFileFactory.cs

@ -0,0 +1,12 @@ @@ -0,0 +1,12 @@
// 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;
namespace ICSharpCode.PackageManagement
{
public interface IPackageReferenceFileFactory
{
IPackageReferenceFile CreatePackageReferenceFile(string fileName);
}
}

17
src/AddIns/Misc/PackageManagement/Project/Src/IPackageReferenceInstaller.cs

@ -0,0 +1,17 @@ @@ -0,0 +1,17 @@
// 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.SharpDevelop.Project;
using NuGet;
namespace ICSharpCode.PackageManagement
{
public interface IPackageReferenceInstaller
{
void InstallPackages(
IEnumerable<PackageReference> packageReferences,
MSBuildBasedProject project);
}
}

13
src/AddIns/Misc/PackageManagement/Project/Src/IPackageReferencesForProject.cs

@ -0,0 +1,13 @@ @@ -0,0 +1,13 @@
// 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;
namespace ICSharpCode.PackageManagement
{
public interface IPackageReferencesForProject
{
void RemovePackageReferences();
void InstallPackages();
}
}

13
src/AddIns/Misc/PackageManagement/Project/Src/IPropertyService.cs

@ -0,0 +1,13 @@ @@ -0,0 +1,13 @@
// 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;
namespace ICSharpCode.PackageManagement
{
public interface IPropertyService
{
string DataDirectory { get; }
string ConfigDirectory { get; }
}
}

13
src/AddIns/Misc/PackageManagement/Project/Src/ISettingsFactory.cs

@ -0,0 +1,13 @@ @@ -0,0 +1,13 @@
// 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 NuGet;
namespace ICSharpCode.PackageManagement
{
public interface ISettingsFactory
{
ISettings CreateSettings(string directory);
}
}

83
src/AddIns/Misc/PackageManagement/Project/Src/InstallProjectTemplatePackagesCommand.cs

@ -0,0 +1,83 @@ @@ -0,0 +1,83 @@
// 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.Core;
using ICSharpCode.Core.Services;
using ICSharpCode.SharpDevelop.Internal.Templates;
using ICSharpCode.SharpDevelop.Project;
namespace ICSharpCode.PackageManagement
{
public class InstallProjectTemplatePackagesCommand : AbstractCommand
{
IPackageRepositoryCache packageRepositoryCache;
IPackageManagementProjectService projectService;
IMessageService messageService;
ILoggingService loggingService;
public InstallProjectTemplatePackagesCommand()
: this(
PackageManagementServices.ProjectTemplatePackageRepositoryCache,
PackageManagementServices.ProjectService,
ServiceManager.Instance.MessageService,
ServiceManager.Instance.LoggingService)
{
}
public InstallProjectTemplatePackagesCommand(
IPackageRepositoryCache packageRepositoryCache,
IPackageManagementProjectService projectService,
IMessageService messageService,
ILoggingService loggingService)
{
this.packageRepositoryCache = packageRepositoryCache;
this.projectService = projectService;
this.messageService = messageService;
this.loggingService = loggingService;
}
public override void Run()
{
try {
InstallPackages();
} catch (Exception ex) {
DisplayError(ex);
}
}
void DisplayError(Exception ex)
{
loggingService.Error(null, ex);
messageService.ShowError(ex.Message);
}
void InstallPackages()
{
foreach (MSBuildBasedProject project in GetCreatedProjects()) {
IPackageReferencesForProject packageReferences = CreatePackageReferencesForProject(project);
packageReferences.RemovePackageReferences();
packageReferences.InstallPackages();
}
}
IEnumerable<MSBuildBasedProject> GetCreatedProjects()
{
var createInfo = Owner as ProjectCreateInformation;
var newCreatedProjects = new NewProjectsCreated(createInfo, projectService);
return newCreatedProjects.GetProjects();
}
IPackageReferencesForProject CreatePackageReferencesForProject(MSBuildBasedProject project)
{
return CreatePackageReferencesForProject(project, packageRepositoryCache);
}
protected virtual IPackageReferencesForProject
CreatePackageReferencesForProject(MSBuildBasedProject project, IPackageRepositoryCache packageRepositoryCache)
{
return new PackageReferencesForProject(project, packageRepositoryCache);
}
}
}

46
src/AddIns/Misc/PackageManagement/Project/Src/NewProjectsCreated.cs

@ -0,0 +1,46 @@ @@ -0,0 +1,46 @@
// 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.SharpDevelop.Internal.Templates;
using ICSharpCode.SharpDevelop.Project;
namespace ICSharpCode.PackageManagement
{
public class NewProjectsCreated
{
ProjectCreateInformation createInfo;
OpenMSBuildProjects openProjects;
public NewProjectsCreated(
ProjectCreateInformation createInfo,
IPackageManagementProjectService projectService)
: this(createInfo, new OpenMSBuildProjects(projectService))
{
}
public NewProjectsCreated(
ProjectCreateInformation createInfo,
OpenMSBuildProjects openProjects)
{
this.createInfo = createInfo;
this.openProjects = openProjects;
}
public IEnumerable<MSBuildBasedProject> GetProjects()
{
foreach (IProject project in createInfo.CreatedProjects) {
MSBuildBasedProject openProject = FindProject(project.Name);
if (openProject != null) {
yield return openProject;
}
}
}
MSBuildBasedProject FindProject(string name)
{
return openProjects.FindProject(name);
}
}
}

34
src/AddIns/Misc/PackageManagement/Project/Src/OpenMSBuildProjects.cs

@ -0,0 +1,34 @@ @@ -0,0 +1,34 @@
// 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.SharpDevelop.Project;
namespace ICSharpCode.PackageManagement
{
public class OpenMSBuildProjects
{
IPackageManagementProjectService projectService;
public OpenMSBuildProjects(IPackageManagementProjectService projectService)
{
this.projectService = projectService;
}
public MSBuildBasedProject FindProject(string name)
{
foreach (IProject project in projectService.GetOpenProjects()) {
if (IsProjectNameMatch(project.Name, name)) {
return project as MSBuildBasedProject;
}
}
return null;
}
bool IsProjectNameMatch(string a, string b)
{
return String.Equals(a, b, StringComparison.InvariantCultureIgnoreCase);
}
}
}

19
src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementPropertyService.cs

@ -0,0 +1,19 @@ @@ -0,0 +1,19 @@
// 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.Core;
namespace ICSharpCode.PackageManagement
{
public class PackageManagementPropertyService : IPropertyService
{
public string DataDirectory {
get { return PropertyService.DataDirectory; }
}
public string ConfigDirectory {
get { return PropertyService.ConfigDirectory; }
}
}
}

15
src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementServices.cs

@ -20,15 +20,22 @@ namespace ICSharpCode.PackageManagement @@ -20,15 +20,22 @@ namespace ICSharpCode.PackageManagement
static readonly ResetPowerShellWorkingDirectoryOnSolutionClosed resetPowerShellWorkingDirectory;
static readonly PackageActionsToRun packageActionsToRun = new PackageActionsToRun();
static readonly PackageActionRunner packageActionRunner;
static readonly IPackageRepositoryCache projectTemplatePackageRepositoryCache;
static readonly RegisteredProjectTemplatePackageSources projectTemplatePackageSources;
static PackageManagementServices()
{
options = new PackageManagementOptions();
registeredPackageRepositories = new RegisteredPackageRepositories(options);
var cache = new PackageRepositoryCache(options.PackageSources, options.RecentPackages);
registeredPackageRepositories = new RegisteredPackageRepositories(cache, options);
projectTemplatePackageSources = new RegisteredProjectTemplatePackageSources();
projectTemplatePackageRepositoryCache = new ProjectTemplatePackageRepositoryCache(cache, projectTemplatePackageSources);
outputMessagesView = new PackageManagementOutputMessagesView(packageManagementEvents);
projectBrowserRefresher = new ProjectBrowserRefresher(projectService, packageManagementEvents);
solution = new PackageManagementSolution(registeredPackageRepositories, packageManagementEvents);
consoleHostProvider = new PackageManagementConsoleHostProvider(solution, registeredPackageRepositories);
projectBrowserRefresher = new ProjectBrowserRefresher(projectService, packageManagementEvents);
runPackageInitializationScripts = new RunPackageInitializationScriptsOnSolutionOpen(projectService);
resetPowerShellWorkingDirectory = new ResetPowerShellWorkingDirectoryOnSolutionClosed(projectService, ConsoleHost);
var consolePackageActionRunner = new ConsolePackageActionRunner(ConsoleHost, packageActionsToRun);
@ -70,5 +77,9 @@ namespace ICSharpCode.PackageManagement @@ -70,5 +77,9 @@ namespace ICSharpCode.PackageManagement
public static IPackageActionRunner PackageActionRunner {
get { return packageActionRunner; }
}
public static IPackageRepositoryCache ProjectTemplatePackageRepositoryCache {
get { return projectTemplatePackageRepositoryCache; }
}
}
}

13
src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementSolution.cs

@ -78,17 +78,8 @@ namespace ICSharpCode.PackageManagement @@ -78,17 +78,8 @@ namespace ICSharpCode.PackageManagement
MSBuildBasedProject GetMSBuildProject(string name)
{
foreach (IProject project in projectService.GetOpenProjects()) {
if (IsProjectNameMatch(project.Name, name)) {
return project as MSBuildBasedProject;
}
}
return null;
}
bool IsProjectNameMatch(string a, string b)
{
return String.Equals(a, b, StringComparison.InvariantCultureIgnoreCase);
var openProjects = new OpenMSBuildProjects(projectService);
return openProjects.FindProject(name);
}
IPackageManagementProject CreateProject(PackageSource source, MSBuildBasedProject project)

28
src/AddIns/Misc/PackageManagement/Project/Src/PackageReferenceFile.cs

@ -0,0 +1,28 @@ @@ -0,0 +1,28 @@
// 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;
namespace ICSharpCode.PackageManagement
{
public class PackageReferenceFile : IPackageReferenceFile
{
NuGet.PackageReferenceFile file;
public PackageReferenceFile(string fileName)
{
file = new NuGet.PackageReferenceFile(fileName);
}
public IEnumerable<NuGet.PackageReference> GetPackageReferences()
{
return file.GetPackageReferences();
}
public void DeleteEntry(string id, Version version)
{
file.DeleteEntry(id, version);
}
}
}

15
src/AddIns/Misc/PackageManagement/Project/Src/PackageReferenceFileFactory.cs

@ -0,0 +1,15 @@ @@ -0,0 +1,15 @@
// 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;
namespace ICSharpCode.PackageManagement
{
public class PackageReferenceFileFactory : IPackageReferenceFileFactory
{
public IPackageReferenceFile CreatePackageReferenceFile(string fileName)
{
return new PackageReferenceFile(fileName);
}
}
}

30
src/AddIns/Misc/PackageManagement/Project/Src/PackageReferenceFileNameForProject.cs

@ -0,0 +1,30 @@ @@ -0,0 +1,30 @@
// 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;
using NuGet;
namespace ICSharpCode.PackageManagement
{
public class PackageReferenceFileNameForProject
{
public PackageReferenceFileNameForProject(IProject project)
{
GetFileNameForProject(project);
}
void GetFileNameForProject(IProject project)
{
FileName = Path.Combine(project.Directory, PackageReferenceRepository.PackageReferenceFile);
}
public string FileName { get; private set; }
public override string ToString()
{
return FileName;
}
}
}

62
src/AddIns/Misc/PackageManagement/Project/Src/PackageReferenceInstaller.cs

@ -0,0 +1,62 @@ @@ -0,0 +1,62 @@
// 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.SharpDevelop.Project;
using NuGet;
namespace ICSharpCode.PackageManagement
{
public class PackageReferenceInstaller : IPackageReferenceInstaller
{
IPackageActionRunner packageActionRunner;
IPackageManagementProjectFactory projectFactory;
IPackageRepositoryCache packageRepositoryCache;
public PackageReferenceInstaller(IPackageRepositoryCache packageRepositoryCache)
: this(
packageRepositoryCache,
PackageManagementServices.PackageActionRunner,
new PackageManagementProjectFactory(PackageManagementServices.PackageManagementEvents))
{
}
public PackageReferenceInstaller(
IPackageRepositoryCache packageRepositoryCache,
IPackageActionRunner packageActionRunner,
IPackageManagementProjectFactory projectFactory)
{
this.packageRepositoryCache = packageRepositoryCache;
this.packageActionRunner = packageActionRunner;
this.projectFactory = projectFactory;
}
public void InstallPackages(
IEnumerable<PackageReference> packageReferences,
MSBuildBasedProject project)
{
IPackageManagementProject packageManagementProject = CreatePackageManagementProject(project);
foreach (PackageReference packageReference in packageReferences) {
InstallPackageAction action = CreateInstallPackageAction(packageManagementProject, packageReference);
packageActionRunner.Run(action);
}
}
IPackageManagementProject CreatePackageManagementProject(MSBuildBasedProject project)
{
IPackageRepository repository = packageRepositoryCache.CreateAggregateRepository();
return projectFactory.CreateProject(repository, project);
}
InstallPackageAction CreateInstallPackageAction(
IPackageManagementProject project,
PackageReference packageReference)
{
InstallPackageAction action = project.CreateInstallPackageAction();
action.PackageId = packageReference.Id;
action.PackageVersion = packageReference.Version;
return action;
}
}
}

77
src/AddIns/Misc/PackageManagement/Project/Src/PackageReferencesForProject.cs

@ -0,0 +1,77 @@ @@ -0,0 +1,77 @@
// 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.SharpDevelop.Project;
using NuGet;
namespace ICSharpCode.PackageManagement
{
public class PackageReferencesForProject : IPackageReferencesForProject
{
MSBuildBasedProject project;
IPackageReferenceFileFactory packageReferenceFileFactory;
IPackageReferenceInstaller packageReferenceInstaller;
IPackageReferenceFile packageReferenceFile;
List<PackageReference> packageReferences;
public PackageReferencesForProject(
MSBuildBasedProject project,
IPackageRepositoryCache packageRepositoryCache)
: this(
project,
new PackageReferenceInstaller(packageRepositoryCache),
new PackageReferenceFileFactory())
{
}
public PackageReferencesForProject(
MSBuildBasedProject project,
IPackageReferenceInstaller packageReferenceInstaller,
IPackageReferenceFileFactory packageReferenceFileFactory)
{
this.project = project;
this.packageReferenceFileFactory = packageReferenceFileFactory;
this.packageReferenceInstaller = packageReferenceInstaller;
}
public void RemovePackageReferences()
{
GetPackageReferences();
IPackageReferenceFile file = PackageReferenceFile;
foreach (PackageReference packageReference in packageReferences) {
file.DeleteEntry(packageReference.Id, packageReference.Version);
}
}
void GetPackageReferences()
{
if (packageReferences == null) {
IEnumerable<PackageReference> packageReferencesInFile = PackageReferenceFile.GetPackageReferences();
packageReferences = new List<PackageReference>(packageReferencesInFile);
}
}
IPackageReferenceFile PackageReferenceFile {
get {
if (packageReferenceFile == null) {
packageReferenceFile = GetPackageReferenceFile();
}
return packageReferenceFile;
}
}
IPackageReferenceFile GetPackageReferenceFile()
{
var fileName = new PackageReferenceFileNameForProject(project);
return packageReferenceFileFactory.CreatePackageReferenceFile(fileName.ToString());
}
public void InstallPackages()
{
GetPackageReferences();
packageReferenceInstaller.InstallPackages(packageReferences, project);
}
}
}

1
src/AddIns/Misc/PackageManagement/Project/Src/ProcessPackageOperationsAction.cs

@ -20,6 +20,7 @@ namespace ICSharpCode.PackageManagement @@ -20,6 +20,7 @@ namespace ICSharpCode.PackageManagement
public override bool HasPackageScriptsToRun()
{
BeforeExecute();
var files = new PackageFilesForOperations(Operations);
return files.HasAnyPackageScripts();
}

69
src/AddIns/Misc/PackageManagement/Project/Src/ProjectTemplatePackageRepositoryCache.cs

@ -0,0 +1,69 @@ @@ -0,0 +1,69 @@
// 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 NuGet;
namespace ICSharpCode.PackageManagement
{
/// <summary>
/// Supports a configurable set of package repositories for project templates that can be
/// different to the registered package repositories used with the Add Package Reference dialog.
/// </summary>
public class ProjectTemplatePackageRepositoryCache : IPackageRepositoryCache
{
IPackageRepositoryCache packageRepositoryCache;
RegisteredProjectTemplatePackageSources registeredPackageSources;
/// <summary>
/// Creates a new instance of the ProjectTemplatePackageRepositoryCache.
/// </summary>
/// <param name="packageRepositoryCache">The main package repository cache used
/// with the Add Package Reference dialog.</param>
public ProjectTemplatePackageRepositoryCache(
IPackageRepositoryCache packageRepositoryCache,
RegisteredProjectTemplatePackageSources registeredPackageSources)
{
this.packageRepositoryCache = packageRepositoryCache;
this.registeredPackageSources = registeredPackageSources;
}
public IRecentPackageRepository RecentPackageRepository {
get { throw new NotImplementedException(); }
}
public IPackageRepository CreateAggregateRepository()
{
IEnumerable<IPackageRepository> repositories = GetRegisteredPackageRepositories();
return CreateAggregateRepository(repositories);
}
IEnumerable<IPackageRepository> GetRegisteredPackageRepositories()
{
foreach (PackageSource packageSource in registeredPackageSources.PackageSources) {
yield return CreateRepository(packageSource);
}
}
public ISharedPackageRepository CreateSharedRepository(IPackagePathResolver pathResolver, IFileSystem fileSystem)
{
throw new NotImplementedException();
}
public IRecentPackageRepository CreateRecentPackageRepository(IList<RecentPackageInfo> recentPackages, IPackageRepository aggregateRepository)
{
throw new NotImplementedException();
}
public IPackageRepository CreateAggregateRepository(IEnumerable<IPackageRepository> repositories)
{
return packageRepositoryCache.CreateAggregateRepository(repositories);
}
public IPackageRepository CreateRepository(PackageSource packageSource)
{
return packageRepositoryCache.CreateRepository(packageSource);
}
}
}

22
src/AddIns/Misc/PackageManagement/Project/Src/ProjectTemplatePackagesSettingsFileName.cs

@ -0,0 +1,22 @@ @@ -0,0 +1,22 @@
// 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;
namespace ICSharpCode.PackageManagement
{
public class ProjectTemplatePackagesSettingsFileName
{
string directory;
public ProjectTemplatePackagesSettingsFileName(IPropertyService propertyService)
{
directory = Path.Combine(propertyService.ConfigDirectory, "templates");
}
public string Directory {
get { return directory; }
}
}
}

5
src/AddIns/Misc/PackageManagement/Project/Src/RegisteredPackageRepositories.cs

@ -15,11 +15,6 @@ namespace ICSharpCode.PackageManagement @@ -15,11 +15,6 @@ namespace ICSharpCode.PackageManagement
PackageSource activePackageSource;
IPackageRepository activePackageRepository;
public RegisteredPackageRepositories(PackageManagementOptions options)
: this(new PackageRepositoryCache(options.PackageSources, options.RecentPackages), options)
{
}
public RegisteredPackageRepositories(
IPackageRepositoryCache repositoryCache,
PackageManagementOptions options)

11
src/AddIns/Misc/PackageManagement/Project/Src/RegisteredPackageSourceSettings.cs

@ -19,12 +19,19 @@ namespace ICSharpCode.PackageManagement @@ -19,12 +19,19 @@ namespace ICSharpCode.PackageManagement
new PackageSource("(Aggregate source)", "All") { IsAggregate = true };
ISettings settings;
PackageSource defaultPackageSource;
RegisteredPackageSources packageSources;
PackageSource activePackageSource;
public RegisteredPackageSourceSettings(ISettings settings)
: this(settings, RegisteredPackageSources.DefaultPackageSource)
{
}
public RegisteredPackageSourceSettings(ISettings settings, PackageSource defaultPackageSource)
{
this.settings = settings;
this.defaultPackageSource = defaultPackageSource;
ReadActivePackageSource();
}
@ -57,8 +64,8 @@ namespace ICSharpCode.PackageManagement @@ -57,8 +64,8 @@ namespace ICSharpCode.PackageManagement
void ReadPackageSources()
{
var savedPackageSources = GetPackageSourcesFromSettings();
packageSources = new RegisteredPackageSources(savedPackageSources);
IEnumerable<PackageSource> savedPackageSources = GetPackageSourcesFromSettings();
packageSources = new RegisteredPackageSources(savedPackageSources, defaultPackageSource);
packageSources.CollectionChanged += PackageSourcesChanged;
if (!savedPackageSources.Any()) {

13
src/AddIns/Misc/PackageManagement/Project/Src/RegisteredPackageSources.cs

@ -18,9 +18,16 @@ namespace ICSharpCode.PackageManagement @@ -18,9 +18,16 @@ namespace ICSharpCode.PackageManagement
new PackageSource(DefaultPackageSourceUrl, DefaultPackageSourceName);
public RegisteredPackageSources(IEnumerable<PackageSource> packageSources)
: this(packageSources, DefaultPackageSource)
{
}
public RegisteredPackageSources(
IEnumerable<PackageSource> packageSources,
PackageSource defaultPackageSource)
{
AddPackageSources(packageSources);
AddDefaultPackageSourceIfNoRegisteredPackageSources();
AddDefaultPackageSourceIfNoRegisteredPackageSources(defaultPackageSource);
}
void AddPackageSources(IEnumerable<PackageSource> packageSources)
@ -30,10 +37,10 @@ namespace ICSharpCode.PackageManagement @@ -30,10 +37,10 @@ namespace ICSharpCode.PackageManagement
}
}
void AddDefaultPackageSourceIfNoRegisteredPackageSources()
void AddDefaultPackageSourceIfNoRegisteredPackageSources(PackageSource defaultPackageSource)
{
if (HasNoRegisteredPackageSources) {
Add(DefaultPackageSource);
Add(defaultPackageSource);
}
}

49
src/AddIns/Misc/PackageManagement/Project/Src/RegisteredProjectTemplatePackageSources.cs

@ -0,0 +1,49 @@ @@ -0,0 +1,49 @@
// 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 NuGet;
namespace ICSharpCode.PackageManagement
{
public class RegisteredProjectTemplatePackageSources
{
RegisteredPackageSourceSettings registeredPackageSourceSettings;
public RegisteredProjectTemplatePackageSources()
: this(new PackageManagementPropertyService(), new SettingsFactory())
{
}
public RegisteredProjectTemplatePackageSources(
IPropertyService propertyService,
ISettingsFactory settingsFactory)
{
GetRegisteredPackageSources(propertyService, settingsFactory);
}
void GetRegisteredPackageSources(IPropertyService propertyService, ISettingsFactory settingsFactory)
{
ISettings settings = CreateSettings(propertyService, settingsFactory);
PackageSource defaultPackageSource = CreateDefaultPackageSource(propertyService);
registeredPackageSourceSettings = new RegisteredPackageSourceSettings(settings, defaultPackageSource);
}
ISettings CreateSettings(IPropertyService propertyService, ISettingsFactory settingsFactory)
{
var settingsFileName = new ProjectTemplatePackagesSettingsFileName(propertyService);
return settingsFactory.CreateSettings(settingsFileName.Directory);
}
PackageSource CreateDefaultPackageSource(IPropertyService propertyService)
{
var defaultPackageSource = new DefaultProjectTemplatePackageSource(propertyService);
return defaultPackageSource.PackageSource;
}
public RegisteredPackageSources PackageSources {
get { return registeredPackageSourceSettings.PackageSources; }
}
}
}

17
src/AddIns/Misc/PackageManagement/Project/Src/SettingsFactory.cs

@ -0,0 +1,17 @@ @@ -0,0 +1,17 @@
// 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 NuGet;
namespace ICSharpCode.PackageManagement
{
public class SettingsFactory : ISettingsFactory
{
public ISettings CreateSettings(string directory)
{
var fileSystem = new PhysicalFileSystem(directory);
return new UserSettings(fileSystem);
}
}
}

17
src/AddIns/Misc/PackageManagement/Test/PackageManagement.Tests.csproj

@ -71,6 +71,7 @@ @@ -71,6 +71,7 @@
</Compile>
<Compile Include="Src\AddPackageReferenceCommandTests.cs" />
<Compile Include="Src\ConsolePackageActionRunnerTests.cs" />
<Compile Include="Src\DefaultProjectTemplatePackageSourceTests.cs" />
<Compile Include="Src\EnvDTE\ColorableItemsTests.cs" />
<Compile Include="Src\EnvDTE\DTETests.cs" />
<Compile Include="Src\EnvDTE\FakeCustomizedHighlightingRules.cs" />
@ -88,9 +89,12 @@ @@ -88,9 +89,12 @@
<Compile Include="Src\EnvDTE\TextEditorFontSizePropertyTests.cs" />
<Compile Include="Src\Helpers\ColorHelper.cs" />
<Compile Include="Src\Helpers\ExceptionThrowingPackageManagementProject.cs" />
<Compile Include="Src\Helpers\ExceptionThrowingPackageReferencesForProject.cs" />
<Compile Include="Src\Helpers\ExceptionThrowingRegisteredPackageRepositories.cs" />
<Compile Include="Src\Helpers\FakeAddPackageReferenceView.cs" />
<Compile Include="Src\Helpers\FakeLogger.cs" />
<Compile Include="Src\Helpers\FakeLoggingService.cs" />
<Compile Include="Src\Helpers\FakeMessageService.cs" />
<Compile Include="Src\Helpers\FakePackageActionRunner.cs" />
<Compile Include="Src\Helpers\FakePackageInitializationScriptsInSolution.cs" />
<Compile Include="Src\Helpers\FakePackageInitializationScriptsInSolutionFactory.cs" />
@ -98,6 +102,10 @@ @@ -98,6 +102,10 @@
<Compile Include="Src\Helpers\FakePackageManagementOutputMessagesView.cs" />
<Compile Include="Src\Helpers\FakePackageManagementProjectFactory.cs" />
<Compile Include="Src\Helpers\FakePackageManagementWorkbench.cs" />
<Compile Include="Src\Helpers\FakePackageReferenceFile.cs" />
<Compile Include="Src\Helpers\FakePackageReferenceFileFactory.cs" />
<Compile Include="Src\Helpers\FakePackageReferenceInstaller.cs" />
<Compile Include="Src\Helpers\FakePackageReferencesForProject.cs" />
<Compile Include="Src\Helpers\FakePackageScript.cs" />
<Compile Include="Src\Helpers\FakePackageScriptFactory.cs" />
<Compile Include="Src\Helpers\FakePackageScriptFactoryWithPredefinedPackageScripts.cs" />
@ -106,12 +114,17 @@ @@ -106,12 +114,17 @@
<Compile Include="Src\Helpers\FakePackageViewModelFactory.cs" />
<Compile Include="Src\Helpers\FakePowerShellDetection.cs" />
<Compile Include="Src\Helpers\FakePowerShellSession.cs" />
<Compile Include="Src\Helpers\FakePropertyService.cs" />
<Compile Include="Src\Helpers\FakeSettingsFactory.cs" />
<Compile Include="Src\Helpers\FakeSolutionPackageRepository.cs" />
<Compile Include="Src\Helpers\FakeTextEditorOptions.cs" />
<Compile Include="Src\Helpers\ProjectItemCollectionAssert.cs" />
<Compile Include="Src\Helpers\TestableAddPackageReferenceCommand.cs" />
<Compile Include="Src\Helpers\TestableDTEProject.cs" />
<Compile Include="Src\Helpers\TestableInstallProjectTemplatePackagesCommand.cs" />
<Compile Include="Src\Helpers\TestablePowerShellMissingConsoleHost.cs" />
<Compile Include="Src\InstallProjectTemplatePackagesCommandTests.cs" />
<Compile Include="Src\NewProjectsCreatedTests.cs" />
<Compile Include="Src\PackageActionRunnerTests.cs" />
<Compile Include="Src\PackageActionsToRunTests.cs" />
<Compile Include="Src\PackageFilesTests.cs" />
@ -120,7 +133,10 @@ @@ -120,7 +133,10 @@
<Compile Include="Src\PackageManagementLoggerTests.cs" />
<Compile Include="Src\PackageManagementProjectTests.cs" />
<Compile Include="Src\PackageOperationMessageTests.cs" />
<Compile Include="Src\PackageReferenceInstallerTests.cs" />
<Compile Include="Src\PackageReferencesForProjectTests.cs" />
<Compile Include="Src\ProjectBrowserRefresherTests.cs" />
<Compile Include="Src\ProjectTemplatePackageRepositoryCacheTests.cs" />
<Compile Include="Src\RegisteredPackageRepositoriesTests.cs" />
<Compile Include="Src\Helpers\ExceptionThrowingPackageManagementService.cs" />
<Compile Include="Src\Helpers\ExceptionThrowingPackageOperationResolver.cs" />
@ -192,6 +208,7 @@ @@ -192,6 +208,7 @@
<Compile Include="Src\PackageManagementOutputMessagesViewTests.cs" />
<Compile Include="Src\PackageManagementSolutionTests.cs" />
<Compile Include="Src\PackageRepositoryCacheTests.cs" />
<Compile Include="Src\RegisteredProjectTemplatePackageSourcesTests.cs" />
<Compile Include="Src\Scripting\PackageInitializationScriptsConsoleTests.cs" />
<Compile Include="Src\Scripting\PackageInitializationScriptsTests.cs" />
<Compile Include="Src\Scripting\PackageManagementConsoleHostProviderTests.cs" />

42
src/AddIns/Misc/PackageManagement/Test/Src/DefaultProjectTemplatePackageSourceTests.cs

@ -0,0 +1,42 @@ @@ -0,0 +1,42 @@
// 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.PackageManagement;
using NuGet;
using NUnit.Framework;
using PackageManagement.Tests.Helpers;
namespace PackageManagement.Tests
{
[TestFixture]
public class DefaultProjectTemplatePackageSourceTests
{
DefaultProjectTemplatePackageSource defaultPackageSource;
FakePropertyService CreateFakePropertyService()
{
return new FakePropertyService();
}
void CreateDefaultPackageSource(FakePropertyService propertyService)
{
defaultPackageSource = new DefaultProjectTemplatePackageSource(propertyService);
}
[Test]
public void PackageSource_PropertyServiceDefinesDataFolder_ReturnsDataTemplatePackagesFolder()
{
FakePropertyService propertyService = CreateFakePropertyService();
propertyService.DataDirectory = @"d:\sharpdevelop\data";
CreateDefaultPackageSource(propertyService);
var packageSource = defaultPackageSource.PackageSource;
string sourceDirectory = @"d:\sharpdevelop\data\templates\packages";
var expectedPackageSource = new PackageSource(sourceDirectory, "Default");
Assert.AreEqual(expectedPackageSource, packageSource);
}
}
}

17
src/AddIns/Misc/PackageManagement/Test/Src/Helpers/ExceptionThrowingPackageReferencesForProject.cs

@ -0,0 +1,17 @@ @@ -0,0 +1,17 @@
// 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;
namespace PackageManagement.Tests.Helpers
{
public class ExceptionThrowingPackageReferencesForProject : FakePackageReferencesForProject
{
public Exception ExceptionToThrowOnInstall;
public override void InstallPackages()
{
throw ExceptionToThrowOnInstall;
}
}
}

76
src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakeLoggingService.cs

@ -0,0 +1,76 @@ @@ -0,0 +1,76 @@
// 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.Core.Services;
namespace PackageManagement.Tests.Helpers
{
public class FakeLoggingService : ILoggingService
{
public bool IsDebugEnabled { get; set; }
public bool IsInfoEnabled { get; set; }
public bool IsWarnEnabled { get; set; }
public bool IsErrorEnabled { get; set; }
public bool IsFatalEnabled { get; set; }
public void Debug(object message)
{
}
public void DebugFormatted(string format, params object[] args)
{
}
public void Info(object message)
{
}
public void InfoFormatted(string format, params object[] args)
{
}
public void Warn(object message)
{
}
public void Warn(object message, Exception exception)
{
}
public void WarnFormatted(string format, params object[] args)
{
}
public void Error(object message)
{
}
public Exception ExceptionLoggedAsError;
public void Error(object message, Exception exception)
{
ExceptionLoggedAsError = exception;
}
public void ErrorFormatted(string format, params object[] args)
{
}
public void Fatal(object message)
{
}
public void Fatal(object message, Exception exception)
{
}
public void FatalFormatted(string format, params object[] args)
{
}
}
}

57
src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakeMessageService.cs

@ -0,0 +1,57 @@ @@ -0,0 +1,57 @@
// 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.Core.Services;
namespace PackageManagement.Tests.Helpers
{
public class FakeMessageService : IMessageService
{
public string ErrorMessageDisplayed;
public void ShowError(string message)
{
ErrorMessageDisplayed = message;
}
public Exception ExceptionPassedToShowException;
public void ShowException(Exception ex, string message)
{
ExceptionPassedToShowException = ex;
}
public void ShowWarning(string message)
{
}
public bool AskQuestion(string question, string caption)
{
return false;
}
public int ShowCustomDialog(string caption, string dialogText, int acceptButtonIndex, int cancelButtonIndex, params string[] buttontexts)
{
return 0;
}
public string ShowInputBox(string caption, string dialogText, string defaultValue)
{
return String.Empty;
}
public void ShowMessage(string message, string caption)
{
}
public void InformSaveError(string fileName, string message, string dialogName, Exception exceptionGot)
{
}
public ChooseSaveErrorResult ChooseSaveError(string fileName, string message, string dialogName, Exception exceptionGot, bool chooseLocationEnabled)
{
return ChooseSaveErrorResult.Ignore;
}
}
}

5
src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakePackageActionRunner.cs

@ -2,6 +2,7 @@ @@ -2,6 +2,7 @@
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
using System.Collections.Generic;
using ICSharpCode.PackageManagement;
namespace PackageManagement.Tests.Helpers
@ -13,6 +14,10 @@ namespace PackageManagement.Tests.Helpers @@ -13,6 +14,10 @@ namespace PackageManagement.Tests.Helpers
public void Run(ProcessPackageAction action)
{
ActionPassedToRun = action;
ActionsPassedToRun.Add(action);
}
public List<ProcessPackageAction> ActionsPassedToRun =
new List<ProcessPackageAction>();
}
}

34
src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakePackageReferenceFile.cs

@ -0,0 +1,34 @@ @@ -0,0 +1,34 @@
// 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.PackageManagement;
using NuGet;
namespace PackageManagement.Tests.Helpers
{
public class FakePackageReferenceFile : IPackageReferenceFile
{
public List<PackageReference> FakePackageReferences = new List<PackageReference>();
public void AddFakePackageReference(string packageId, string version)
{
var packageReference = new PackageReference(packageId, new Version(version));
FakePackageReferences.Add(packageReference);
}
public IEnumerable<PackageReference> GetPackageReferences()
{
return FakePackageReferences;
}
public List<PackageReference> EntriesDeleted = new List<PackageReference>();
public void DeleteEntry(string id, Version version)
{
var packageReference = new PackageReference(id, version);
EntriesDeleted.Add(packageReference);
}
}
}

24
src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakePackageReferenceFileFactory.cs

@ -0,0 +1,24 @@ @@ -0,0 +1,24 @@
// 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.PackageManagement;
namespace PackageManagement.Tests.Helpers
{
/// <summary>
/// Description of FakePackageReferenceFileFactory.
/// </summary>
public class FakePackageReferenceFileFactory : IPackageReferenceFileFactory
{
public string FileNamePassedToCreatePackageReferenceFile;
public IPackageReferenceFile CreatePackageReferenceFile(string fileName)
{
FileNamePassedToCreatePackageReferenceFile = fileName;
return FakePackageReferenceFile;
}
public FakePackageReferenceFile FakePackageReferenceFile = new FakePackageReferenceFile();
}
}

23
src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakePackageReferenceInstaller.cs

@ -0,0 +1,23 @@ @@ -0,0 +1,23 @@
// 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.PackageManagement;
using ICSharpCode.SharpDevelop.Project;
using NuGet;
namespace PackageManagement.Tests.Helpers
{
public class FakePackageReferenceInstaller : IPackageReferenceInstaller
{
public IEnumerable<PackageReference> PackageReferencesPassedToInstallPackages;
public MSBuildBasedProject ProjectPassedToInstallPackages;
public void InstallPackages(IEnumerable<PackageReference> packageReferences, MSBuildBasedProject project)
{
PackageReferencesPassedToInstallPackages = packageReferences;
ProjectPassedToInstallPackages = project;
}
}
}

25
src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakePackageReferencesForProject.cs

@ -0,0 +1,25 @@ @@ -0,0 +1,25 @@
// 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.PackageManagement;
namespace PackageManagement.Tests.Helpers
{
public class FakePackageReferencesForProject : IPackageReferencesForProject
{
public bool IsInstallPackagesCalled;
public virtual void InstallPackages()
{
IsInstallPackagesCalled = true;
}
public bool IsRemovePackageReferencesCalled;
public void RemovePackageReferences()
{
IsRemovePackageReferencesCalled = true;
}
}
}

20
src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakePropertyService.cs

@ -0,0 +1,20 @@ @@ -0,0 +1,20 @@
// 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.PackageManagement;
namespace PackageManagement.Tests.Helpers
{
public class FakePropertyService : IPropertyService
{
public FakePropertyService()
{
ConfigDirectory = String.Empty;
DataDirectory = String.Empty;
}
public string DataDirectory { get; set; }
public string ConfigDirectory { get; set; }
}
}

22
src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakeSettingsFactory.cs

@ -0,0 +1,22 @@ @@ -0,0 +1,22 @@
// 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.PackageManagement;
using ICSharpCode.PackageManagement.Design;
using NuGet;
namespace PackageManagement.Tests.Helpers
{
public class FakeSettingsFactory : ISettingsFactory
{
public FakeSettings FakeSettings = new FakeSettings();
public string DirectoryPassedToCreateSettings;
public ISettings CreateSettings(string directory)
{
DirectoryPassedToCreateSettings = directory;
return FakeSettings;
}
}
}

58
src/AddIns/Misc/PackageManagement/Test/Src/Helpers/TestableInstallProjectTemplatePackagesCommand.cs

@ -0,0 +1,58 @@ @@ -0,0 +1,58 @@
// 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.PackageManagement;
using ICSharpCode.PackageManagement.Design;
using ICSharpCode.SharpDevelop.Project;
namespace PackageManagement.Tests.Helpers
{
public class TestableInstallProjectTemplatePackagesCommand : InstallProjectTemplatePackagesCommand
{
public FakeMessageService FakeMessageService;
public FakeLoggingService FakeLoggingService;
public FakePackageRepositoryFactory FakePackageRepositoryCache;
public FakePackageManagementProjectService FakeProjectService;
public TestableInstallProjectTemplatePackagesCommand()
: this(
new FakePackageRepositoryFactory(),
new FakePackageManagementProjectService(),
new FakeMessageService(),
new FakeLoggingService())
{
}
public TestableInstallProjectTemplatePackagesCommand(
FakePackageRepositoryFactory fakePackageRepositoryCache,
FakePackageManagementProjectService projectService,
FakeMessageService messageService,
FakeLoggingService loggingService)
: base(fakePackageRepositoryCache, projectService, messageService, loggingService)
{
this.FakePackageRepositoryCache = fakePackageRepositoryCache;
this.FakeProjectService = projectService;
this.FakeMessageService = messageService;
this.FakeLoggingService = loggingService;
}
public MSBuildBasedProject ProjectPassedToCreatePackageReferencesForProject;
public List<MSBuildBasedProject> ProjectsPassedToCreatePackageReferencesForProject =
new List<MSBuildBasedProject>();
public IPackageRepositoryCache PackageRepositoryCachePassedToCreatePackageReferencesForProject;
public FakePackageReferencesForProject FakePackageReferencesForProject = new FakePackageReferencesForProject();
protected override IPackageReferencesForProject CreatePackageReferencesForProject(
MSBuildBasedProject project,
IPackageRepositoryCache packageRepositoryCache)
{
ProjectPassedToCreatePackageReferencesForProject = project;
ProjectsPassedToCreatePackageReferencesForProject.Add(project);
PackageRepositoryCachePassedToCreatePackageReferencesForProject = packageRepositoryCache;
return FakePackageReferencesForProject;
}
}
}

36
src/AddIns/Misc/PackageManagement/Test/Src/InstallPackageActionTests.cs

@ -190,6 +190,7 @@ namespace PackageManagement.Tests @@ -190,6 +190,7 @@ namespace PackageManagement.Tests
public void HasPackageScriptsToRun_OnePackageInOperationsHasInitPowerShellScript_ReturnsTrue()
{
CreateAction();
action.PackageId = "Test";
AddInstallOperationWithFile(@"tools\init.ps1");
bool hasPackageScripts = action.HasPackageScriptsToRun();
@ -201,6 +202,7 @@ namespace PackageManagement.Tests @@ -201,6 +202,7 @@ namespace PackageManagement.Tests
public void HasPackageScriptsToRun_OnePackageInOperationsHasNoFiles_ReturnsFalse()
{
CreateAction();
action.PackageId = "Test";
action.Operations = new List<PackageOperation>();
bool hasPackageScripts = action.HasPackageScriptsToRun();
@ -212,6 +214,7 @@ namespace PackageManagement.Tests @@ -212,6 +214,7 @@ namespace PackageManagement.Tests
public void HasPackageScriptsToRun_OnePackageInOperationsHasInitPowerShellScriptInUpperCase_ReturnsTrue()
{
CreateAction();
action.PackageId = "Test";
AddInstallOperationWithFile(@"tools\INIT.PS1");
bool hasPackageScripts = action.HasPackageScriptsToRun();
@ -223,6 +226,7 @@ namespace PackageManagement.Tests @@ -223,6 +226,7 @@ namespace PackageManagement.Tests
public void HasPackageScriptsToRun_OnePackageInOperationsHasInstallPowerShellScriptInUpperCase_ReturnsTrue()
{
CreateAction();
action.PackageId = "Test";
AddInstallOperationWithFile(@"tools\INSTALL.PS1");
bool hasPackageScripts = action.HasPackageScriptsToRun();
@ -234,11 +238,43 @@ namespace PackageManagement.Tests @@ -234,11 +238,43 @@ namespace PackageManagement.Tests
public void HasPackageScriptsToRun_OnePackageInOperationsHasUninstallPowerShellScriptInUpperCase_ReturnsTrue()
{
CreateAction();
action.PackageId = "Test";
AddInstallOperationWithFile(@"tools\UNINSTALL.PS1");
bool hasPackageScripts = action.HasPackageScriptsToRun();
Assert.IsTrue(hasPackageScripts);
}
[Test]
public void HasPackageScriptsToRun_ProjectHasOnePackageOperation_DoesNotThrowNullReferenceException()
{
CreateAction();
FakePackage package = fakeProject.FakeSourceRepository.AddFakePackageWithVersion("Test", "1.0");
var operation = new PackageOperation(package, PackageAction.Install);
action.PackageId = package.Id;
action.PackageVersion = package.Version;
fakeProject.FakeInstallOperations.Add(operation);
bool hasPackageScripts = false;
Assert.DoesNotThrow(() => hasPackageScripts = action.HasPackageScriptsToRun());
}
[Test]
public void HasPackageScriptsToRun_ProjectHasOnePackageOperation_PackageLocated()
{
CreateAction();
FakePackage expectedPackage = fakeProject.FakeSourceRepository.AddFakePackageWithVersion("Test", "1.0");
var operation = new PackageOperation(expectedPackage, PackageAction.Install);
action.PackageId = expectedPackage.Id;
action.PackageVersion = expectedPackage.Version;
fakeProject.FakeInstallOperations.Add(operation);
bool hasPackageScripts = action.HasPackageScriptsToRun();
IPackage actualPackage = action.Package;
Assert.AreEqual(expectedPackage, actualPackage);
}
}
}

167
src/AddIns/Misc/PackageManagement/Test/Src/InstallProjectTemplatePackagesCommandTests.cs

@ -0,0 +1,167 @@ @@ -0,0 +1,167 @@
// 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.PackageManagement;
using ICSharpCode.SharpDevelop.Internal.Templates;
using ICSharpCode.SharpDevelop.Project;
using NUnit.Framework;
using PackageManagement.Tests.Helpers;
namespace PackageManagement.Tests
{
[TestFixture]
public class InstallProjectTemplatePackagesCommandTests
{
TestableInstallProjectTemplatePackagesCommand command;
void CreateCommand()
{
command = new TestableInstallProjectTemplatePackagesCommand();
}
TestableProject CreateFakeProject(string name)
{
return ProjectHelper.CreateTestProject(name);
}
void RunCommandWithProjectCreateInfoAsOwner(TestableProject project)
{
var projects = new List<TestableProject>();
projects.Add(project);
RunCommandWithProjectCreateInfoAsOwner(projects);
}
void RunCommandWithProjectCreateInfoAsOwner(List<TestableProject> projects)
{
var createInfo = new ProjectCreateInformation(projects);
createInfo.Solution = projects[0].ParentSolution;
command.FakeProjectService.FakeOpenProjects.AddRange(projects);
RunCommandWithProjectCreateInfoAsOwner(createInfo);
}
void RunCommandWithProjectCreateInfoAsOwner(ProjectCreateInformation createInfo)
{
command.Owner = createInfo;
command.Run();
}
void RunCommandWithExceptionThrowingPackageReferences(Exception exception)
{
var exceptionThrowingPackageReferences = new ExceptionThrowingPackageReferencesForProject();
exceptionThrowingPackageReferences.ExceptionToThrowOnInstall = exception;
command.FakePackageReferencesForProject = exceptionThrowingPackageReferences;
TestableProject project = CreateFakeProject("Test");
RunCommandWithProjectCreateInfoAsOwner(project);
}
[Test]
public void Run_OneProjectCreatedByNewProjectDialog_ProjectUsedToCreatePackageReferences()
{
CreateCommand();
TestableProject expectedProject = CreateFakeProject("Test");
RunCommandWithProjectCreateInfoAsOwner(expectedProject);
MSBuildBasedProject project = command.ProjectPassedToCreatePackageReferencesForProject;
Assert.AreEqual(expectedProject, project);
}
[Test]
public void Run_OneProjectCreatedByNewProjectDialog_ProjectUsedToCreatePackageReferencesIsTakenFromOpenProjectsNotCreateInfo()
{
CreateCommand();
TestableProject createInfoProject = CreateFakeProject("Test");
var projects = new List<IProject>();
projects.Add(createInfoProject);
var createInfo = new ProjectCreateInformation(projects);
TestableProject expectedProject = ProjectHelper.CreateTestProject("TEST");
command.FakeProjectService.FakeOpenProjects.Add(expectedProject);
RunCommandWithProjectCreateInfoAsOwner(createInfo);
MSBuildBasedProject project = command.ProjectPassedToCreatePackageReferencesForProject;
Assert.AreEqual(expectedProject, project);
}
[Test]
public void Run_TwoProjectsCreatedByNewProjectDialog_TwoProjectsUsedToCreatePackageReferences()
{
CreateCommand();
var expectedProjects = new List<TestableProject>();
expectedProjects.Add(CreateFakeProject("Test1"));
expectedProjects.Add(CreateFakeProject("Test2"));
RunCommandWithProjectCreateInfoAsOwner(expectedProjects);
List<MSBuildBasedProject> projects = command.ProjectsPassedToCreatePackageReferencesForProject;
Assert.AreEqual(expectedProjects, projects);
}
[Test]
public void Run_OneProjectCreatedByNewProjectDialog_PackageRepositoryCacheUsedToCreatePackageReferences()
{
CreateCommand();
TestableProject project = CreateFakeProject("Test");
RunCommandWithProjectCreateInfoAsOwner(project);
IPackageRepositoryCache cache = command.PackageRepositoryCachePassedToCreatePackageReferencesForProject;
IPackageRepositoryCache expectedCache = command.FakePackageRepositoryCache;
Assert.AreEqual(expectedCache, cache);
}
[Test]
public void Run_OneProjectCreatedByNewProjectDialog_PackagesAreInstalled()
{
CreateCommand();
TestableProject project = CreateFakeProject("Test");
RunCommandWithProjectCreateInfoAsOwner(project);
bool installed = command.FakePackageReferencesForProject.IsInstallPackagesCalled;
Assert.IsTrue(installed);
}
[Test]
public void Run_ExceptionThrownWhenInstallingPackages_ErrorMessageIsDisplayedToUser()
{
CreateCommand();
var exception = new Exception("Test");
RunCommandWithExceptionThrowingPackageReferences(exception);
string errorMessageDisplayed = command.FakeMessageService.ErrorMessageDisplayed;
Assert.AreEqual("Test", errorMessageDisplayed);
}
[Test]
public void Run_ExceptionThrownWhenInstallingPackages_ExceptionIsLogged()
{
CreateCommand();
var expectedException = new Exception("Test");
RunCommandWithExceptionThrowingPackageReferences(expectedException);
Exception exceptionLogged = command.FakeLoggingService.ExceptionLoggedAsError;
Assert.AreEqual(expectedException, exceptionLogged);
}
[Test]
public void Run_OneProjectCreatedByNewProjectDialog_ProjectReferencesAreRemoved()
{
CreateCommand();
TestableProject project = CreateFakeProject("Test");
RunCommandWithProjectCreateInfoAsOwner(project);
bool removed = command.FakePackageReferencesForProject.IsRemovePackageReferencesCalled;
Assert.IsTrue(removed);
}
}
}

101
src/AddIns/Misc/PackageManagement/Test/Src/NewProjectsCreatedTests.cs

@ -0,0 +1,101 @@ @@ -0,0 +1,101 @@
// 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.PackageManagement;
using ICSharpCode.PackageManagement.Design;
using ICSharpCode.SharpDevelop.Internal.Templates;
using ICSharpCode.SharpDevelop.Project;
using NUnit.Framework;
using PackageManagement.Tests.Helpers;
namespace PackageManagement.Tests
{
[TestFixture]
public class NewProjectsCreatedTests
{
FakePackageManagementProjectService fakeProjectService;
NewProjectsCreated newProjectsCreated;
TestableProject CreateProject(string name)
{
return ProjectHelper.CreateTestProject(name);
}
ProjectCreateInformation CreateProjectCreateInfo(MSBuildBasedProject project)
{
var projects = new List<MSBuildBasedProject>();
projects.Add(project);
return CreateProjectCreateInfo(projects);
}
ProjectCreateInformation CreateProjectCreateInfo(IEnumerable<MSBuildBasedProject> projects)
{
return new ProjectCreateInformation(projects);
}
void CreateNewProjectsCreated(ProjectCreateInformation createInfo)
{
fakeProjectService = new FakePackageManagementProjectService();
newProjectsCreated = new NewProjectsCreated(createInfo, fakeProjectService);
}
TestableProject AddProjectToProjectServiceOpenProjects(string projectName)
{
TestableProject project = CreateProject(projectName);
fakeProjectService.FakeOpenProjects.Add(project);
return project;
}
[Test]
public void GetProjects_OneProjectCreatedAndOneOldProjectInSolution_ReturnsProjectFromProjectService()
{
TestableProject project = CreateProject("TestProject");
ProjectCreateInformation createInfo = CreateProjectCreateInfo(project);
CreateNewProjectsCreated(createInfo);
AddProjectToProjectServiceOpenProjects("OriginalProject");
TestableProject expectedProject = AddProjectToProjectServiceOpenProjects("TestProject");
var projects = new List<MSBuildBasedProject>();
projects.AddRange(newProjectsCreated.GetProjects());
var expectedProjects = new MSBuildBasedProject[] {
expectedProject
};
Assert.AreEqual(expectedProjects, projects);
}
[Test]
public void GetProjects_OneProjectCreatedWithDifferentNameCase_ReturnsProjectFromProjectService()
{
TestableProject project = CreateProject("TESTPROJECT");
ProjectCreateInformation createInfo = CreateProjectCreateInfo(project);
CreateNewProjectsCreated(createInfo);
TestableProject expectedProject = AddProjectToProjectServiceOpenProjects("TestProject");
var projects = new List<MSBuildBasedProject>();
projects.AddRange(newProjectsCreated.GetProjects());
var expectedProjects = new MSBuildBasedProject[] {
expectedProject
};
Assert.AreEqual(expectedProjects, projects);
}
[Test]
public void GetProjects_OneProjectCreatedButProjectIsNotOpen_ReturnsNoProjects()
{
TestableProject project = CreateProject("TestProject");
ProjectCreateInformation createInfo = CreateProjectCreateInfo(project);
CreateNewProjectsCreated(createInfo);
var projects = new List<MSBuildBasedProject>();
projects.AddRange(newProjectsCreated.GetProjects());
Assert.AreEqual(0, projects.Count);
}
}
}

86
src/AddIns/Misc/PackageManagement/Test/Src/PackageReferenceInstallerTests.cs

@ -0,0 +1,86 @@ @@ -0,0 +1,86 @@
// 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.PackageManagement;
using ICSharpCode.SharpDevelop.Project;
using NuGet;
using NUnit.Framework;
using PackageManagement.Tests.Helpers;
namespace PackageManagement.Tests
{
[TestFixture]
public class PackageReferenceInstallerTests
{
PackageReferenceInstaller installer;
FakePackageActionRunner fakeActionRunner;
FakePackageManagementProjectFactory fakeProjectFactory;
TestableProject project;
List<PackageReference> packageReferences;
FakePackageRepositoryFactory fakeRepositoryCache;
void CreateInstaller()
{
project = ProjectHelper.CreateTestProject();
packageReferences = new List<PackageReference>();
fakeActionRunner = new FakePackageActionRunner();
fakeProjectFactory = new FakePackageManagementProjectFactory();
fakeRepositoryCache = new FakePackageRepositoryFactory();
installer = new PackageReferenceInstaller(fakeRepositoryCache, fakeActionRunner, fakeProjectFactory);
}
void InstallPackages()
{
installer.InstallPackages(packageReferences, project);
}
void AddPackageReference(string packageId, string version)
{
var packageReference = new PackageReference(packageId, new Version(version));
packageReferences.Add(packageReference);
}
[Test]
public void InstallPackages_OnePackageReference_OnePackageIsInstalled()
{
CreateInstaller();
AddPackageReference("PackageId", "1.3.4.5");
InstallPackages();
var action = fakeActionRunner.ActionPassedToRun as InstallPackageAction;
var expectedVersion = new Version("1.3.4.5");
Assert.AreEqual("PackageId", action.PackageId);
Assert.AreEqual(expectedVersion, action.PackageVersion);
}
[Test]
public void InstallPackages_OnePackageReference_PackageManagementProjectIsCreatedForMSBuildProject()
{
CreateInstaller();
AddPackageReference("PackageId", "1.3.4.5");
InstallPackages();
MSBuildBasedProject projectUsedToCreatePackageManagementProject
= fakeProjectFactory.ProjectPassedToCreateProject;
Assert.AreEqual(project, projectUsedToCreatePackageManagementProject);
}
[Test]
public void InstallPackages_OnePackageReference_AggregateRepositoryFromCacheUsedToCreatePackageManagementProject()
{
CreateInstaller();
AddPackageReference("PackageId", "1.3.4.5");
InstallPackages();
IPackageRepository repository = fakeProjectFactory.RepositoryPassedToCreateProject;
IPackageRepository expectedRepository = fakeRepositoryCache.FakeAggregateRepository;
Assert.AreEqual(expectedRepository, repository);
}
}
}

137
src/AddIns/Misc/PackageManagement/Test/Src/PackageReferencesForProjectTests.cs

@ -0,0 +1,137 @@ @@ -0,0 +1,137 @@
// 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.PackageManagement;
using ICSharpCode.SharpDevelop.Project;
using NuGet;
using NUnit.Framework;
using PackageManagement.Tests.Helpers;
namespace PackageManagement.Tests
{
[TestFixture]
public class PackageReferencesForProjectTests
{
PackageReferencesForProject packageReferencesForProject;
FakePackageReferenceFileFactory fakePackageReferenceFileFactory;
FakePackageReferenceFile fakePackageReferenceFile;
FakePackageReferenceInstaller fakePackageReferenceInstaller;
TestableProject CreateProject()
{
return ProjectHelper.CreateTestProject();
}
void CreatePackageReferencesForProject(MSBuildBasedProject project)
{
fakePackageReferenceFileFactory = new FakePackageReferenceFileFactory();
fakePackageReferenceFile = fakePackageReferenceFileFactory.FakePackageReferenceFile;
fakePackageReferenceInstaller = new FakePackageReferenceInstaller();
packageReferencesForProject =
new PackageReferencesForProject(
project,
fakePackageReferenceInstaller,
fakePackageReferenceFileFactory);
}
void AddPackageReference(string packageId, string version)
{
fakePackageReferenceFile.AddFakePackageReference(packageId, version);
}
void PackageReferenceCollectionAssertAreEqual(IEnumerable<PackageReference> expected, IEnumerable<PackageReference> actual)
{
IEnumerable<string> expectedAsStrings = ConvertToStrings(expected);
IEnumerable<string> actualAsStrings = ConvertToStrings(actual);
CollectionAssert.AreEqual(expectedAsStrings, actualAsStrings);
}
List<string> ConvertToStrings(IEnumerable<PackageReference> packageReferences)
{
var converted = new List<string>();
foreach (PackageReference packageReference in packageReferences) {
string convertedPackageReference = ConvertToString(packageReference);
converted.Add(convertedPackageReference);
}
return converted;
}
string ConvertToString(PackageReference packageReference)
{
return String.Format(
"Id: {0}, Version: {1}",
packageReference.Id,
packageReference.Version);
}
[Test]
public void InstallPackages_OnePackageReferenceInPackageConfigFile_OpensPackageConfigFileInProjectDirectory()
{
TestableProject project = CreateProject();
project.FileName = @"d:\projects\myproject\myproject.csproj";
CreatePackageReferencesForProject(project);
AddPackageReference("PackageId", "1.0.3.2");
packageReferencesForProject.InstallPackages();
string fileName = fakePackageReferenceFileFactory.FileNamePassedToCreatePackageReferenceFile;
string expectedFileName = @"d:\projects\myproject\packages.config";
Assert.AreEqual(expectedFileName, fileName);
}
[Test]
public void InstallPackages_OnePackageReferenceInPackageConfigFile_OnePackageInstalled()
{
TestableProject project = CreateProject();
CreatePackageReferencesForProject(project);
AddPackageReference("PackageId", "1.0.3.2");
packageReferencesForProject.InstallPackages();
IEnumerable<PackageReference> packageReferencesInstalled =
fakePackageReferenceInstaller.PackageReferencesPassedToInstallPackages;
List<PackageReference> expectedPackageReferences =
fakePackageReferenceFile.FakePackageReferences;
CollectionAssert.AreEqual(expectedPackageReferences, packageReferencesInstalled);
}
[Test]
public void InstallPackages_OnePackageReferenceInPackageConfigFile_ProjectPassedToInstaller()
{
TestableProject expectedProject = CreateProject();
CreatePackageReferencesForProject(expectedProject);
AddPackageReference("PackageId", "1.0.3.2");
packageReferencesForProject.InstallPackages();
MSBuildBasedProject project = fakePackageReferenceInstaller.ProjectPassedToInstallPackages;
Assert.AreEqual(expectedProject, project);
}
[Test]
public void RemovePackageReferences_TwoPackageReferencesInPackageConfigFile_RemovesPackageReferenceFromFile()
{
TestableProject project = CreateProject();
CreatePackageReferencesForProject(project);
AddPackageReference("One", "1.0.3.2");
AddPackageReference("Two", "2.0.44");
packageReferencesForProject.RemovePackageReferences();
List<PackageReference> packageReferencesRemoved = fakePackageReferenceFile.EntriesDeleted;
var expectedPackageReferences = new List<PackageReference>();
expectedPackageReferences.Add(new PackageReference("One", new Version("1.0.3.2")));
expectedPackageReferences.Add(new PackageReference("Two", new Version("2.0.44")));
PackageReferenceCollectionAssertAreEqual(expectedPackageReferences, packageReferencesRemoved);
}
}
}

87
src/AddIns/Misc/PackageManagement/Test/Src/ProjectTemplatePackageRepositoryCacheTests.cs

@ -0,0 +1,87 @@ @@ -0,0 +1,87 @@
// 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.PackageManagement;
using ICSharpCode.PackageManagement.Design;
using NuGet;
using NUnit.Framework;
using PackageManagement.Tests.Helpers;
namespace PackageManagement.Tests
{
[TestFixture]
public class ProjectTemplatePackageRepositoryCacheTests
{
ProjectTemplatePackageRepositoryCache cache;
FakePackageRepositoryFactory fakeMainCache;
RegisteredProjectTemplatePackageSources registeredPackageSources;
FakeSettingsFactory fakeSettingsFactory;
void CreateCache()
{
fakeMainCache = new FakePackageRepositoryFactory();
var propertyService = new FakePropertyService();
fakeSettingsFactory = new FakeSettingsFactory();
registeredPackageSources = new RegisteredProjectTemplatePackageSources(propertyService, fakeSettingsFactory);
cache = new ProjectTemplatePackageRepositoryCache(fakeMainCache, registeredPackageSources);
}
void ClearRegisteredPackageSources()
{
registeredPackageSources.PackageSources.Clear();
}
void AddRegisteredPackageSource(PackageSource packageSource)
{
registeredPackageSources.PackageSources.Add(packageSource);
}
void AddRegisteredPackageSource(string url, string name)
{
var packageSource = new PackageSource(url, name);
AddRegisteredPackageSource(packageSource);
}
FakePackageRepository AddRegisteredPackageRepository(string packageSourceUrl, string packageSourceName)
{
var packageSource = new PackageSource(packageSourceUrl, packageSourceName);
AddRegisteredPackageSource(packageSource);
FakePackageRepository fakeRepository = new FakePackageRepository();
fakeMainCache.FakePackageRepositories.Add(packageSource, fakeRepository);
return fakeRepository;
}
[Test]
public void CreateAggregateRepository_OneRegisteredPackageSource_CreatesAggregrateRepositoryUsingMainCache()
{
CreateCache();
ClearRegisteredPackageSources();
AddRegisteredPackageSource("http://sharpdevelop.com", "Test");
IPackageRepository repository = cache.CreateAggregateRepository();
IPackageRepository expectedRepository = fakeMainCache.FakeAggregateRepository;
Assert.AreEqual(expectedRepository, repository);
}
[Test]
public void CreateAggregateRepository_TwoRegisteredPackageSources_CreatesRepositoriesForRegisteredPackageSources()
{
CreateCache();
ClearRegisteredPackageSources();
FakePackageRepository fakeRepository1 = AddRegisteredPackageRepository("http://sharpdevelop.com", "Test");
FakePackageRepository fakeRepository2 = AddRegisteredPackageRepository("http://test", "Test2");
IPackageRepository repository = cache.CreateAggregateRepository();
IEnumerable<IPackageRepository> repositories = fakeMainCache.RepositoriesPassedToCreateAggregateRepository;
var expectedRepositories = new List<IPackageRepository>();
expectedRepositories.Add(fakeRepository1);
expectedRepositories.Add(fakeRepository2);
Assert.AreEqual(expectedRepositories, repositories);
}
}
}

88
src/AddIns/Misc/PackageManagement/Test/Src/RegisteredProjectTemplatePackageSourcesTests.cs

@ -0,0 +1,88 @@ @@ -0,0 +1,88 @@
// 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.PackageManagement;
using ICSharpCode.PackageManagement.Design;
using NuGet;
using NUnit.Framework;
using PackageManagement.Tests.Helpers;
namespace PackageManagement.Tests
{
[TestFixture]
public class RegisteredProjectTemplatePackageSourcesTests
{
RegisteredProjectTemplatePackageSources registeredPackageSources;
FakeSettingsFactory fakeSettingsFactory;
FakePropertyService CreatePropertyService()
{
return new FakePropertyService();
}
void CreateRegisteredPackageSources(List<PackageSource> packageSources, FakePropertyService propertyService)
{
fakeSettingsFactory = new FakeSettingsFactory();
fakeSettingsFactory.FakeSettings.AddFakePackageSources(packageSources);
registeredPackageSources =
new RegisteredProjectTemplatePackageSources(
propertyService,
fakeSettingsFactory);
}
[Test]
public void PackageSources_NoPredefinedPackageSources_DefaultPackageSourceCreated()
{
FakePropertyService propertyService = CreatePropertyService();
propertyService.DataDirectory = @"d:\sharpdevelop\data";
var packageSources = new List<PackageSource>();
CreateRegisteredPackageSources(packageSources, propertyService);
RegisteredPackageSources actualPackageSources =
registeredPackageSources.PackageSources;
var expectedPackageSources = new PackageSource[] {
new PackageSource(@"d:\sharpdevelop\data\templates\packages", "Default")
};
PackageSourceCollectionAssert.AreEqual(expectedPackageSources, actualPackageSources);
}
[Test]
public void PackageSources_OnePredefinedPackageSource_RegisteredPackageSourceIsPredefinedPackageSource()
{
FakePropertyService propertyService = CreatePropertyService();
propertyService.DataDirectory = @"d:\sharpdevelop\data";
var expectedPackageSources = new List<PackageSource>();
expectedPackageSources.Add(new PackageSource("http://sharpdevelop", "Test"));
CreateRegisteredPackageSources(expectedPackageSources, propertyService);
RegisteredPackageSources actualPackageSources =
registeredPackageSources.PackageSources;
PackageSourceCollectionAssert.AreEqual(expectedPackageSources, actualPackageSources);
}
[Test]
public void PackageSources_NoPredefinedPackageSources_PackageSourceConfigLookedForInUserFolder()
{
FakePropertyService propertyService = CreatePropertyService();
propertyService.DataDirectory = @"d:\sharpdevelop\data";
propertyService.ConfigDirectory = @"c:\Users\test\AppData\ICSharpCode\SharpDevelop4.1";
var packageSources = new List<PackageSource>();
CreateRegisteredPackageSources(packageSources, propertyService);
IEnumerable<PackageSource> actualPackageSources =
registeredPackageSources.PackageSources;
string directory = fakeSettingsFactory.DirectoryPassedToCreateSettings;
string expectedDirectory = @"c:\Users\test\AppData\ICSharpCode\SharpDevelop4.1\templates";
Assert.AreEqual(expectedDirectory, directory);
}
}
}

2
src/AddIns/Misc/PackageManagement/Test/Src/UpdatePackageActionTests.cs

@ -198,6 +198,7 @@ namespace PackageManagement.Tests @@ -198,6 +198,7 @@ namespace PackageManagement.Tests
public void HasPackageScriptsToRun_OnePackageInOperationsHasInitPowerShellScript_ReturnsTrue()
{
CreateSolution();
action.PackageId = "Test";
AddInstallOperationWithFile(@"tools\init.ps1");
bool hasPackageScripts = action.HasPackageScriptsToRun();
@ -209,6 +210,7 @@ namespace PackageManagement.Tests @@ -209,6 +210,7 @@ namespace PackageManagement.Tests
public void HasPackageScriptsToRun_OnePackageInOperationsHasNoFiles_ReturnsFalse()
{
CreateSolution();
action.PackageId = "Test";
action.Operations = new List<PackageOperation>();
bool hasPackageScripts = action.HasPackageScriptsToRun();

11
src/Main/Base/Project/Src/Internal/Templates/Project/ProjectCreateInformation.cs

@ -20,10 +20,17 @@ namespace ICSharpCode.SharpDevelop.Internal.Templates @@ -20,10 +20,17 @@ namespace ICSharpCode.SharpDevelop.Internal.Templates
{
internal List<IProject> createdProjects = new List<IProject>();
public ProjectCreateInformation() {
Platform = "x86";
public ProjectCreateInformation()
: this(new IProject[0])
{
}
public ProjectCreateInformation(IEnumerable<IProject> projects)
{
Platform = "x86";
createdProjects.AddRange(projects);
}
public ReadOnlyCollection<IProject> CreatedProjects {
get { return createdProjects.AsReadOnly(); }
}

Loading…
Cancel
Save