/// <summary>Gets the system's page size.</summary>
protected static Lazy<int> s_pageSize = new Lazy<int>(() =>
{
- if (RuntimeInformation.IsOSPlatform(OSPlatform.Browser))
+ if (OperatingSystem.IsBrowser())
return Environment.SystemPageSize;
int pageSize;
public void OSVersion_MatchesPlatform()
{
PlatformID id = Environment.OSVersion.Platform;
- PlatformID expected = RuntimeInformation.IsOSPlatform(OSPlatform.Windows) ? PlatformID.Win32NT : RuntimeInformation.IsOSPlatform(OSPlatform.Browser) ? PlatformID.Other : PlatformID.Unix;
+ PlatformID expected = RuntimeInformation.IsOSPlatform(OSPlatform.Windows) ? PlatformID.Win32NT : OperatingSystem.IsBrowser() ? PlatformID.Other : PlatformID.Unix;
Assert.Equal(expected, id);
}
Assert.Contains(version.ToString(2), versionString);
- string expectedOS = RuntimeInformation.IsOSPlatform(OSPlatform.Windows) ? "Windows " : RuntimeInformation.IsOSPlatform(OSPlatform.Browser) ? "Other " : "Unix ";
+ string expectedOS = RuntimeInformation.IsOSPlatform(OSPlatform.Windows) ? "Windows " : OperatingSystem.IsBrowser() ? "Other " : "Unix ";
Assert.Contains(expectedOS, versionString);
}
{
private readonly object _dummy;
private readonly int _dummyPrimitive;
- public static System.Runtime.InteropServices.OSPlatform Android { get { throw null; } }
- public static System.Runtime.InteropServices.OSPlatform Browser { get { throw null; } }
public static System.Runtime.InteropServices.OSPlatform FreeBSD { get { throw null; } }
- public static System.Runtime.InteropServices.OSPlatform iOS { get { throw null; } }
public static System.Runtime.InteropServices.OSPlatform Linux { get { throw null; } }
- public static System.Runtime.InteropServices.OSPlatform macOS { get { throw null; } }
- [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)]
public static System.Runtime.InteropServices.OSPlatform OSX { get { throw null; } }
- public static System.Runtime.InteropServices.OSPlatform tvOS { get { throw null; } }
- public static System.Runtime.InteropServices.OSPlatform watchOS { get { throw null; } }
public static System.Runtime.InteropServices.OSPlatform Windows { get { throw null; } }
public static System.Runtime.InteropServices.OSPlatform Create(string osPlatform) { throw null; }
public override bool Equals(object? obj) { throw null; }
public static System.Runtime.InteropServices.Architecture ProcessArchitecture { get { throw null; } }
public static string RuntimeIdentifier { get { throw null; } }
public static bool IsOSPlatform(System.Runtime.InteropServices.OSPlatform osPlatform) { throw null; }
- public static bool IsOSPlatformEarlierThan(System.Runtime.InteropServices.OSPlatform osPlatform, int major) { throw null; }
- public static bool IsOSPlatformEarlierThan(System.Runtime.InteropServices.OSPlatform osPlatform, int major, int minor) { throw null; }
- public static bool IsOSPlatformEarlierThan(System.Runtime.InteropServices.OSPlatform osPlatform, int major, int minor, int build) { throw null; }
- public static bool IsOSPlatformEarlierThan(System.Runtime.InteropServices.OSPlatform osPlatform, int major, int minor, int build, int revision) { throw null; }
- public static bool IsOSPlatformEarlierThan(string platformName) { throw null; }
- public static bool IsOSPlatformOrLater(System.Runtime.InteropServices.OSPlatform osPlatform, int major) { throw null; }
- public static bool IsOSPlatformOrLater(System.Runtime.InteropServices.OSPlatform osPlatform, int major, int minor) { throw null; }
- public static bool IsOSPlatformOrLater(System.Runtime.InteropServices.OSPlatform osPlatform, int major, int minor, int build) { throw null; }
- public static bool IsOSPlatformOrLater(System.Runtime.InteropServices.OSPlatform osPlatform, int major, int minor, int build, int revision) { throw null; }
- public static bool IsOSPlatformOrLater(string platformName) { throw null; }
}
}
<data name="Argument_EmptyValue" xml:space="preserve">
<value>Value cannot be empty.</value>
</data>
- <data name="Argument_InvalidPlatfromName" xml:space="preserve">
- <value>"{0}" is not a valid platform name. It must contain both name and version (with at least major and minor number specified). Example: "ios14.0".</value>
- </data>
<data name="PlatformNotSupported_RuntimeInformation" xml:space="preserve">
<value>RuntimeInformation is not supported for Portable Class Libraries.</value>
</data>
</PropertyGroup>
<ItemGroup>
<Compile Include="System\Runtime\InteropServices\RuntimeInformation\RuntimeInformation.cs" />
- <Compile Include="System\Runtime\InteropServices\RuntimeInformation\RuntimeInformation.PlatformVersion.cs" />
<Compile Include="System\Runtime\InteropServices\RuntimeInformation\Architecture.cs" />
<Compile Include="System\Runtime\InteropServices\RuntimeInformation\OSPlatform.cs" />
</ItemGroup>
</ItemGroup>
<ItemGroup Condition="'$(TargetsUnix)' == 'true'">
<Compile Include="System\Runtime\InteropServices\RuntimeInformation\RuntimeInformation.Unix.cs" />
- <Compile Include="$(CommonPath)Interop\Unix\System.Native\Interop.GetUnixName.cs"
- Link="Common\Interop\Unix\System.Native\Interop.GetUnixName.cs" />
<Compile Include="$(CommonPath)Interop\Unix\System.Native\Interop.GetUnixVersion.cs"
Link="Common\Interop\Unix\System.Native\Interop.GetUnixVersion.cs" />
<Compile Include="$(CommonPath)Interop\Unix\System.Native\Interop.GetOSArchitecture.cs"
<Reference Include="System.Runtime" />
<Reference Include="System.Runtime.InteropServices" />
<Reference Include="System.Threading" />
- <Reference Include="System.Memory" />
</ItemGroup>
</Project>
{
public readonly struct OSPlatform : IEquatable<OSPlatform>
{
- private readonly string _osPlatform;
-
- public static OSPlatform Android { get; } = new OSPlatform("ANDROID");
-
- public static OSPlatform Browser { get; } = new OSPlatform("BROWSER");
-
public static OSPlatform FreeBSD { get; } = new OSPlatform("FREEBSD");
public static OSPlatform Linux { get; } = new OSPlatform("LINUX");
- public static OSPlatform macOS { get; } = new OSPlatform("MACOS");
-
- [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] // superseded by macOS
public static OSPlatform OSX { get; } = new OSPlatform("OSX");
- public static OSPlatform iOS { get; } = new OSPlatform("IOS");
-
- public static OSPlatform tvOS { get; } = new OSPlatform("TVOS");
-
- public static OSPlatform watchOS { get; } = new OSPlatform("WATCHOS");
-
public static OSPlatform Windows { get; } = new OSPlatform("WINDOWS");
- internal bool IsCurrent { get; } // this information is cached because it's frequently used
+ internal string Name { get; }
private OSPlatform(string osPlatform)
{
if (osPlatform == null) throw new ArgumentNullException(nameof(osPlatform));
if (osPlatform.Length == 0) throw new ArgumentException(SR.Argument_EmptyValue, nameof(osPlatform));
- _osPlatform = osPlatform;
- IsCurrent = RuntimeInformation.IsCurrentOSPlatform(osPlatform);
+ Name = osPlatform;
}
/// <summary>
public bool Equals(OSPlatform other)
{
- return Equals(other._osPlatform);
+ return Equals(other.Name);
}
internal bool Equals(string? other)
{
- return string.Equals(_osPlatform, other, StringComparison.OrdinalIgnoreCase);
+ return string.Equals(Name, other, StringComparison.OrdinalIgnoreCase);
}
public override bool Equals(object? obj)
public override int GetHashCode()
{
- return _osPlatform == null ? 0 : _osPlatform.GetHashCode(StringComparison.OrdinalIgnoreCase);
+ return Name == null ? 0 : Name.GetHashCode(StringComparison.OrdinalIgnoreCase);
}
public override string ToString()
{
- return _osPlatform ?? string.Empty;
+ return Name ?? string.Empty;
}
public static bool operator ==(OSPlatform left, OSPlatform right)
{
public static partial class RuntimeInformation
{
- internal static bool IsCurrentOSPlatform(string osPlatform) => osPlatform.Equals("BROWSER", StringComparison.OrdinalIgnoreCase);
-
public static string OSDescription => "Browser";
public static Architecture OSArchitecture => Architecture.Wasm;
+++ /dev/null
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-
-namespace System.Runtime.InteropServices
-{
- public static partial class RuntimeInformation
- {
- /// <summary>
- /// Check for the OS with a >= version comparison. Used to guard APIs that were added in the given OS release.
- /// </summary>
- /// <param name="platformName">OS name concatenated with a version number.</param>
- /// <remarks>The version number must contain at least major and minor numbers separated with a dot.
- /// Example: "ios14.0" is OK, "ios14" is NOT OK.</remarks>
- public static bool IsOSPlatformOrLater(string platformName)
- {
- (OSPlatform platform, Version version) = Parse(platformName);
-
- return IsOSPlatformOrLater(platform, version.Major, version.Minor, version.Build, version.Revision);
- }
-
- /// <summary>
- /// Check for the OS with a >= version comparison. Used to guard APIs that were added in the given OS release.
- /// </summary>
- public static bool IsOSPlatformOrLater(OSPlatform osPlatform, int major)
- => IsOSPlatform(osPlatform) && Environment.OSVersion.Version.Major >= major;
-
- /// <summary>
- /// Check for the OS with a >= version comparison. Used to guard APIs that were added in the given OS release.
- /// </summary>
- public static bool IsOSPlatformOrLater(OSPlatform osPlatform, int major, int minor)
- => IsOSPlatform(osPlatform) && IsOSVersionOrLater(major, minor, int.MinValue, int.MinValue);
-
- /// <summary>
- /// Check for the OS with a >= version comparison. Used to guard APIs that were added in the given OS release.
- /// </summary>
- public static bool IsOSPlatformOrLater(OSPlatform osPlatform, int major, int minor, int build)
- => IsOSPlatform(osPlatform) && IsOSVersionOrLater(major, minor, build, int.MinValue);
-
- /// <summary>
- /// Check for the OS with a >= version comparison. Used to guard APIs that were added in the given OS release.
- /// </summary>
- public static bool IsOSPlatformOrLater(OSPlatform osPlatform, int major, int minor, int build, int revision)
- => IsOSPlatform(osPlatform) && IsOSVersionOrLater(major, minor, build, revision);
-
- /// <summary>
- /// Check for the OS with a < version comparison. Used to guard APIs that were obsoleted or removed in the given OS release.
- /// </summary>
- /// <param name="platformName">OS name concatenated with a version number.</param>
- /// <remarks>The version number must contain at least major and minor numbers separated with a dot.
- /// Example: "ios14.0" is OK, "ios14" is NOT OK.</remarks>
- public static bool IsOSPlatformEarlierThan(string platformName)
- {
- (OSPlatform platform, Version version) = Parse(platformName);
-
- return IsOSPlatformEarlierThan(platform, version.Major, version.Minor, version.Build, version.Revision);
- }
-
- /// <summary>
- /// Check for the OS with a < version comparison. Used to guard APIs that were obsoleted or removed in the given OS release.
- /// </summary>
- public static bool IsOSPlatformEarlierThan(OSPlatform osPlatform, int major)
- => IsOSPlatform(osPlatform) && Environment.OSVersion.Version.Major < major;
-
- /// <summary>
- /// Check for the OS with a < version comparison. Used to guard APIs that were obsoleted or removed in the given OS release.
- /// </summary>
- public static bool IsOSPlatformEarlierThan(OSPlatform osPlatform, int major, int minor)
- => IsOSPlatform(osPlatform) && !IsOSVersionOrLater(major, minor, int.MinValue, int.MinValue);
-
- /// <summary>
- /// Check for the OS with a < version comparison. Used to guard APIs that were obsoleted or removed in the given OS release.
- /// </summary>
- public static bool IsOSPlatformEarlierThan(OSPlatform osPlatform, int major, int minor, int build)
- => IsOSPlatform(osPlatform) && !IsOSVersionOrLater(major, minor, build, int.MinValue);
-
- /// <summary>
- /// Check for the OS with a < version comparison. Used to guard APIs that were obsoleted or removed in the given OS release.
- /// </summary>
- public static bool IsOSPlatformEarlierThan(OSPlatform osPlatform, int major, int minor, int build, int revision)
- => IsOSPlatform(osPlatform) && !IsOSVersionOrLater(major, minor, build, revision);
-
- private static bool IsOSVersionOrLater(int major, int minor, int build, int revision)
- {
- Version current = Environment.OSVersion.Version;
- if (current.Major != major)
- {
- return current.Major > major;
- }
- if (current.Minor != minor)
- {
- return current.Minor > minor;
- }
- if (current.Build != build)
- {
- return current.Build > build;
- }
-
- return current.Revision >= revision;
- }
-
- private static (OSPlatform, Version) Parse(string platformName)
- {
- if (platformName == null)
- {
- throw new ArgumentNullException(nameof(platformName));
- }
- if (platformName.Length == 0)
- {
- throw new ArgumentException(SR.Argument_EmptyValue, nameof(platformName));
- }
-
- // iterate from the begining, as digits in the middle of the names are not supported by design
- for (int i = 0; i < platformName.Length; i++)
- {
- if (char.IsDigit(platformName[i]))
- {
- if (i > 0 && Version.TryParse(platformName.AsSpan(i), out Version? version))
- {
- return (OSPlatform.Create(platformName.Substring(0, i)), version);
- }
- else
- {
- break;
- }
- }
- }
-
- throw new ArgumentException(SR.Format(SR.Argument_InvalidPlatfromName, platformName), nameof(platformName));
- }
- }
-}
{
public static partial class RuntimeInformation
{
- private static string? s_osPlatformName;
private static string? s_osDescription;
- internal static bool IsCurrentOSPlatform(string osPlatform)
- {
- string name = s_osPlatformName ??= Interop.Sys.GetUnixName();
-
- return osPlatform.Equals(name, StringComparison.OrdinalIgnoreCase)
- || (name == "OSX" && osPlatform.Equals("MACOS", StringComparison.OrdinalIgnoreCase)); // GetUnixName returns OSX on macOS
- }
-
public static string OSDescription => s_osDescription ??= Interop.Sys.GetUnixVersion();
public static Architecture OSArchitecture { get; } = Map((Interop.Sys.ProcessorArchitecture)Interop.Sys.GetOSArchitecture());
private static volatile int s_osArch = -1;
private static volatile int s_processArch = -1;
- internal static bool IsCurrentOSPlatform(string osPlatform) => osPlatform.Equals("WINDOWS", StringComparison.OrdinalIgnoreCase);
-
public static string OSDescription
{
get
/// <summary>
/// Indicates whether the current application is running on the specified platform.
/// </summary>
- public static bool IsOSPlatform(OSPlatform osPlatform) => osPlatform.IsCurrent;
+ public static bool IsOSPlatform(OSPlatform osPlatform) => OperatingSystem.IsOSPlatform(osPlatform.Name);
}
}
Assert.True(RuntimeInformation.IsOSPlatform(OSPlatform.OSX));
Assert.True(RuntimeInformation.IsOSPlatform(OSPlatform.Create("OSX")));
Assert.True(RuntimeInformation.IsOSPlatform(OSPlatform.Create("osx")));
- Assert.True(RuntimeInformation.IsOSPlatform(OSPlatform.macOS));
- Assert.True(RuntimeInformation.IsOSPlatform(OSPlatform.Create("MACOS")));
- Assert.True(RuntimeInformation.IsOSPlatform(OSPlatform.Create("macOS")));
- Assert.True(RuntimeInformation.IsOSPlatform(OSPlatform.Create("macos")));
Assert.False(RuntimeInformation.IsOSPlatform(OSPlatform.Create("FREEBSD")));
Assert.False(RuntimeInformation.IsOSPlatform(OSPlatform.Create("NETBSD")));
[Fact, PlatformSpecific(TestPlatforms.iOS)] // Tests RuntimeInformation OS platform
public void CheckiOS()
{
- Assert.True(RuntimeInformation.IsOSPlatform(OSPlatform.iOS));
Assert.True(RuntimeInformation.IsOSPlatform(OSPlatform.Create("IOS")));
Assert.True(RuntimeInformation.IsOSPlatform(OSPlatform.Create("iOS")));
Assert.True(RuntimeInformation.IsOSPlatform(OSPlatform.Create("ios")));
[Fact, PlatformSpecific(TestPlatforms.tvOS)] // Tests RuntimeInformation OS platform
public void ChecktvOS()
{
- Assert.True(RuntimeInformation.IsOSPlatform(OSPlatform.tvOS));
Assert.True(RuntimeInformation.IsOSPlatform(OSPlatform.Create("TVOS")));
Assert.True(RuntimeInformation.IsOSPlatform(OSPlatform.Create("tvOS")));
Assert.True(RuntimeInformation.IsOSPlatform(OSPlatform.Create("tvos")));
[Fact, PlatformSpecific(TestPlatforms.Android)] // Tests RuntimeInformation OS platform
public void CheckAndroid()
{
- Assert.True(RuntimeInformation.IsOSPlatform(OSPlatform.Android));
Assert.True(RuntimeInformation.IsOSPlatform(OSPlatform.Create("ANDROID")));
Assert.True(RuntimeInformation.IsOSPlatform(OSPlatform.Create("android")));
[Fact, PlatformSpecific(TestPlatforms.Browser)] // Tests RuntimeInformation OS platform
public void CheckBrowser()
{
- Assert.True(RuntimeInformation.IsOSPlatform(OSPlatform.Browser));
Assert.True(RuntimeInformation.IsOSPlatform(OSPlatform.Create("BROWSER")));
Assert.True(RuntimeInformation.IsOSPlatform(OSPlatform.Create("browser")));
+++ /dev/null
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-
-using System.Collections.Generic;
-using Xunit;
-
-namespace System.Runtime.InteropServices.RuntimeInformationTests
-{
- public class PlatformVersionTests
- {
- public static IEnumerable<object[]> AllKnownOsPlatforms()
- {
- yield return new object[] { OSPlatform.Windows };
- yield return new object[] { OSPlatform.Linux };
- yield return new object[] { OSPlatform.OSX };
- yield return new object[] { OSPlatform.Browser };
- yield return new object[] { OSPlatform.macOS };
- yield return new object[] { OSPlatform.iOS };
- yield return new object[] { OSPlatform.tvOS };
- yield return new object[] { OSPlatform.watchOS };
- yield return new object[] { OSPlatform.Android };
- }
-
- [Fact]
- public void IsOSPlatformOrLater_Null_ThrowsArgumentNullExceptionWithArgumentName()
- {
- Assert.Throws<ArgumentNullException>("platformName", () => RuntimeInformation.IsOSPlatformOrLater(null));
- }
-
- [Fact]
- public void IsOSPlatformOrLater_Empty_ThrowsArgumentNullExceptionWithArgumentName()
- {
- Assert.Throws<ArgumentException>("platformName", () => RuntimeInformation.IsOSPlatformOrLater(string.Empty));
- }
-
- [Theory]
- [InlineData("ios")] // missing version number
- [InlineData("ios14")] // ios14.0 is fine, ios14 is not: https://github.com/dotnet/runtime/pull/39005#discussion_r452541491
- [InlineData("ios14.0.0.0.0.0")] // too many numbers
- [InlineData("ios14.0.")] // version should not end with dot (but OS name could potentially end with dot, imagine "NET.")
- [InlineData("numbers1.2inplatformname1.2")] // numbers in platform names are not supported https://github.com/dotnet/runtime/pull/39005#discussion_r452644601
- public void IsOSPlatformOrLater_InvalidVersionNumber_ThrowsArgumentExceptionWithArgumentName(string platformName)
- {
- Assert.Throws<ArgumentException>("platformName", () => RuntimeInformation.IsOSPlatformOrLater(platformName));
- }
-
- [Theory]
- [MemberData(nameof(AllKnownOsPlatforms))]
- public void IsOSPlatformOrLater_ReturnsTrue_ForCurrentOS(OSPlatform osPlatform)
- {
- // IsOSPlatformOrLater("xyz1.2.3.4") running as "xyz1.2.3.4" should return true
-
- bool isCurrentPlatfom = RuntimeInformation.IsOSPlatform(osPlatform);
- Version current = Environment.OSVersion.Version;
-
- Assert.Equal(isCurrentPlatfom, RuntimeInformation.IsOSPlatformOrLater($"{osPlatform}{current}"));
- Assert.Equal(isCurrentPlatfom, RuntimeInformation.IsOSPlatformOrLater($"{osPlatform.ToString().ToLower()}{current}"));
- Assert.Equal(isCurrentPlatfom, RuntimeInformation.IsOSPlatformOrLater($"{osPlatform.ToString().ToUpper()}{current}"));
-
- Assert.Equal(isCurrentPlatfom, RuntimeInformation.IsOSPlatformOrLater(osPlatform, current.Major));
-
- if (current.Minor >= 0)
- {
- Assert.Equal(isCurrentPlatfom, RuntimeInformation.IsOSPlatformOrLater(osPlatform, current.Major, current.Minor));
-
- if (current.Build >= 0)
- {
- Assert.Equal(isCurrentPlatfom, RuntimeInformation.IsOSPlatformOrLater(osPlatform, current.Major, current.Minor, current.Build));
-
- if (current.Revision >= 0)
- {
- Assert.Equal(isCurrentPlatfom, RuntimeInformation.IsOSPlatformOrLater(osPlatform, current.Major, current.Minor, current.Build, current.Revision));
- }
- }
- }
- }
-
- [Theory]
- [MemberData(nameof(AllKnownOsPlatforms))]
- public void IsOSPlatformOrLater_ReturnsFalse_ForNewerVersionOfCurrentOS(OSPlatform osPlatform)
- {
- // IsOSPlatformOrLater("xyz11.0") running as "xyz10.0" should return false
-
- Version currentVersion = Environment.OSVersion.Version;
-
- Version newer = new Version(currentVersion.Major + 1, 0);
- Assert.False(RuntimeInformation.IsOSPlatformOrLater($"{osPlatform}{newer}"));
- Assert.False(RuntimeInformation.IsOSPlatformOrLater($"{osPlatform.ToString().ToLower()}{newer}"));
- Assert.False(RuntimeInformation.IsOSPlatformOrLater($"{osPlatform.ToString().ToUpper()}{newer}"));
- Assert.False(RuntimeInformation.IsOSPlatformOrLater(osPlatform, newer.Major));
-
- newer = new Version(currentVersion.Major, currentVersion.Minor + 1);
- Assert.False(RuntimeInformation.IsOSPlatformOrLater($"{osPlatform}{newer}"));
- Assert.False(RuntimeInformation.IsOSPlatformOrLater(osPlatform, newer.Major, newer.Minor));
-
- newer = new Version(currentVersion.Major, currentVersion.Minor, currentVersion.Build + 1);
- Assert.False(RuntimeInformation.IsOSPlatformOrLater($"{osPlatform}{newer}"));
- Assert.False(RuntimeInformation.IsOSPlatformOrLater(osPlatform, newer.Major, newer.Minor, newer.Build));
-
- newer = new Version(currentVersion.Major, currentVersion.Minor, currentVersion.Build, currentVersion.Revision + 1);
- Assert.False(RuntimeInformation.IsOSPlatformOrLater($"{osPlatform}{newer}"));
- Assert.False(RuntimeInformation.IsOSPlatformOrLater(osPlatform, newer.Major, newer.Minor, newer.Build, newer.Revision));
- }
-
- [Theory]
- [MemberData(nameof(AllKnownOsPlatforms))]
- public void IsOSPlatformOrLater_ReturnsTrue_ForOlderVersionOfCurrentOS(OSPlatform osPlatform)
- {
- // IsOSPlatformOrLater("xyz10.0") running as "xyz11.0" should return true
-
- bool isCurrentPlatfom = RuntimeInformation.IsOSPlatform(osPlatform);
- Version current = Environment.OSVersion.Version;
-
- Version older = new Version(current.Major - 1, 0);
- Assert.Equal(isCurrentPlatfom, RuntimeInformation.IsOSPlatformOrLater($"{osPlatform}{older}"));
- Assert.Equal(isCurrentPlatfom, RuntimeInformation.IsOSPlatformOrLater($"{osPlatform.ToString().ToLower()}{older}"));
- Assert.Equal(isCurrentPlatfom, RuntimeInformation.IsOSPlatformOrLater($"{osPlatform.ToString().ToUpper()}{older}"));
- Assert.Equal(isCurrentPlatfom, RuntimeInformation.IsOSPlatformOrLater(osPlatform, older.Major));
-
- if (current.Minor > 0)
- {
- older = new Version(current.Major, current.Minor - 1);
- Assert.Equal(isCurrentPlatfom, RuntimeInformation.IsOSPlatformOrLater($"{osPlatform}{older}"));
- Assert.Equal(isCurrentPlatfom, RuntimeInformation.IsOSPlatformOrLater(osPlatform, older.Major, older.Minor));
- }
-
- if (current.Build > 0)
- {
- older = new Version(current.Major, current.Minor, current.Build - 1);
- Assert.Equal(isCurrentPlatfom, RuntimeInformation.IsOSPlatformOrLater($"{osPlatform}{older}"));
- Assert.Equal(isCurrentPlatfom, RuntimeInformation.IsOSPlatformOrLater(osPlatform, older.Major, older.Minor, older.Build));
- }
-
- if (current.Revision > 0)
- {
- older = new Version(current.Major, current.Minor, current.Build, current.Revision - 1);
- Assert.Equal(isCurrentPlatfom, RuntimeInformation.IsOSPlatformOrLater($"{osPlatform}{older}"));
- Assert.Equal(isCurrentPlatfom, RuntimeInformation.IsOSPlatformOrLater(osPlatform, older.Major, older.Minor, older.Build, older.Revision));
- }
- }
-
- [Fact]
- public void IsOSPlatformEarlierThan_Null_ThrowsArgumentNullExceptionWithArgumentName()
- {
- Assert.Throws<ArgumentNullException>("platformName", () => RuntimeInformation.IsOSPlatformEarlierThan(null));
- }
-
- [Fact]
- public void IsOSPlatformEarlierThan_Empty_ThrowsArgumentNullExceptionWithArgumentName()
- {
- Assert.Throws<ArgumentException>("platformName", () => RuntimeInformation.IsOSPlatformEarlierThan(string.Empty));
- }
-
- [Theory]
- [InlineData("ios")] // missing version number
- [InlineData("ios14")] // ios14.0 is fine, ios14 is not: https://github.com/dotnet/runtime/pull/39005#discussion_r452541491
- [InlineData("ios14.0.0.0.0.0")] // too many numbers
- [InlineData("ios14.0.")] // version should not end with dot (but OS name could potentially end with dot, imagine "NET.")
- [InlineData("numbers1.2inplatformname1.2")] // numbers in platform names are not supported https://github.com/dotnet/runtime/pull/39005#discussion_r452644601
- public void IsOSPlatformEarlierThan_InvalidVersionNumber_ThrowsArgumentExceptionWithArgumentName(string platformName)
- {
- Assert.Throws<ArgumentException>("platformName", () => RuntimeInformation.IsOSPlatformEarlierThan(platformName));
- }
-
- [Theory]
- [MemberData(nameof(AllKnownOsPlatforms))]
- public void IsOSPlatformEarlierThan_ReturnsFalse_ForCurrentOS(OSPlatform osPlatform)
- {
- // IsOSPlatformEarlierThan("xyz1.2.3.4") running as "xyz1.2.3.4" should return false
-
- Version current = Environment.OSVersion.Version;
-
- Assert.False(RuntimeInformation.IsOSPlatformEarlierThan($"{osPlatform}{current}"));
- Assert.False(RuntimeInformation.IsOSPlatformEarlierThan($"{osPlatform.ToString().ToLower()}{current}"));
- Assert.False(RuntimeInformation.IsOSPlatformEarlierThan($"{osPlatform.ToString().ToUpper()}{current}"));
-
- Assert.False(RuntimeInformation.IsOSPlatformEarlierThan(osPlatform, current.Major));
-
- if (current.Minor >= 0)
- {
- Assert.False(RuntimeInformation.IsOSPlatformEarlierThan(osPlatform, current.Major, current.Minor));
-
- if (current.Build >= 0)
- {
- Assert.False(RuntimeInformation.IsOSPlatformEarlierThan(osPlatform, current.Major, current.Minor, current.Build));
-
- if (current.Revision >= 0)
- {
- Assert.False(RuntimeInformation.IsOSPlatformEarlierThan(osPlatform, current.Major, current.Minor, current.Build, current.Revision));
- }
- }
- }
- }
-
- [Theory]
- [MemberData(nameof(AllKnownOsPlatforms))]
- public void IsOSPlatformEarlierThan_ReturnsTrue_ForNewerVersionOfCurrentOS(OSPlatform osPlatform)
- {
- // IsOSPlatformEarlierThan("xyz11.0") running as "xyz10.0" should return true
-
- bool isCurrentPlatfom = RuntimeInformation.IsOSPlatform(osPlatform);
- Version current = Environment.OSVersion.Version;
-
- Version newer = new Version(current.Major + 1, 0);
- Assert.Equal(isCurrentPlatfom, RuntimeInformation.IsOSPlatformEarlierThan($"{osPlatform}{newer}"));
- Assert.Equal(isCurrentPlatfom, RuntimeInformation.IsOSPlatformEarlierThan($"{osPlatform.ToString().ToLower()}{newer}"));
- Assert.Equal(isCurrentPlatfom, RuntimeInformation.IsOSPlatformEarlierThan($"{osPlatform.ToString().ToUpper()}{newer}"));
- Assert.Equal(isCurrentPlatfom, RuntimeInformation.IsOSPlatformEarlierThan(osPlatform, newer.Major));
-
- newer = new Version(current.Major, current.Minor + 1);
- Assert.Equal(isCurrentPlatfom, RuntimeInformation.IsOSPlatformEarlierThan($"{osPlatform}{newer}"));
- Assert.Equal(isCurrentPlatfom, RuntimeInformation.IsOSPlatformEarlierThan(osPlatform, newer.Major, newer.Minor));
-
- newer = new Version(current.Major, current.Minor, current.Build + 1);
- Assert.Equal(isCurrentPlatfom, RuntimeInformation.IsOSPlatformEarlierThan($"{osPlatform}{newer}"));
- Assert.Equal(isCurrentPlatfom, RuntimeInformation.IsOSPlatformEarlierThan(osPlatform, newer.Major, newer.Minor, newer.Build));
-
- newer = new Version(current.Major, current.Minor, current.Build, current.Revision + 1);
- Assert.Equal(isCurrentPlatfom, RuntimeInformation.IsOSPlatformEarlierThan($"{osPlatform}{newer}"));
- Assert.Equal(isCurrentPlatfom, RuntimeInformation.IsOSPlatformEarlierThan(osPlatform, newer.Major, newer.Minor, newer.Build, newer.Revision));
- }
-
- [Theory]
- [MemberData(nameof(AllKnownOsPlatforms))]
- public void IsOSPlatformEarlierThan_ReturnsFalse_ForOlderVersionOfCurrentOS(OSPlatform osPlatform)
- {
- // IsOSPlatformEarlierThan("xyz10.0") running as "xyz11.0" should return false
-
- Version current = Environment.OSVersion.Version;
-
- Version older = new Version(current.Major - 1, 0);
- Assert.False(RuntimeInformation.IsOSPlatformEarlierThan($"{osPlatform}{older}"));
- Assert.False(RuntimeInformation.IsOSPlatformEarlierThan($"{osPlatform.ToString().ToLower()}{older}"));
- Assert.False(RuntimeInformation.IsOSPlatformEarlierThan($"{osPlatform.ToString().ToUpper()}{older}"));
- Assert.False(RuntimeInformation.IsOSPlatformEarlierThan(osPlatform, older.Major));
-
- if (current.Minor > 0)
- {
- older = new Version(current.Major, current.Minor - 1);
- Assert.False(RuntimeInformation.IsOSPlatformEarlierThan($"{osPlatform}{older}"));
- Assert.False(RuntimeInformation.IsOSPlatformEarlierThan(osPlatform, older.Major, older.Minor));
- }
-
- if (current.Build > 0)
- {
- older = new Version(current.Major, current.Minor, current.Build - 1);
- Assert.False(RuntimeInformation.IsOSPlatformEarlierThan($"{osPlatform}{older}"));
- Assert.False(RuntimeInformation.IsOSPlatformEarlierThan(osPlatform, older.Major, older.Minor, older.Build));
- }
-
- if (current.Revision > 0)
- {
- older = new Version(current.Major, current.Minor, current.Build, current.Revision - 1);
- Assert.False(RuntimeInformation.IsOSPlatformEarlierThan($"{osPlatform}{older}"));
- Assert.False(RuntimeInformation.IsOSPlatformEarlierThan(osPlatform, older.Major, older.Minor, older.Build, older.Revision));
- }
- }
- }
-}
<Compile Include="CheckPlatformTests.cs" />
<Compile Include="RuntimeIdentifierTests.cs" />
<Compile Include="DescriptionNameTests.cs" />
- <Compile Include="PlatformVersionTests.cs" />
<Compile Include="$(CommonPath)Interop\Linux\cgroups\Interop.cgroups.cs"
Link="Common\Interop\Linux\Interop.cgroups.cs" />
</ItemGroup>