diff options
author | Jérémie Laval <jeremie.laval@gmail.com> | 2017-08-14 21:58:07 +0300 |
---|---|---|
committer | Jérémie Laval <jeremie.laval@gmail.com> | 2017-08-14 23:45:17 +0300 |
commit | f07659c22f1fd45d76d439e305e739afa7564d71 (patch) | |
tree | 733674bd90f38038587588155d0caaf0e725b9a0 | |
parent | 57618ee76560cb6369e36667e84e024001b48b0c (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.
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)) |