From 73da7ca7140bc9be91175645928bf7eb5da78ba8 Mon Sep 17 00:00:00 2001 From: Chris Ross Date: Mon, 2 Dec 2019 14:21:43 -0800 Subject: [PATCH] Fix MaxOsVersion on Ubuntu (dotnet/extensions#2738) \n\nCommit migrated from https://github.com/dotnet/extensions/commit/e8491a2488c4ef514294ca9c8467f9f3e5157f54 --- .../src/xunit/MaximumOSVersionAttribute.cs | 5 ++++- src/Testing/test/MaximumOSVersionAttributeTest.cs | 12 ++++++++++++ src/Testing/test/MaximumOSVersionTest.cs | 15 +++++++++++++++ 3 files changed, 31 insertions(+), 1 deletion(-) diff --git a/src/Testing/src/xunit/MaximumOSVersionAttribute.cs b/src/Testing/src/xunit/MaximumOSVersionAttribute.cs index 439ba4c229..19ee1098d2 100644 --- a/src/Testing/src/xunit/MaximumOSVersionAttribute.cs +++ b/src/Testing/src/xunit/MaximumOSVersionAttribute.cs @@ -35,7 +35,10 @@ namespace Microsoft.AspNetCore.Testing _maxVersion = maxVersion; _currentOS = currentOS; // We drop the 4th field because it is not significant and it messes up the comparisons. - _currentVersion = new Version(currentVersion.Major, currentVersion.Minor, currentVersion.Build); + _currentVersion = new Version(currentVersion.Major, currentVersion.Minor, + // Major and Minor are required by the parser, but if Build isn't specified then it returns -1 + // which the constructor rejects. + currentVersion.Build == -1 ? 0 : currentVersion.Build); // Do not skip other OS's, Use OSSkipConditionAttribute or a separate MaximumOsVersionAttribute for that. _skip = _targetOS == _currentOS && _maxVersion < _currentVersion; diff --git a/src/Testing/test/MaximumOSVersionAttributeTest.cs b/src/Testing/test/MaximumOSVersionAttributeTest.cs index a830af19bb..ca71d7063b 100644 --- a/src/Testing/test/MaximumOSVersionAttributeTest.cs +++ b/src/Testing/test/MaximumOSVersionAttributeTest.cs @@ -26,6 +26,18 @@ namespace Microsoft.AspNetCore.Testing Assert.Throws(() => new MaximumOSVersionAttribute(OperatingSystems.Linux | OperatingSystems.Windows, "2.5")); } + [Fact] + public void DoesNotSkip_ShortVersions() + { + var osSkipAttribute = new MaximumOSVersionAttribute( + OperatingSystems.Windows, + new Version("2.5"), + OperatingSystems.Windows, + new Version("2.0")); + + Assert.True(osSkipAttribute.IsMet); + } + [Fact] public void DoesNotSkip_EarlierVersions() { diff --git a/src/Testing/test/MaximumOSVersionTest.cs b/src/Testing/test/MaximumOSVersionTest.cs index e9a0b08d99..e18d828fbf 100644 --- a/src/Testing/test/MaximumOSVersionTest.cs +++ b/src/Testing/test/MaximumOSVersionTest.cs @@ -72,4 +72,19 @@ namespace Microsoft.AspNetCore.Testing "Test should only be running on Win7 or Win2008R2."); } } + + // Let this one run cross plat just to check the constructor logic. + [MaximumOSVersion(OperatingSystems.Windows, WindowsVersions.Win7)] + public class OSMaxVersionCrossPlatTest + { + [ConditionalFact] + public void TestSkipClass_Win7DoesRunOnWin7() + { + if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) + { + Assert.True(Environment.OSVersion.Version.ToString().StartsWith("6.1"), + "Test should only be running on Win7 or Win2008R2."); + } + } + } }