Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/monodevelop.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLluis Sanchez <llsan@microsoft.com>2019-06-07 17:24:45 +0300
committerLluis Sanchez <llsan@microsoft.com>2019-06-07 17:24:45 +0300
commitadc0c4e33b695c315488262c3c09112e87800111 (patch)
treee4c93ea740a9d3b691e14fd04878c98adc4c34de /main/src/addins/MonoDevelop.PackageManagement
parent526ae087002e5e8aba0c5430fea9142942f85635 (diff)
parentb19a7bf2d6a71057f0820de1c12b9a5faa7d9b53 (diff)
Merge remote-tracking branch 'origin/master' into release-8.2monodevelop-8.2.0.707
Diffstat (limited to 'main/src/addins/MonoDevelop.PackageManagement')
-rw-r--r--main/src/addins/MonoDevelop.PackageManagement/MonoDevelop.PackageManagement.Commands/PackagesCommandHandler.cs56
-rw-r--r--main/src/addins/MonoDevelop.PackageManagement/MonoDevelop.PackageManagement.Commands/RestorePackagesHandler.cs2
-rw-r--r--main/src/addins/MonoDevelop.PackageManagement/MonoDevelop.PackageManagement.Commands/RestorePackagesInProjectHandler.cs2
-rw-r--r--main/src/addins/MonoDevelop.PackageManagement/MonoDevelop.PackageManagement.Tests/MonoDevelop.PackageManagement.Tests.Helpers/FakeNuGetAwareProject.cs5
-rw-r--r--main/src/addins/MonoDevelop.PackageManagement/MonoDevelop.PackageManagement.Tests/MonoDevelop.PackageManagement.Tests.Helpers/TestableRestorePackagesHandler.cs54
-rw-r--r--main/src/addins/MonoDevelop.PackageManagement/MonoDevelop.PackageManagement.Tests/MonoDevelop.PackageManagement.Tests.Helpers/TestableRestorePackagesInProjectHandler.cs54
-rw-r--r--main/src/addins/MonoDevelop.PackageManagement/MonoDevelop.PackageManagement.Tests/MonoDevelop.PackageManagement.Tests.csproj3
-rw-r--r--main/src/addins/MonoDevelop.PackageManagement/MonoDevelop.PackageManagement.Tests/MonoDevelop.PackageManagement.Tests/DotNetProjectExtensionsTests.cs6
-rw-r--r--main/src/addins/MonoDevelop.PackageManagement/MonoDevelop.PackageManagement.Tests/MonoDevelop.PackageManagement.Tests/PackagesCommandHandlerTests.cs257
-rw-r--r--main/src/addins/MonoDevelop.PackageManagement/MonoDevelop.PackageManagement/DotNetProjectExtensions.cs11
-rw-r--r--main/src/addins/MonoDevelop.PackageManagement/MonoDevelop.PackageManagement/SolutionExtensions.cs12
11 files changed, 432 insertions, 30 deletions
diff --git a/main/src/addins/MonoDevelop.PackageManagement/MonoDevelop.PackageManagement.Commands/PackagesCommandHandler.cs b/main/src/addins/MonoDevelop.PackageManagement/MonoDevelop.PackageManagement.Commands/PackagesCommandHandler.cs
index 8c3540eacd..be0378ce09 100644
--- a/main/src/addins/MonoDevelop.PackageManagement/MonoDevelop.PackageManagement.Commands/PackagesCommandHandler.cs
+++ b/main/src/addins/MonoDevelop.PackageManagement/MonoDevelop.PackageManagement.Commands/PackagesCommandHandler.cs
@@ -56,38 +56,34 @@ namespace MonoDevelop.PackageManagement.Commands
protected DotNetProject GetSelectedDotNetProject ()
{
- return IdeApp.ProjectOperations.CurrentSelectedProject as DotNetProject;
- }
-
- protected bool SelectedDotNetProjectHasPackages ()
- {
- DotNetProject project = GetSelectedDotNetProject ();
- return (project != null) && project.HasPackages ();
+ return CurrentSelectedProject as DotNetProject;
}
protected bool IsDotNetSolutionSelected ()
{
- return IdeApp.ProjectOperations.CurrentSelectedSolution != null;
+ return CurrentSelectedSolution != null;
}
- protected bool SelectedDotNetSolutionHasPackages ()
- {
- Solution solution = IdeApp.ProjectOperations.CurrentSelectedSolution;
- if (solution == null) {
- return false;
+ protected bool CanRestoreSelectedDotNetProjectOrSolution ()
+ {
+ if (IsDotNetProjectSelected ()) {
+ return CanRestorePackagesForSelectedDotNetProject ();
+ } else if (IsDotNetSolutionSelected ()) {
+ return CanRestorePackagesForSelectedSolution ();
}
+ return false;
+ }
- return solution.HasAnyProjectWithPackages ();
+ protected bool CanRestorePackagesForSelectedDotNetProject ()
+ {
+ DotNetProject project = GetSelectedDotNetProject ();
+ return project?.CanRestorePackages () == true;
}
- protected bool SelectedDotNetProjectOrSolutionHasPackages ()
+ bool CanRestorePackagesForSelectedSolution ()
{
- if (IsDotNetProjectSelected ()) {
- return SelectedDotNetProjectHasPackages ();
- } else if (IsDotNetSolutionSelected ()) {
- return SelectedDotNetSolutionHasPackages ();
- }
- return false;
+ Solution solution = CurrentSelectedSolution;
+ return solution?.CanRestorePackages () == true;
}
protected Solution GetSelectedSolution ()
@@ -96,7 +92,7 @@ namespace MonoDevelop.PackageManagement.Commands
if (project != null) {
return project.ParentSolution;
}
- return IdeApp.ProjectOperations.CurrentSelectedSolution;
+ return CurrentSelectedSolution;
}
protected bool CanUpdatePackagesForSelectedDotNetProject ()
@@ -107,7 +103,7 @@ namespace MonoDevelop.PackageManagement.Commands
bool CanUpdatePackagesForSelectedDotNetSolution ()
{
- Solution solution = IdeApp.ProjectOperations.CurrentSelectedSolution;
+ Solution solution = CurrentSelectedSolution;
return solution?.CanUpdatePackages () == true;
}
@@ -120,5 +116,19 @@ namespace MonoDevelop.PackageManagement.Commands
}
return false;
}
+
+ /// <summary>
+ /// Used by unit tests to avoid having to initialize the IDE workspace.
+ /// </summary>
+ protected virtual Solution CurrentSelectedSolution {
+ get { return IdeApp.ProjectOperations.CurrentSelectedSolution; }
+ }
+
+ /// <summary>
+ /// Used by unit tests to avoid having to initialize the IDE workspace.
+ /// </summary>
+ protected virtual Project CurrentSelectedProject {
+ get { return IdeApp.ProjectOperations.CurrentSelectedProject; }
+ }
}
}
diff --git a/main/src/addins/MonoDevelop.PackageManagement/MonoDevelop.PackageManagement.Commands/RestorePackagesHandler.cs b/main/src/addins/MonoDevelop.PackageManagement/MonoDevelop.PackageManagement.Commands/RestorePackagesHandler.cs
index de29788d4b..0264cae53e 100644
--- a/main/src/addins/MonoDevelop.PackageManagement/MonoDevelop.PackageManagement.Commands/RestorePackagesHandler.cs
+++ b/main/src/addins/MonoDevelop.PackageManagement/MonoDevelop.PackageManagement.Commands/RestorePackagesHandler.cs
@@ -42,7 +42,7 @@ namespace MonoDevelop.PackageManagement.Commands
protected override void Update (CommandInfo info)
{
- info.Enabled = SelectedDotNetProjectOrSolutionHasPackages ();
+ info.Enabled = CanRestoreSelectedDotNetProjectOrSolution ();
}
public static void Run (Solution solution)
diff --git a/main/src/addins/MonoDevelop.PackageManagement/MonoDevelop.PackageManagement.Commands/RestorePackagesInProjectHandler.cs b/main/src/addins/MonoDevelop.PackageManagement/MonoDevelop.PackageManagement.Commands/RestorePackagesInProjectHandler.cs
index 73731d3bc4..93dadeff7e 100644
--- a/main/src/addins/MonoDevelop.PackageManagement/MonoDevelop.PackageManagement.Commands/RestorePackagesInProjectHandler.cs
+++ b/main/src/addins/MonoDevelop.PackageManagement/MonoDevelop.PackageManagement.Commands/RestorePackagesInProjectHandler.cs
@@ -40,7 +40,7 @@ namespace MonoDevelop.PackageManagement.Commands
protected override void Update (CommandInfo info)
{
- info.Enabled = SelectedDotNetProjectHasPackages ();
+ info.Enabled = CanRestorePackagesForSelectedDotNetProject ();
}
public static void Run (DotNetProject project)
diff --git a/main/src/addins/MonoDevelop.PackageManagement/MonoDevelop.PackageManagement.Tests/MonoDevelop.PackageManagement.Tests.Helpers/FakeNuGetAwareProject.cs b/main/src/addins/MonoDevelop.PackageManagement/MonoDevelop.PackageManagement.Tests/MonoDevelop.PackageManagement.Tests.Helpers/FakeNuGetAwareProject.cs
index abe4cce276..33cd30fbb5 100644
--- a/main/src/addins/MonoDevelop.PackageManagement/MonoDevelop.PackageManagement.Tests/MonoDevelop.PackageManagement.Tests.Helpers/FakeNuGetAwareProject.cs
+++ b/main/src/addins/MonoDevelop.PackageManagement/MonoDevelop.PackageManagement.Tests/MonoDevelop.PackageManagement.Tests.Helpers/FakeNuGetAwareProject.cs
@@ -33,6 +33,11 @@ namespace MonoDevelop.PackageManagement.Tests.Helpers
{
class FakeNuGetAwareProject : DummyDotNetProject, INuGetAwareProject
{
+ public FakeNuGetAwareProject ()
+ {
+ Initialize (this);
+ }
+
public NuGetProject CreateNuGetProject ()
{
throw new NotImplementedException ();
diff --git a/main/src/addins/MonoDevelop.PackageManagement/MonoDevelop.PackageManagement.Tests/MonoDevelop.PackageManagement.Tests.Helpers/TestableRestorePackagesHandler.cs b/main/src/addins/MonoDevelop.PackageManagement/MonoDevelop.PackageManagement.Tests/MonoDevelop.PackageManagement.Tests.Helpers/TestableRestorePackagesHandler.cs
new file mode 100644
index 0000000000..dfb6272a16
--- /dev/null
+++ b/main/src/addins/MonoDevelop.PackageManagement/MonoDevelop.PackageManagement.Tests/MonoDevelop.PackageManagement.Tests.Helpers/TestableRestorePackagesHandler.cs
@@ -0,0 +1,54 @@
+//
+// TestableRestorePackagesHandler.cs
+//
+// Author:
+// Matt Ward <matt.ward@microsoft.com>
+//
+// Copyright (c) 2019 Microsoft
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+using MonoDevelop.Components.Commands;
+using MonoDevelop.PackageManagement.Commands;
+using MonoDevelop.Projects;
+
+namespace MonoDevelop.PackageManagement.Tests.Helpers
+{
+ class TestableRestorePackagesHandler : RestorePackagesHandler
+ {
+ CommandInfo info = new CommandInfo ();
+ Project project;
+ Solution solution;
+
+ public bool Enabled {
+ get { return info.Enabled; }
+ }
+
+ public void RunUpdate (Solution solution, Project project)
+ {
+ this.solution = solution;
+ this.project = project;
+
+ base.Update (info);
+ }
+
+ protected override Project CurrentSelectedProject => project;
+ protected override Solution CurrentSelectedSolution => solution;
+ }
+}
diff --git a/main/src/addins/MonoDevelop.PackageManagement/MonoDevelop.PackageManagement.Tests/MonoDevelop.PackageManagement.Tests.Helpers/TestableRestorePackagesInProjectHandler.cs b/main/src/addins/MonoDevelop.PackageManagement/MonoDevelop.PackageManagement.Tests/MonoDevelop.PackageManagement.Tests.Helpers/TestableRestorePackagesInProjectHandler.cs
new file mode 100644
index 0000000000..64304cb624
--- /dev/null
+++ b/main/src/addins/MonoDevelop.PackageManagement/MonoDevelop.PackageManagement.Tests/MonoDevelop.PackageManagement.Tests.Helpers/TestableRestorePackagesInProjectHandler.cs
@@ -0,0 +1,54 @@
+//
+// TestableRestorePackagesInProjectHandler.cs
+//
+// Author:
+// Matt Ward <matt.ward@microsoft.com>
+//
+// Copyright (c) 2019 Microsoft
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+using MonoDevelop.Components.Commands;
+using MonoDevelop.PackageManagement.Commands;
+using MonoDevelop.Projects;
+
+namespace MonoDevelop.PackageManagement.Tests.Helpers
+{
+ class TestableRestorePackagesInProjectHandler : RestorePackagesInProjectHandler
+ {
+ CommandInfo info = new CommandInfo ();
+ Project project;
+ Solution solution;
+
+ public bool Enabled {
+ get { return info.Enabled; }
+ }
+
+ public void RunUpdate (Solution solution, Project project)
+ {
+ this.solution = solution;
+ this.project = project;
+
+ base.Update (info);
+ }
+
+ protected override Project CurrentSelectedProject => project;
+ protected override Solution CurrentSelectedSolution => solution;
+ }
+}
diff --git a/main/src/addins/MonoDevelop.PackageManagement/MonoDevelop.PackageManagement.Tests/MonoDevelop.PackageManagement.Tests.csproj b/main/src/addins/MonoDevelop.PackageManagement/MonoDevelop.PackageManagement.Tests/MonoDevelop.PackageManagement.Tests.csproj
index 25d8ffd69f..db41a064a4 100644
--- a/main/src/addins/MonoDevelop.PackageManagement/MonoDevelop.PackageManagement.Tests/MonoDevelop.PackageManagement.Tests.csproj
+++ b/main/src/addins/MonoDevelop.PackageManagement/MonoDevelop.PackageManagement.Tests/MonoDevelop.PackageManagement.Tests.csproj
@@ -151,6 +151,9 @@
<Compile Include="MonoDevelop.PackageManagement.Tests\FullyQualifiedReferencePathTests.cs" />
<Compile Include="MonoDevelop.PackageManagement.Tests\MSBuildPackageSpecCreatorTests.cs" />
<Compile Include="MonoDevelop.PackageManagement.Tests\InstallPackageWithAvailableItemNameTests.cs" />
+ <Compile Include="MonoDevelop.PackageManagement.Tests\PackagesCommandHandlerTests.cs" />
+ <Compile Include="MonoDevelop.PackageManagement.Tests.Helpers\TestableRestorePackagesHandler.cs" />
+ <Compile Include="MonoDevelop.PackageManagement.Tests.Helpers\TestableRestorePackagesInProjectHandler.cs" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\..\core\MonoDevelop.Core\MonoDevelop.Core.csproj">
diff --git a/main/src/addins/MonoDevelop.PackageManagement/MonoDevelop.PackageManagement.Tests/MonoDevelop.PackageManagement.Tests/DotNetProjectExtensionsTests.cs b/main/src/addins/MonoDevelop.PackageManagement/MonoDevelop.PackageManagement.Tests/MonoDevelop.PackageManagement.Tests/DotNetProjectExtensionsTests.cs
index 422d599e35..4843451775 100644
--- a/main/src/addins/MonoDevelop.PackageManagement/MonoDevelop.PackageManagement.Tests/MonoDevelop.PackageManagement.Tests/DotNetProjectExtensionsTests.cs
+++ b/main/src/addins/MonoDevelop.PackageManagement/MonoDevelop.PackageManagement.Tests/MonoDevelop.PackageManagement.Tests/DotNetProjectExtensionsTests.cs
@@ -49,6 +49,12 @@ namespace MonoDevelop.PackageManagement.Tests
DotNetProjectExtensions.FileExists = existingFiles.Contains;
}
+ [TearDown]
+ public void TearDown ()
+ {
+ DotNetProjectExtensions.FileExists = File.Exists;
+ }
+
void CreateProject (string fileName, string projectName)
{
project = new FakeDotNetProject (fileName.ToNativePath ()) {
diff --git a/main/src/addins/MonoDevelop.PackageManagement/MonoDevelop.PackageManagement.Tests/MonoDevelop.PackageManagement.Tests/PackagesCommandHandlerTests.cs b/main/src/addins/MonoDevelop.PackageManagement/MonoDevelop.PackageManagement.Tests/MonoDevelop.PackageManagement.Tests/PackagesCommandHandlerTests.cs
new file mode 100644
index 0000000000..7cec48b14d
--- /dev/null
+++ b/main/src/addins/MonoDevelop.PackageManagement/MonoDevelop.PackageManagement.Tests/MonoDevelop.PackageManagement.Tests/PackagesCommandHandlerTests.cs
@@ -0,0 +1,257 @@
+//
+// PackagesCommandHandlerTests.cs
+//
+// Author:
+// Matt Ward <matt.ward@microsoft.com>
+//
+// Copyright (c) 2019 Microsoft
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+using System.IO;
+using System.Linq;
+using System.Threading.Tasks;
+using MonoDevelop.Core;
+using MonoDevelop.PackageManagement.Tests.Helpers;
+using MonoDevelop.Projects;
+using NUnit.Framework;
+using UnitTests;
+
+namespace MonoDevelop.PackageManagement.Tests
+{
+ [TestFixture]
+ public class PackagesCommandHandlerTests : RestoreTestBase
+ {
+ TestableRestorePackagesHandler restorePackagesHandler;
+ TestableRestorePackagesInProjectHandler restorePackagesInProjectHandler;
+
+ [SetUp]
+ public void Init ()
+ {
+ restorePackagesHandler = new TestableRestorePackagesHandler ();
+ restorePackagesInProjectHandler = new TestableRestorePackagesInProjectHandler ();
+ }
+
+ [Test]
+ public async Task ProjectWithNoPackages ()
+ {
+ FilePath solutionFileName = Util.GetSampleProject ("csharp-console", "csharp-console.sln");
+
+ solution = (Solution)await Services.ProjectService.ReadWorkspaceItem (Util.GetMonitor (), solutionFileName);
+ var project = solution.GetAllDotNetProjects ().Single ();
+
+ // Project selected.
+ restorePackagesHandler.RunUpdate (solution, project);
+ Assert.IsFalse (restorePackagesHandler.Enabled);
+
+ restorePackagesInProjectHandler.RunUpdate (solution, project);
+ Assert.IsFalse (restorePackagesInProjectHandler.Enabled);
+
+ // Solution only selected
+ restorePackagesHandler.RunUpdate (solution, project: null);
+ Assert.IsFalse (restorePackagesHandler.Enabled);
+
+ restorePackagesInProjectHandler.RunUpdate (solution, project: null);
+ Assert.IsFalse (restorePackagesInProjectHandler.Enabled);
+ }
+
+ [Test]
+ public async Task ProjectWithPackagesConfig ()
+ {
+ FilePath solutionFileName = Util.GetSampleProject ("csharp-console", "csharp-console.sln");
+
+ solution = (Solution)await Services.ProjectService.ReadWorkspaceItem (Util.GetMonitor (), solutionFileName);
+ var project = solution.GetAllDotNetProjects ().Single ();
+
+ var packagesConfigFileName = project.BaseDirectory.Combine ("packages.config");
+ File.WriteAllText (packagesConfigFileName, "<packages />");
+
+ // Project selected.
+ restorePackagesHandler.RunUpdate (solution, project);
+ Assert.IsTrue (restorePackagesHandler.Enabled);
+
+ restorePackagesInProjectHandler.RunUpdate (solution, project);
+ Assert.IsTrue (restorePackagesInProjectHandler.Enabled);
+
+ // Solution only selected
+ restorePackagesHandler.RunUpdate (solution, project: null);
+ Assert.IsTrue (restorePackagesHandler.Enabled);
+
+ restorePackagesInProjectHandler.RunUpdate (solution, project: null);
+ Assert.IsFalse (restorePackagesInProjectHandler.Enabled, "Should be false - no project selected");
+ }
+
+ [Test]
+ public async Task SdkProject_PackageReference ()
+ {
+ FilePath solutionFileName = Util.GetSampleProject ("NetStandardXamarinForms", "NetStandardXamarinForms.sln");
+
+ solution = (Solution)await Services.ProjectService.ReadWorkspaceItem (Util.GetMonitor (), solutionFileName);
+ var project = solution.GetAllDotNetProjects ().Single ();
+
+ // Project selected.
+ restorePackagesHandler.RunUpdate (solution, project);
+ Assert.IsTrue (restorePackagesHandler.Enabled);
+
+ restorePackagesInProjectHandler.RunUpdate (solution, project);
+ Assert.IsTrue (restorePackagesInProjectHandler.Enabled);
+
+ // Solution only selected
+ restorePackagesHandler.RunUpdate (solution, project: null);
+ Assert.IsTrue (restorePackagesHandler.Enabled);
+
+ restorePackagesInProjectHandler.RunUpdate (solution, project: null);
+ Assert.IsFalse (restorePackagesInProjectHandler.Enabled, "Should be false - no project selected");
+ }
+
+ [Test]
+ public async Task SdkProject_NoPackageReferences ()
+ {
+ FilePath solutionFileName = Util.GetSampleProject ("netstandard-sdk", "netstandard-sdk.sln");
+
+ solution = (Solution)await Services.ProjectService.ReadWorkspaceItem (Util.GetMonitor (), solutionFileName);
+ var project = solution.GetAllDotNetProjects ().Single ();
+
+ // Project selected.
+ restorePackagesHandler.RunUpdate (solution, project);
+ Assert.IsTrue (restorePackagesHandler.Enabled);
+
+ restorePackagesInProjectHandler.RunUpdate (solution, project);
+ Assert.IsTrue (restorePackagesInProjectHandler.Enabled);
+
+ // Solution only selected
+ restorePackagesHandler.RunUpdate (solution, project: null);
+ Assert.IsTrue (restorePackagesHandler.Enabled);
+
+ restorePackagesInProjectHandler.RunUpdate (solution, project: null);
+ Assert.IsFalse (restorePackagesInProjectHandler.Enabled, "Should be false - no project selected");
+ }
+
+ [Test]
+ public async Task SdkProject_NetFramework472 ()
+ {
+ FilePath solutionFileName = Util.GetSampleProject ("netframework-sdk", "netframework-sdk.sln");
+
+ solution = (Solution)await Services.ProjectService.ReadWorkspaceItem (Util.GetMonitor (), solutionFileName);
+ var project = solution.GetAllDotNetProjects ().Single ();
+
+ // Project selected.
+ restorePackagesHandler.RunUpdate (solution, project);
+ Assert.IsTrue (restorePackagesHandler.Enabled);
+
+ restorePackagesInProjectHandler.RunUpdate (solution, project);
+ Assert.IsTrue (restorePackagesInProjectHandler.Enabled);
+
+ // Solution only selected
+ restorePackagesHandler.RunUpdate (solution, project: null);
+ Assert.IsTrue (restorePackagesHandler.Enabled);
+
+ restorePackagesInProjectHandler.RunUpdate (solution, project: null);
+ Assert.IsFalse (restorePackagesInProjectHandler.Enabled, "Should be false - no project selected");
+ }
+
+ [Test]
+ public async Task PackageReferenceProject_NonSdk ()
+ {
+ FilePath solutionFileName = Util.GetSampleProject ("package-reference", "package-reference.sln");
+
+ solution = (Solution)await Services.ProjectService.ReadWorkspaceItem (Util.GetMonitor (), solutionFileName);
+ var project = solution.GetAllDotNetProjects ().Single ();
+
+ // Project selected.
+ restorePackagesHandler.RunUpdate (solution, project);
+ Assert.IsTrue (restorePackagesHandler.Enabled);
+
+ restorePackagesInProjectHandler.RunUpdate (solution, project);
+ Assert.IsTrue (restorePackagesInProjectHandler.Enabled);
+
+ // Solution only selected
+ restorePackagesHandler.RunUpdate (solution, project: null);
+ Assert.IsTrue (restorePackagesHandler.Enabled);
+
+ restorePackagesInProjectHandler.RunUpdate (solution, project: null);
+ Assert.IsFalse (restorePackagesInProjectHandler.Enabled, "Should be false - no project selected");
+ }
+
+ [Test]
+ public async Task RestoreProjectStyle_NoPackageReferences ()
+ {
+ FilePath solutionFileName = Util.GetSampleProject ("RestoreStylePackageReference", "RestoreStylePackageReference.sln");
+
+ solution = (Solution)await Services.ProjectService.ReadWorkspaceItem (Util.GetMonitor (), solutionFileName);
+ var project = solution.GetAllDotNetProjects ().Single ();
+
+ // Project selected.
+ restorePackagesHandler.RunUpdate (solution, project);
+ Assert.IsTrue (restorePackagesHandler.Enabled);
+
+ restorePackagesInProjectHandler.RunUpdate (solution, project);
+ Assert.IsTrue (restorePackagesInProjectHandler.Enabled);
+
+ // Solution only selected
+ restorePackagesHandler.RunUpdate (solution, project: null);
+ Assert.IsTrue (restorePackagesHandler.Enabled);
+
+ restorePackagesInProjectHandler.RunUpdate (solution, project: null);
+ Assert.IsFalse (restorePackagesInProjectHandler.Enabled, "Should be false - no project selected");
+ }
+
+ [Test]
+ public void NuGetAwareProject ()
+ {
+ var project = new FakeNuGetAwareProject ();
+ var solution = new Solution ();
+ solution.RootFolder.AddItem (project);
+
+ // No packages in project.
+ project.HasPackagesReturnValue = false;
+
+ // Project selected.
+ restorePackagesHandler.RunUpdate (solution, project);
+ Assert.IsFalse (restorePackagesHandler.Enabled);
+
+ restorePackagesInProjectHandler.RunUpdate (solution, project);
+ Assert.IsFalse (restorePackagesInProjectHandler.Enabled);
+
+ // Solution only selected
+ restorePackagesHandler.RunUpdate (solution, project: null);
+ Assert.IsFalse (restorePackagesHandler.Enabled);
+
+ restorePackagesInProjectHandler.RunUpdate (solution, project: null);
+ Assert.IsFalse (restorePackagesInProjectHandler.Enabled, "Should be false - no project selected");
+
+ // Project has packages.
+ project.HasPackagesReturnValue = true;
+
+ // Project selected.
+ restorePackagesHandler.RunUpdate (solution, project);
+ Assert.IsTrue (restorePackagesHandler.Enabled);
+
+ restorePackagesInProjectHandler.RunUpdate (solution, project);
+ Assert.IsTrue (restorePackagesInProjectHandler.Enabled);
+
+ // Solution only selected
+ restorePackagesHandler.RunUpdate (solution, project: null);
+ Assert.IsTrue (restorePackagesHandler.Enabled);
+
+ restorePackagesInProjectHandler.RunUpdate (solution, project: null);
+ Assert.IsFalse (restorePackagesInProjectHandler.Enabled, "Should be false - no project selected");
+ }
+ }
+}
diff --git a/main/src/addins/MonoDevelop.PackageManagement/MonoDevelop.PackageManagement/DotNetProjectExtensions.cs b/main/src/addins/MonoDevelop.PackageManagement/MonoDevelop.PackageManagement/DotNetProjectExtensions.cs
index dcc1d5a80b..1954713237 100644
--- a/main/src/addins/MonoDevelop.PackageManagement/MonoDevelop.PackageManagement/DotNetProjectExtensions.cs
+++ b/main/src/addins/MonoDevelop.PackageManagement/MonoDevelop.PackageManagement/DotNetProjectExtensions.cs
@@ -312,5 +312,16 @@ namespace MonoDevelop.PackageManagement
return HasPackages (project.BaseDirectory, project.Name) || project.Items.OfType<ProjectPackageReference> ().Any ();
}
+
+ public static bool CanRestorePackages (this DotNetProject project)
+ {
+ var nugetAwareProject = project as INuGetAwareProject;
+ if (nugetAwareProject != null)
+ return nugetAwareProject.HasPackages ();
+
+ return HasPackages (project.BaseDirectory, project.Name) ||
+ DotNetCoreNuGetProject.CanCreate (project) ||
+ PackageReferenceNuGetProject.CanCreate (project);
+ }
}
}
diff --git a/main/src/addins/MonoDevelop.PackageManagement/MonoDevelop.PackageManagement/SolutionExtensions.cs b/main/src/addins/MonoDevelop.PackageManagement/MonoDevelop.PackageManagement/SolutionExtensions.cs
index d63b3831f6..717a1b1e2a 100644
--- a/main/src/addins/MonoDevelop.PackageManagement/MonoDevelop.PackageManagement/SolutionExtensions.cs
+++ b/main/src/addins/MonoDevelop.PackageManagement/MonoDevelop.PackageManagement/SolutionExtensions.cs
@@ -48,16 +48,18 @@ namespace MonoDevelop.PackageManagement
.Where (project => project.HasPackages ());
}
- public static bool HasAnyProjectWithPackages (this Solution solution)
- {
- return solution.GetAllProjectsWithPackages ().Any ();
- }
-
public static bool CanUpdatePackages (this Solution solution)
{
return solution
.GetAllDotNetProjects ()
.Any (project => project.CanUpdatePackages ());
}
+
+ public static bool CanRestorePackages (this Solution solution)
+ {
+ return solution
+ .GetAllDotNetProjects ()
+ .Any (project => project.CanRestorePackages ());
+ }
}
}