From e467364175acbdda3e5affa81d802d71b37589c8 Mon Sep 17 00:00:00 2001 From: Chris Ross Date: Thu, 5 Dec 2019 10:58:15 -0800 Subject: [PATCH] Remove version checks from OSSkipCondition (dotnet/extensions#2755) \n\nCommit migrated from https://github.com/dotnet/extensions/commit/0aa6213e1c4abd0cf45189e93751bf38b9f8c07c --- .../ref/Microsoft.AspNetCore.Testing.net46.cs | 3 + ...osoft.AspNetCore.Testing.netstandard2.0.cs | 3 + .../src/xunit/OSSkipConditionAttribute.cs | 57 +++----------- src/Testing/src/xunit/WindowsVersions.cs | 3 + .../test/OSSkipConditionAttributeTest.cs | 78 +++---------------- src/Testing/test/OSSkipConditionTest.cs | 11 --- 6 files changed, 28 insertions(+), 127 deletions(-) diff --git a/src/Testing/ref/Microsoft.AspNetCore.Testing.net46.cs b/src/Testing/ref/Microsoft.AspNetCore.Testing.net46.cs index eb901008cc..af28ec60e0 100644 --- a/src/Testing/ref/Microsoft.AspNetCore.Testing.net46.cs +++ b/src/Testing/ref/Microsoft.AspNetCore.Testing.net46.cs @@ -193,6 +193,8 @@ namespace Microsoft.AspNetCore.Testing [System.AttributeUsageAttribute(System.AttributeTargets.Assembly | System.AttributeTargets.Class | System.AttributeTargets.Method, AllowMultiple=true)] public partial class OSSkipConditionAttribute : System.Attribute, Microsoft.AspNetCore.Testing.ITestCondition { + public OSSkipConditionAttribute(Microsoft.AspNetCore.Testing.OperatingSystems operatingSystem) { } + [System.ObsoleteAttribute("Use the Minimum/MaximumOSVersionAttribute for version checks.", true)] public OSSkipConditionAttribute(Microsoft.AspNetCore.Testing.OperatingSystems operatingSystem, params string[] versions) { } public bool IsMet { get { throw null; } } public string SkipReason { [System.Runtime.CompilerServices.CompilerGeneratedAttribute] get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute] set { } } @@ -331,6 +333,7 @@ namespace Microsoft.AspNetCore.Testing public const string Win10_20H1 = "10.0.19033"; public const string Win10_RS4 = "10.0.17134"; public const string Win10_RS5 = "10.0.17763"; + [System.ObsoleteAttribute("Use Win7 instead.", true)] public const string Win2008R2 = "6.1"; public const string Win7 = "6.1"; public const string Win8 = "6.2"; diff --git a/src/Testing/ref/Microsoft.AspNetCore.Testing.netstandard2.0.cs b/src/Testing/ref/Microsoft.AspNetCore.Testing.netstandard2.0.cs index eb901008cc..af28ec60e0 100644 --- a/src/Testing/ref/Microsoft.AspNetCore.Testing.netstandard2.0.cs +++ b/src/Testing/ref/Microsoft.AspNetCore.Testing.netstandard2.0.cs @@ -193,6 +193,8 @@ namespace Microsoft.AspNetCore.Testing [System.AttributeUsageAttribute(System.AttributeTargets.Assembly | System.AttributeTargets.Class | System.AttributeTargets.Method, AllowMultiple=true)] public partial class OSSkipConditionAttribute : System.Attribute, Microsoft.AspNetCore.Testing.ITestCondition { + public OSSkipConditionAttribute(Microsoft.AspNetCore.Testing.OperatingSystems operatingSystem) { } + [System.ObsoleteAttribute("Use the Minimum/MaximumOSVersionAttribute for version checks.", true)] public OSSkipConditionAttribute(Microsoft.AspNetCore.Testing.OperatingSystems operatingSystem, params string[] versions) { } public bool IsMet { get { throw null; } } public string SkipReason { [System.Runtime.CompilerServices.CompilerGeneratedAttribute] get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute] set { } } @@ -331,6 +333,7 @@ namespace Microsoft.AspNetCore.Testing public const string Win10_20H1 = "10.0.19033"; public const string Win10_RS4 = "10.0.17134"; public const string Win10_RS5 = "10.0.17763"; + [System.ObsoleteAttribute("Use Win7 instead.", true)] public const string Win2008R2 = "6.1"; public const string Win7 = "6.1"; public const string Win8 = "6.2"; diff --git a/src/Testing/src/xunit/OSSkipConditionAttribute.cs b/src/Testing/src/xunit/OSSkipConditionAttribute.cs index 7655a3b45a..50e3cae192 100644 --- a/src/Testing/src/xunit/OSSkipConditionAttribute.cs +++ b/src/Testing/src/xunit/OSSkipConditionAttribute.cs @@ -2,8 +2,6 @@ // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. using System; -using System.Collections.Generic; -using System.Linq; using System.Runtime.InteropServices; namespace Microsoft.AspNetCore.Testing @@ -12,46 +10,31 @@ namespace Microsoft.AspNetCore.Testing public class OSSkipConditionAttribute : Attribute, ITestCondition { private readonly OperatingSystems _excludedOperatingSystem; - private readonly IEnumerable _excludedVersions; private readonly OperatingSystems _osPlatform; - private readonly string _osVersion; - public OSSkipConditionAttribute(OperatingSystems operatingSystem, params string[] versions) : - this( - operatingSystem, - GetCurrentOS(), - GetCurrentOSVersion(), - versions) + public OSSkipConditionAttribute(OperatingSystems operatingSystem) : + this(operatingSystem, GetCurrentOS()) + { + } + + [Obsolete("Use the Minimum/MaximumOSVersionAttribute for version checks.", error: true)] + public OSSkipConditionAttribute(OperatingSystems operatingSystem, params string[] versions) : + this(operatingSystem, GetCurrentOS()) { } // to enable unit testing - internal OSSkipConditionAttribute( - OperatingSystems operatingSystem, OperatingSystems osPlatform, string osVersion, params string[] versions) + internal OSSkipConditionAttribute(OperatingSystems operatingSystem, OperatingSystems osPlatform) { _excludedOperatingSystem = operatingSystem; - _excludedVersions = versions ?? Enumerable.Empty(); _osPlatform = osPlatform; - _osVersion = osVersion; } public bool IsMet { get { - var currentOSInfo = new OSInfo() - { - OperatingSystem = _osPlatform, - Version = _osVersion, - }; - - var skip = (_excludedOperatingSystem & currentOSInfo.OperatingSystem) == currentOSInfo.OperatingSystem; - if (_excludedVersions.Any()) - { - skip = skip - && _excludedVersions.Any(ex => _osVersion.StartsWith(ex, StringComparison.OrdinalIgnoreCase)); - } - + var skip = (_excludedOperatingSystem & _osPlatform) == _osPlatform; // Since a test would be excuted only if 'IsMet' is true, return false if we want to skip return !skip; } @@ -75,25 +58,5 @@ namespace Microsoft.AspNetCore.Testing } throw new PlatformNotSupportedException(); } - - static private string GetCurrentOSVersion() - { - // currently not used on other OS's - if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) - { - return Environment.OSVersion.Version.ToString(); - } - else - { - return string.Empty; - } - } - - private class OSInfo - { - public OperatingSystems OperatingSystem { get; set; } - - public string Version { get; set; } - } } } diff --git a/src/Testing/src/xunit/WindowsVersions.cs b/src/Testing/src/xunit/WindowsVersions.cs index a8c2b43048..44448c74d1 100644 --- a/src/Testing/src/xunit/WindowsVersions.cs +++ b/src/Testing/src/xunit/WindowsVersions.cs @@ -1,6 +1,8 @@ // 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; + namespace Microsoft.AspNetCore.Testing { /// @@ -10,6 +12,7 @@ namespace Microsoft.AspNetCore.Testing { public const string Win7 = "6.1"; + [Obsolete("Use Win7 instead.", error: true)] public const string Win2008R2 = Win7; public const string Win8 = "6.2"; diff --git a/src/Testing/test/OSSkipConditionAttributeTest.cs b/src/Testing/test/OSSkipConditionAttributeTest.cs index 199af3ab6e..d4bc4f2b74 100644 --- a/src/Testing/test/OSSkipConditionAttributeTest.cs +++ b/src/Testing/test/OSSkipConditionAttributeTest.cs @@ -10,13 +10,12 @@ namespace Microsoft.AspNetCore.Testing public class OSSkipConditionAttributeTest { [Fact] - public void Skips_WhenOnlyOperatingSystemIsSupplied() + public void Skips_WhenOperatingSystemMatches() { // Act var osSkipAttribute = new OSSkipConditionAttribute( OperatingSystems.Windows, - OperatingSystems.Windows, - "2.5"); + OperatingSystems.Windows); // Assert Assert.False(osSkipAttribute.IsMet); @@ -28,77 +27,18 @@ namespace Microsoft.AspNetCore.Testing // Act var osSkipAttribute = new OSSkipConditionAttribute( OperatingSystems.Linux, - OperatingSystems.Windows, - "2.5"); + OperatingSystems.Windows); // Assert Assert.True(osSkipAttribute.IsMet); } - [Fact] - public void DoesNotSkip_WhenVersionsDoNotMatch() - { - // Act - var osSkipAttribute = new OSSkipConditionAttribute( - OperatingSystems.Windows, - OperatingSystems.Windows, - "2.5", - "10.0"); - - // Assert - Assert.True(osSkipAttribute.IsMet); - } - - [Fact] - public void DoesNotSkip_WhenOnlyVersionsMatch() - { - // Act - var osSkipAttribute = new OSSkipConditionAttribute( - OperatingSystems.Linux, - OperatingSystems.Windows, - "2.5", - "2.5"); - - // Assert - Assert.True(osSkipAttribute.IsMet); - } - - [Theory] - [InlineData("2.5", "2.5")] - [InlineData("blue", "Blue")] - public void Skips_WhenVersionsMatches(string currentOSVersion, string skipVersion) - { - // Act - var osSkipAttribute = new OSSkipConditionAttribute( - OperatingSystems.Windows, - OperatingSystems.Windows, - currentOSVersion, - skipVersion); - - // Assert - Assert.False(osSkipAttribute.IsMet); - } - - [Fact] - public void Skips_WhenVersionsMatchesOutOfMultiple() - { - // Act - var osSkipAttribute = new OSSkipConditionAttribute( - OperatingSystems.Windows, - OperatingSystems.Windows, - "2.5", - "10.0", "3.4", "2.5"); - - // Assert - Assert.False(osSkipAttribute.IsMet); - } - [Fact] public void Skips_BothMacOSXAndLinux() { // Act - var osSkipAttributeLinux = new OSSkipConditionAttribute(OperatingSystems.Linux | OperatingSystems.MacOSX, OperatingSystems.Linux, string.Empty); - var osSkipAttributeMacOSX = new OSSkipConditionAttribute(OperatingSystems.Linux | OperatingSystems.MacOSX, OperatingSystems.MacOSX, string.Empty); + var osSkipAttributeLinux = new OSSkipConditionAttribute(OperatingSystems.Linux | OperatingSystems.MacOSX, OperatingSystems.Linux); + var osSkipAttributeMacOSX = new OSSkipConditionAttribute(OperatingSystems.Linux | OperatingSystems.MacOSX, OperatingSystems.MacOSX); // Assert Assert.False(osSkipAttributeLinux.IsMet); @@ -109,8 +49,8 @@ namespace Microsoft.AspNetCore.Testing public void Skips_BothMacOSXAndWindows() { // Act - var osSkipAttribute = new OSSkipConditionAttribute(OperatingSystems.Windows | OperatingSystems.MacOSX, OperatingSystems.Windows, string.Empty); - var osSkipAttributeMacOSX = new OSSkipConditionAttribute(OperatingSystems.Windows | OperatingSystems.MacOSX, OperatingSystems.MacOSX, string.Empty); + var osSkipAttribute = new OSSkipConditionAttribute(OperatingSystems.Windows | OperatingSystems.MacOSX, OperatingSystems.Windows); + var osSkipAttributeMacOSX = new OSSkipConditionAttribute(OperatingSystems.Windows | OperatingSystems.MacOSX, OperatingSystems.MacOSX); // Assert Assert.False(osSkipAttribute.IsMet); @@ -121,8 +61,8 @@ namespace Microsoft.AspNetCore.Testing public void Skips_BothWindowsAndLinux() { // Act - var osSkipAttribute = new OSSkipConditionAttribute(OperatingSystems.Linux | OperatingSystems.Windows, OperatingSystems.Windows, string.Empty); - var osSkipAttributeLinux = new OSSkipConditionAttribute(OperatingSystems.Linux | OperatingSystems.Windows, OperatingSystems.Linux, string.Empty); + var osSkipAttribute = new OSSkipConditionAttribute(OperatingSystems.Linux | OperatingSystems.Windows, OperatingSystems.Windows); + var osSkipAttributeLinux = new OSSkipConditionAttribute(OperatingSystems.Linux | OperatingSystems.Windows, OperatingSystems.Linux); // Assert Assert.False(osSkipAttribute.IsMet); diff --git a/src/Testing/test/OSSkipConditionTest.cs b/src/Testing/test/OSSkipConditionTest.cs index a7904b1730..6aeecaddcc 100644 --- a/src/Testing/test/OSSkipConditionTest.cs +++ b/src/Testing/test/OSSkipConditionTest.cs @@ -1,7 +1,6 @@ // 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; using Xunit; @@ -27,16 +26,6 @@ namespace Microsoft.AspNetCore.Testing "Test should not be running on MacOSX."); } - [ConditionalFact] - [OSSkipCondition(OperatingSystems.Windows, WindowsVersions.Win7, WindowsVersions.Win2008R2)] - public void RunTest_DoesNotRunOnWin7OrWin2008R2() - { - Assert.False( - RuntimeInformation.IsOSPlatform(OSPlatform.Windows) && - Environment.OSVersion.Version.ToString().StartsWith("6.1"), - "Test should not be running on Win7 or Win2008R2."); - } - [ConditionalFact] [OSSkipCondition(OperatingSystems.Windows)] public void TestSkipWindows()