diff --git a/src/libraries/Common/tests/Extensions/TestingUtils/Microsoft.AspNetCore.Testing/src/xunit/MinimumOsVersionAttribute.cs b/src/libraries/Common/tests/Extensions/TestingUtils/Microsoft.AspNetCore.Testing/src/xunit/MinimumOsVersionAttribute.cs index df4985d338bc1..4d016a07e7842 100644 --- a/src/libraries/Common/tests/Extensions/TestingUtils/Microsoft.AspNetCore.Testing/src/xunit/MinimumOsVersionAttribute.cs +++ b/src/libraries/Common/tests/Extensions/TestingUtils/Microsoft.AspNetCore.Testing/src/xunit/MinimumOsVersionAttribute.cs @@ -3,7 +3,6 @@ using System; using System.Runtime.InteropServices; -using Microsoft.Win32; namespace Microsoft.AspNetCore.Testing { @@ -14,49 +13,36 @@ namespace Microsoft.AspNetCore.Testing [AttributeUsage(AttributeTargets.Method | AttributeTargets.Class | AttributeTargets.Assembly, AllowMultiple = true)] public class MinimumOSVersionAttribute : Attribute, ITestCondition { - private readonly OperatingSystems _excludedOperatingSystem; + private readonly OperatingSystems _targetOS; private readonly Version _minVersion; - private readonly OperatingSystems _osPlatform; - private readonly Version _osVersion; + private readonly OperatingSystems _currentOS; + private readonly Version _currentVersion; + private readonly bool _skip; public MinimumOSVersionAttribute(OperatingSystems operatingSystem, string minVersion) : - this( - operatingSystem, - GetCurrentOS(), - GetCurrentOSVersion(), - Version.Parse(minVersion)) + this(operatingSystem, Version.Parse(minVersion), GetCurrentOS(), GetCurrentOSVersion()) { } // to enable unit testing - internal MinimumOSVersionAttribute( - OperatingSystems operatingSystem, OperatingSystems osPlatform, Version osVersion, Version minVersion) + internal MinimumOSVersionAttribute(OperatingSystems targetOS, Version minVersion, OperatingSystems currentOS, Version currentVersion) { - if (operatingSystem != OperatingSystems.Windows) + if (targetOS != OperatingSystems.Windows) { throw new NotImplementedException("Min version support is only implemented for Windows."); } - _excludedOperatingSystem = operatingSystem; + _targetOS = targetOS; _minVersion = minVersion; - _osPlatform = osPlatform; - _osVersion = osVersion; + _currentOS = currentOS; + _currentVersion = currentVersion; - SkipReason = $"This test requires {_excludedOperatingSystem} {_minVersion} or later."; + // Do not skip other OS's, Use OSSkipConditionAttribute or a separate MinimumOSVersionAttribute for that. + _skip = _targetOS == _currentOS && _minVersion > _currentVersion; + SkipReason = $"This test requires {_targetOS} {_minVersion} or later."; } - public bool IsMet - { - get - { - // Do not skip other OS's, Use OSSkipConditionAttribute or a separate MinimumOSVersionAttribute for that. - if (_osPlatform != _excludedOperatingSystem) - { - return true; - } - - return _osVersion >= _minVersion; - } - } + // Since a test would be executed only if 'IsMet' is true, return false if we want to skip + public bool IsMet => !_skip; public string SkipReason { get; set; } @@ -77,34 +63,16 @@ private static OperatingSystems GetCurrentOS() throw new PlatformNotSupportedException(); } - private static Version GetCurrentOSVersion() + static private Version GetCurrentOSVersion() { - // currently not used on other OS's if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) { - // Win10+ - var key = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Windows NT\CurrentVersion"); - var major = key.GetValue("CurrentMajorVersionNumber") as int?; - var minor = key.GetValue("CurrentMinorVersionNumber") as int?; - - if (major.HasValue && minor.HasValue) - { - return new Version(major.Value, minor.Value); - } - - // CurrentVersion doesn't work past Win8.1 - var current = key.GetValue("CurrentVersion") as string; - if (!string.IsNullOrEmpty(current) && Version.TryParse(current, out var currentVersion)) - { - return currentVersion; - } - - // Environment.OSVersion doesn't work past Win8. return Environment.OSVersion.Version; } else { - return new Version(); + // Not implemented, but this will still be called before the OS check happens so don't throw. + return new Version(0, 0); } } } diff --git a/src/libraries/Common/tests/Extensions/TestingUtils/Microsoft.AspNetCore.Testing/src/xunit/OSMinVersionAttribute.cs b/src/libraries/Common/tests/Extensions/TestingUtils/Microsoft.AspNetCore.Testing/src/xunit/OSMinVersionAttribute.cs deleted file mode 100644 index 3bef606ee6764..0000000000000 --- a/src/libraries/Common/tests/Extensions/TestingUtils/Microsoft.AspNetCore.Testing/src/xunit/OSMinVersionAttribute.cs +++ /dev/null @@ -1,81 +0,0 @@ -// Copyright (c) .NET Foundation. All rights reserved. -// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. - -using System; -using System.Runtime.InteropServices; - -namespace Microsoft.AspNetCore.Testing -{ - [AttributeUsage(AttributeTargets.Method | AttributeTargets.Class | AttributeTargets.Assembly, AllowMultiple = true)] - public class OSMinVersionAttribute : Attribute, ITestCondition - { - private readonly OperatingSystems _targetOS; - private readonly Version _minVersion; - private readonly OperatingSystems _currentOS; - private readonly Version _currentVersion; - private readonly bool _skip; - - /// - /// Used to indicate the minimum version a test can run on for the given operating system. - /// Also add to skip other operating systems. - /// - /// The OS to check for a version. Only Windows is currently supported. - /// The minimum OS version NOT to skip. - public OSMinVersionAttribute(OperatingSystems targetOS, string minVersion) : - this(targetOS, Version.Parse(minVersion), GetCurrentOS(), GetCurrentOSVersion()) - { - } - - // to enable unit testing - internal OSMinVersionAttribute(OperatingSystems targetOS, Version minVersion, OperatingSystems currentOS, Version currentVersion) - { - if (targetOS != OperatingSystems.Windows) - { - throw new NotImplementedException(targetOS.ToString()); - } - - _targetOS = targetOS; - _minVersion = minVersion; - _currentOS = currentOS; - _currentVersion = currentVersion; - - _skip = _targetOS == _currentOS && _minVersion > _currentVersion; - SkipReason = $"The test cannot run on this operating system version '{currentVersion}'."; - } - - // Since a test would be excuted only if 'IsMet' is true, return false if we want to skip - public bool IsMet => !_skip; - - public string SkipReason { get; set; } - - static private OperatingSystems GetCurrentOS() - { - if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) - { - return OperatingSystems.Windows; - } - else if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux)) - { - return OperatingSystems.Linux; - } - else if (RuntimeInformation.IsOSPlatform(OSPlatform.OSX)) - { - return OperatingSystems.MacOSX; - } - throw new PlatformNotSupportedException(); - } - - static private Version GetCurrentOSVersion() - { - if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) - { - return Environment.OSVersion.Version; - } - else - { - // Not implmeneted, but this will still be called before the OS check happens so don't throw. - return new Version(0, 0); - } - } - } -} diff --git a/src/libraries/Common/tests/Extensions/TestingUtils/Microsoft.AspNetCore.Testing/test/OSMinVersionAttributeTest.cs b/src/libraries/Common/tests/Extensions/TestingUtils/Microsoft.AspNetCore.Testing/test/MinimumOSVersionAttributeTest.cs similarity index 70% rename from src/libraries/Common/tests/Extensions/TestingUtils/Microsoft.AspNetCore.Testing/test/OSMinVersionAttributeTest.cs rename to src/libraries/Common/tests/Extensions/TestingUtils/Microsoft.AspNetCore.Testing/test/MinimumOSVersionAttributeTest.cs index f156607e8b0ec..a0a6e84d7df86 100644 --- a/src/libraries/Common/tests/Extensions/TestingUtils/Microsoft.AspNetCore.Testing/test/OSMinVersionAttributeTest.cs +++ b/src/libraries/Common/tests/Extensions/TestingUtils/Microsoft.AspNetCore.Testing/test/MinimumOSVersionAttributeTest.cs @@ -6,30 +6,30 @@ namespace Microsoft.AspNetCore.Testing { - public class OSMinVersionAttributeTest + public class MinimumOSVersionAttributeTest { [Fact] public void Linux_ThrowsNotImplemeneted() { - Assert.Throws(() => new OSMinVersionAttribute(OperatingSystems.Linux, "2.5")); + Assert.Throws(() => new MinimumOSVersionAttribute(OperatingSystems.Linux, "2.5")); } [Fact] public void Mac_ThrowsNotImplemeneted() { - Assert.Throws(() => new OSMinVersionAttribute(OperatingSystems.MacOSX, "2.5")); + Assert.Throws(() => new MinimumOSVersionAttribute(OperatingSystems.MacOSX, "2.5")); } [Fact] public void WindowsOrLinux_ThrowsNotImplemeneted() { - Assert.Throws(() => new OSMinVersionAttribute(OperatingSystems.Linux | OperatingSystems.Windows, "2.5")); + Assert.Throws(() => new MinimumOSVersionAttribute(OperatingSystems.Linux | OperatingSystems.Windows, "2.5")); } [Fact] public void DoesNotSkip_LaterVersions() { - var osSkipAttribute = new OSMinVersionAttribute( + var osSkipAttribute = new MinimumOSVersionAttribute( OperatingSystems.Windows, new Version("2.0"), OperatingSystems.Windows, @@ -41,7 +41,7 @@ public void DoesNotSkip_LaterVersions() [Fact] public void DoesNotSkip_SameVersion() { - var osSkipAttribute = new OSMinVersionAttribute( + var osSkipAttribute = new MinimumOSVersionAttribute( OperatingSystems.Windows, new Version("2.5"), OperatingSystems.Windows, @@ -53,7 +53,7 @@ public void DoesNotSkip_SameVersion() [Fact] public void Skip_EarlierVersion() { - var osSkipAttribute = new OSMinVersionAttribute( + var osSkipAttribute = new MinimumOSVersionAttribute( OperatingSystems.Windows, new Version("3.0"), OperatingSystems.Windows, @@ -65,7 +65,7 @@ public void Skip_EarlierVersion() [Fact] public void DoesNotSkip_WhenOnlyVersionsMatch() { - var osSkipAttribute = new OSMinVersionAttribute( + var osSkipAttribute = new MinimumOSVersionAttribute( OperatingSystems.Windows, new Version("2.5"), OperatingSystems.Linux, diff --git a/src/libraries/Common/tests/Extensions/TestingUtils/Microsoft.AspNetCore.Testing/test/OSMinVersionTest.cs b/src/libraries/Common/tests/Extensions/TestingUtils/Microsoft.AspNetCore.Testing/test/MinimumOSVersionTest.cs similarity index 86% rename from src/libraries/Common/tests/Extensions/TestingUtils/Microsoft.AspNetCore.Testing/test/OSMinVersionTest.cs rename to src/libraries/Common/tests/Extensions/TestingUtils/Microsoft.AspNetCore.Testing/test/MinimumOSVersionTest.cs index 30233823e2365..b218cd1ec5ef6 100644 --- a/src/libraries/Common/tests/Extensions/TestingUtils/Microsoft.AspNetCore.Testing/test/OSMinVersionTest.cs +++ b/src/libraries/Common/tests/Extensions/TestingUtils/Microsoft.AspNetCore.Testing/test/MinimumOSVersionTest.cs @@ -8,10 +8,10 @@ namespace Microsoft.AspNetCore.Testing { - public class OSMinVersionTest + public class MinimumOSVersionTest { [ConditionalFact] - [OSMinVersion(OperatingSystems.Windows, WindowsVersions.Win8)] + [MinimumOSVersion(OperatingSystems.Windows, WindowsVersions.Win8)] public void RunTest_Win8DoesNotRunOnWin7() { Assert.False( @@ -21,7 +21,7 @@ public void RunTest_Win8DoesNotRunOnWin7() } [ConditionalTheory] - [OSMinVersion(OperatingSystems.Windows, WindowsVersions.Win8)] + [MinimumOSVersion(OperatingSystems.Windows, WindowsVersions.Win8)] [InlineData(1)] public void RunTheory_Win8DoesNotRunOnWin7(int arg) { @@ -32,7 +32,7 @@ public void RunTheory_Win8DoesNotRunOnWin7(int arg) } [ConditionalFact] - [OSMinVersion(OperatingSystems.Windows, WindowsVersions.Win10_RS4)] + [MinimumOSVersion(OperatingSystems.Windows, WindowsVersions.Win10_RS4)] [OSSkipCondition(OperatingSystems.Linux | OperatingSystems.MacOSX)] public void RunTest_Win10_RS4() { @@ -45,7 +45,7 @@ public void RunTest_Win10_RS4() } [ConditionalFact] - [OSMinVersion(OperatingSystems.Windows, WindowsVersions.Win10_19H2)] + [MinimumOSVersion(OperatingSystems.Windows, WindowsVersions.Win10_19H2)] [OSSkipCondition(OperatingSystems.Linux | OperatingSystems.MacOSX)] public void RunTest_Win10_19H2() { @@ -58,7 +58,7 @@ public void RunTest_Win10_19H2() } } - [OSMinVersion(OperatingSystems.Windows, WindowsVersions.Win8)] + [MinimumOSVersion(OperatingSystems.Windows, WindowsVersions.Win8)] public class OSMinVersionClassTest { [ConditionalFact]