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
path: root/main
diff options
context:
space:
mode:
authorMatt Ward <matt.ward@microsoft.com>2019-06-06 14:12:01 +0300
committerGitHub <noreply@github.com>2019-06-06 14:12:01 +0300
commit2cf3653e4fcfe2ad29f1be5ce1dc517c2b85a9d2 (patch)
treec70a351a6084f1e4cd1f2734aea3c24cd29dd3a2 /main
parentef5ea322347547cb6d971b6097b41965312178e6 (diff)
parentc047dcc2c545a607007733140e22f8bd39da8b62 (diff)
Merge pull request #7712 from mono/nuget-enabling-restore-commands
[NuGet] Fix restore menu incorrectly disabled.
Diffstat (limited to 'main')
-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
-rw-r--r--main/tests/test-projects/netframework-sdk/Class1.cs8
-rw-r--r--main/tests/test-projects/netframework-sdk/netframework-sdk.csproj7
-rw-r--r--main/tests/test-projects/netframework-sdk/netframework-sdk.sln17
-rw-r--r--main/tests/test-projects/package-reference/library/library.csproj36
-rw-r--r--main/tests/test-projects/package-reference/package-reference.sln17
16 files changed, 517 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 ());
+ }
}
}
diff --git a/main/tests/test-projects/netframework-sdk/Class1.cs b/main/tests/test-projects/netframework-sdk/Class1.cs
new file mode 100644
index 0000000000..b9a6178638
--- /dev/null
+++ b/main/tests/test-projects/netframework-sdk/Class1.cs
@@ -0,0 +1,8 @@
+using System;
+
+namespace netstandard_sdk
+{
+ public class Class1
+ {
+ }
+}
diff --git a/main/tests/test-projects/netframework-sdk/netframework-sdk.csproj b/main/tests/test-projects/netframework-sdk/netframework-sdk.csproj
new file mode 100644
index 0000000000..424d2a40e5
--- /dev/null
+++ b/main/tests/test-projects/netframework-sdk/netframework-sdk.csproj
@@ -0,0 +1,7 @@
+<Project Sdk="Microsoft.NET.Sdk">
+
+ <PropertyGroup>
+ <TargetFramework>net472</TargetFramework>
+ </PropertyGroup>
+
+</Project>
diff --git a/main/tests/test-projects/netframework-sdk/netframework-sdk.sln b/main/tests/test-projects/netframework-sdk/netframework-sdk.sln
new file mode 100644
index 0000000000..41ef1571b0
--- /dev/null
+++ b/main/tests/test-projects/netframework-sdk/netframework-sdk.sln
@@ -0,0 +1,17 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 15
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "netframework-sdk", "netframework-sdk.csproj", "{5B443F8D-6C84-443F-A395-5429E8F4A47D}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Release|Any CPU = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {5B443F8D-6C84-443F-A395-5429E8F4A47D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {5B443F8D-6C84-443F-A395-5429E8F4A47D}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {5B443F8D-6C84-443F-A395-5429E8F4A47D}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {5B443F8D-6C84-443F-A395-5429E8F4A47D}.Release|Any CPU.Build.0 = Release|Any CPU
+ EndGlobalSection
+EndGlobal
diff --git a/main/tests/test-projects/package-reference/library/library.csproj b/main/tests/test-projects/package-reference/library/library.csproj
new file mode 100644
index 0000000000..24a78212d5
--- /dev/null
+++ b/main/tests/test-projects/package-reference/library/library.csproj
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <PropertyGroup>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <ProjectGuid>{4E1821DD-EE60-48C1-8552-05B2793263DC}</ProjectGuid>
+ <OutputType>Library</OutputType>
+ <RootNamespace>LibraryProject</RootNamespace>
+ <AssemblyName>LibraryProject</AssemblyName>
+ <TargetFrameworkVersion>v4.7</TargetFrameworkVersion>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+ <DebugSymbols>true</DebugSymbols>
+ <DebugType>full</DebugType>
+ <Optimize>false</Optimize>
+ <OutputPath>bin\Debug</OutputPath>
+ <DefineConstants>DEBUG;</DefineConstants>
+ <ErrorReport>prompt</ErrorReport>
+ <WarningLevel>4</WarningLevel>
+ <ConsolePause>false</ConsolePause>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+ <Optimize>true</Optimize>
+ <OutputPath>bin\Release</OutputPath>
+ <ErrorReport>prompt</ErrorReport>
+ <WarningLevel>4</WarningLevel>
+ <ConsolePause>false</ConsolePause>
+ </PropertyGroup>
+ <ItemGroup>
+ <Reference Include="System" />
+ </ItemGroup>
+ <ItemGroup>
+ <PackageReference Include="Xamarin.Forms" Version="3.0.0.482510" />
+ </ItemGroup>
+ <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
+</Project> \ No newline at end of file
diff --git a/main/tests/test-projects/package-reference/package-reference.sln b/main/tests/test-projects/package-reference/package-reference.sln
new file mode 100644
index 0000000000..91c3b1c9e1
--- /dev/null
+++ b/main/tests/test-projects/package-reference/package-reference.sln
@@ -0,0 +1,17 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 15
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "library", "library\library.csproj", "{4E1821DD-EE60-48C1-8552-05B2793263DC}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Release|Any CPU = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {4E1821DD-EE60-48C1-8552-05B2793263DC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {4E1821DD-EE60-48C1-8552-05B2793263DC}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {4E1821DD-EE60-48C1-8552-05B2793263DC}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {4E1821DD-EE60-48C1-8552-05B2793263DC}.Release|Any CPU.Build.0 = Release|Any CPU
+ EndGlobalSection
+EndGlobal