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:
authorJérémie Laval <jeremie.laval@gmail.com>2017-08-14 21:58:07 +0300
committerJérémie Laval <jeremie.laval@gmail.com>2017-08-14 23:45:17 +0300
commitf07659c22f1fd45d76d439e305e739afa7564d71 (patch)
tree733674bd90f38038587588155d0caaf0e725b9a0 /main/src/addins
parent57618ee76560cb6369e36667e84e024001b48b0c (diff)
[NUnit] Recognize unit-test projects when using PackageReference NuGet references instead of packages.config
This needed to use some (currently) internal types of MonoDevelop.PackageManagement for which a temporary InternalsVisibleTo was added.
Diffstat (limited to 'main/src/addins')
-rw-r--r--main/src/addins/MonoDevelop.PackageManagement/MonoDevelop.PackageManagement.Tests/MonoDevelop.PackageManagement.Tests/ProjectPackageReferenceTests.cs29
-rw-r--r--main/src/addins/MonoDevelop.PackageManagement/MonoDevelop.PackageManagement.csproj1
-rw-r--r--main/src/addins/MonoDevelop.PackageManagement/MonoDevelop.PackageManagement/ProjectPackageReference.cs20
-rw-r--r--main/src/addins/MonoDevelop.UnitTesting.NUnit/AddinInfo.cs1
-rw-r--r--main/src/addins/MonoDevelop.UnitTesting.NUnit/MonoDevelop.UnitTesting.NUnit.csproj5
-rw-r--r--main/src/addins/MonoDevelop.UnitTesting.NUnit/MonoDevelop.UnitTesting.NUnit/NUnitProjectTestSuite.cs25
6 files changed, 79 insertions, 2 deletions
diff --git a/main/src/addins/MonoDevelop.PackageManagement/MonoDevelop.PackageManagement.Tests/MonoDevelop.PackageManagement.Tests/ProjectPackageReferenceTests.cs b/main/src/addins/MonoDevelop.PackageManagement/MonoDevelop.PackageManagement.Tests/MonoDevelop.PackageManagement.Tests/ProjectPackageReferenceTests.cs
index 77dcc6c343..efffab57b4 100644
--- a/main/src/addins/MonoDevelop.PackageManagement/MonoDevelop.PackageManagement.Tests/MonoDevelop.PackageManagement.Tests/ProjectPackageReferenceTests.cs
+++ b/main/src/addins/MonoDevelop.PackageManagement/MonoDevelop.PackageManagement.Tests/MonoDevelop.PackageManagement.Tests/ProjectPackageReferenceTests.cs
@@ -24,6 +24,7 @@
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
// THE SOFTWARE.
+using System;
using System.Xml;
using MonoDevelop.PackageManagement.Tests.Helpers;
using MonoDevelop.Projects.MSBuild;
@@ -57,5 +58,33 @@ namespace MonoDevelop.PackageManagement.Tests
Assert.AreEqual (0, packageReferenceElement.ChildNodes.Count);
Assert.IsTrue (packageReferenceElement.IsEmpty);
}
+
+ [Test]
+ public void IsAtLeastVersion_Simple ()
+ {
+ var reference = ProjectPackageReference.Create ("NUnit", "3.2");
+ Assert.IsTrue (reference.IsAtLeastVersion (new Version (3, 0)));
+ Assert.IsTrue (reference.IsAtLeastVersion (new Version (3, 2)));
+ Assert.IsTrue (reference.IsAtLeastVersion (new Version (3, 0, 0)));
+ Assert.IsTrue (reference.IsAtLeastVersion (new Version (3, 2, 0)));
+ Assert.IsTrue (reference.IsAtLeastVersion (new Version (3, 2, 0, 0)));
+ Assert.IsTrue (reference.IsAtLeastVersion (new Version (3, 0, 0, 0)));
+ Assert.IsFalse (reference.IsAtLeastVersion (new Version (4, 0)));
+ Assert.IsFalse (reference.IsAtLeastVersion (new Version (3, 3, 0)));
+ Assert.IsFalse (reference.IsAtLeastVersion (new Version (3, 2, 1)));
+ }
+
+ [Test]
+ [TestCase ("[3.2,)")]
+ [TestCase ("(3.2,]")]
+ [TestCase ("[3.2]")]
+ public void IsAtLeastVersion_Range (string versionRange)
+ {
+ var reference = ProjectPackageReference.Create ("NUnit", versionRange);
+ Assert.IsTrue (reference.IsAtLeastVersion (new Version (3, 0)));
+ Assert.IsTrue (reference.IsAtLeastVersion (new Version (3, 2)));
+ Assert.IsFalse (reference.IsAtLeastVersion (new Version (3, 2, 1)));
+ Assert.IsFalse (reference.IsAtLeastVersion (new Version (3, 3)));
+ }
}
}
diff --git a/main/src/addins/MonoDevelop.PackageManagement/MonoDevelop.PackageManagement.csproj b/main/src/addins/MonoDevelop.PackageManagement/MonoDevelop.PackageManagement.csproj
index 42514317d9..17b6b5b508 100644
--- a/main/src/addins/MonoDevelop.PackageManagement/MonoDevelop.PackageManagement.csproj
+++ b/main/src/addins/MonoDevelop.PackageManagement/MonoDevelop.PackageManagement.csproj
@@ -613,6 +613,7 @@
<InternalsVisibleTo Include="MonoDevelop.PackageManagement.Tests" />
<InternalsVisibleTo Include="MonoDevelop.Packaging" />
<InternalsVisibleTo Include="Xamarin.Forms.Addin" />
+ <InternalsVisibleTo Include="MonoDevelop.UnitTesting.NUnit" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project>
diff --git a/main/src/addins/MonoDevelop.PackageManagement/MonoDevelop.PackageManagement/ProjectPackageReference.cs b/main/src/addins/MonoDevelop.PackageManagement/MonoDevelop.PackageManagement/ProjectPackageReference.cs
index 515dcc67c2..e8db1a931c 100644
--- a/main/src/addins/MonoDevelop.PackageManagement/MonoDevelop.PackageManagement/ProjectPackageReference.cs
+++ b/main/src/addins/MonoDevelop.PackageManagement/MonoDevelop.PackageManagement/ProjectPackageReference.cs
@@ -75,6 +75,8 @@ namespace MonoDevelop.PackageManagement
NuGetFramework GetFramework ()
{
+ if (Project == null)
+ return NuGetFramework.AnyFramework;
string framework = Project.GetDotNetCoreTargetFrameworks ().FirstOrDefault ();
if (framework != null)
return NuGetFramework.Parse (framework);
@@ -82,6 +84,24 @@ namespace MonoDevelop.PackageManagement
return NuGetFramework.UnsupportedFramework;
}
+ public bool IsAtLeastVersion (Version version)
+ {
+ var packageReference = CreatePackageReference ();
+ var requestedVersion = new NuGetVersion (version);
+ var comparer = VersionComparer.VersionRelease;
+ if (packageReference.HasAllowedVersions) {
+ var versionRange = packageReference.AllowedVersions;
+ if (versionRange.HasLowerBound) {
+ var result = comparer.Compare (versionRange.MinVersion, requestedVersion);
+ return versionRange.IsMinInclusive ? result <= 0 : result < 0;
+ }
+ } else if (packageReference.PackageIdentity.HasVersion) {
+ var packageVersion = packageReference.PackageIdentity.Version;
+ return comparer.Compare (requestedVersion, packageVersion) <= 0;
+ }
+ return false;
+ }
+
public bool Equals (PackageIdentity packageIdentity, bool matchVersion = true)
{
var packageReference = CreatePackageReference ();
diff --git a/main/src/addins/MonoDevelop.UnitTesting.NUnit/AddinInfo.cs b/main/src/addins/MonoDevelop.UnitTesting.NUnit/AddinInfo.cs
index 6a99bf020a..5de61bfd30 100644
--- a/main/src/addins/MonoDevelop.UnitTesting.NUnit/AddinInfo.cs
+++ b/main/src/addins/MonoDevelop.UnitTesting.NUnit/AddinInfo.cs
@@ -14,3 +14,4 @@ using Mono.Addins.Description;
[assembly:AddinDependency ("Core", MonoDevelop.BuildInfo.Version)]
[assembly:AddinDependency ("Ide", MonoDevelop.BuildInfo.Version)]
[assembly:AddinDependency ("UnitTesting", MonoDevelop.BuildInfo.Version)]
+[assembly:AddinDependency ("PackageManagement", MonoDevelop.BuildInfo.Version)]
diff --git a/main/src/addins/MonoDevelop.UnitTesting.NUnit/MonoDevelop.UnitTesting.NUnit.csproj b/main/src/addins/MonoDevelop.UnitTesting.NUnit/MonoDevelop.UnitTesting.NUnit.csproj
index 30b3da6b60..42d7e3d3f2 100644
--- a/main/src/addins/MonoDevelop.UnitTesting.NUnit/MonoDevelop.UnitTesting.NUnit.csproj
+++ b/main/src/addins/MonoDevelop.UnitTesting.NUnit/MonoDevelop.UnitTesting.NUnit.csproj
@@ -70,6 +70,11 @@
<Name>MonoDevelop.UnitTesting</Name>
<Private>False</Private>
</ProjectReference>
+ <ProjectReference Include="..\MonoDevelop.PackageManagement\MonoDevelop.PackageManagement.csproj">
+ <Project>{F218643D-2E74-4309-820E-206A54B7133F}</Project>
+ <Name>MonoDevelop.PackageManagement</Name>
+ <Private>False</Private>
+ </ProjectReference>
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="MonoDevelopNUnit.addin.xml">
diff --git a/main/src/addins/MonoDevelop.UnitTesting.NUnit/MonoDevelop.UnitTesting.NUnit/NUnitProjectTestSuite.cs b/main/src/addins/MonoDevelop.UnitTesting.NUnit/MonoDevelop.UnitTesting.NUnit/NUnitProjectTestSuite.cs
index 1d88381efb..92f49b88b9 100644
--- a/main/src/addins/MonoDevelop.UnitTesting.NUnit/MonoDevelop.UnitTesting.NUnit/NUnitProjectTestSuite.cs
+++ b/main/src/addins/MonoDevelop.UnitTesting.NUnit/MonoDevelop.UnitTesting.NUnit/NUnitProjectTestSuite.cs
@@ -43,6 +43,7 @@ using System.Reflection;
using MonoDevelop.Ide.Gui.Components;
using MonoDevelop.Core.Assemblies;
using MonoDevelop.Core;
+using MonoDevelop.PackageManagement;
namespace MonoDevelop.UnitTesting.NUnit
{
@@ -80,8 +81,8 @@ namespace MonoDevelop.UnitTesting.NUnit
if (!project.ParentSolution.GetConfiguration (IdeApp.Workspace.ActiveConfiguration).BuildEnabledForItem (project))
return null;
- foreach (var p in project.References) {
- var nv = GetNUnitVersion (p);
+ foreach (var item in project.Items) {
+ var nv = GetNUnitVersion (item);
if (nv != null)
return new NUnitProjectTestSuite (project, nv.Value);
}
@@ -93,6 +94,17 @@ namespace MonoDevelop.UnitTesting.NUnit
return GetNUnitVersion (p).HasValue;
}
+ public static NUnitVersion? GetNUnitVersion (ProjectItem item)
+ {
+ switch (item) {
+ case ProjectReference pr:
+ return GetNUnitVersion (pr);
+ case ProjectPackageReference ppr:
+ return GetNUnitVersion (ppr);
+ }
+ return null;
+ }
+
public static NUnitVersion? GetNUnitVersion (ProjectReference p)
{
if (p.Reference.IndexOf ("GuiUnit", StringComparison.OrdinalIgnoreCase) != -1 || p.Reference.StartsWith ("nunitlite", StringComparison.OrdinalIgnoreCase))
@@ -118,6 +130,15 @@ namespace MonoDevelop.UnitTesting.NUnit
return null;
}
+ internal static NUnitVersion? GetNUnitVersion (ProjectPackageReference p)
+ {
+ if (p.Include.IndexOf ("GuiUnit", StringComparison.OrdinalIgnoreCase) != -1)
+ return NUnitVersion.NUnit2;
+ if (p.Include.IndexOf ("nunit.framework", StringComparison.OrdinalIgnoreCase) != -1)
+ return p.IsAtLeastVersion (new Version (3, 0)) ? NUnitVersion.NUnit3 : NUnitVersion.NUnit2;
+ return null;
+ }
+
protected override SourceCodeLocation GetSourceCodeLocation (string fixtureTypeNamespace, string fixtureTypeName, string testName)
{
if (string.IsNullOrEmpty (fixtureTypeName))