File: System\EnumExtensionsTests.cs
Web Access
Project: src\src\test\unit\Microsoft.Private.Windows.Polyfills\Microsoft.Private.Windows.Polyfills.Tests.csproj (Microsoft.Private.Windows.Polyfills.Tests)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
 
namespace System.Tests;
 
public class EnumExtensionsTests
{
    private enum TestEnum
    {
        None = 0,
        First = 1,
        Second = 2,
        Third = 3,
    }
 
    [Flags]
    private enum TestFlagsEnum
    {
        None = 0,
        A = 1,
        B = 2,
        C = 4,
        All = A | B | C,
    }
 
    [Fact]
    public void IsDefined_DefinedValue_ReturnsTrue()
    {
        Enum.IsDefined(TestEnum.First).Should().BeTrue();
    }
 
    [Fact]
    public void IsDefined_UndefinedValue_ReturnsFalse()
    {
        Enum.IsDefined((TestEnum)99).Should().BeFalse();
    }
 
    [Fact]
    public void IsDefined_Zero_DefinedAsNone_ReturnsTrue()
    {
        Enum.IsDefined(TestEnum.None).Should().BeTrue();
    }
 
    [Fact]
    public void IsDefined_FlagsEnum_DefinedSingleValue_ReturnsTrue()
    {
        Enum.IsDefined(TestFlagsEnum.A).Should().BeTrue();
    }
 
    [Fact]
    public void IsDefined_FlagsEnum_DefinedCombinedValue_ReturnsTrue()
    {
        Enum.IsDefined(TestFlagsEnum.All).Should().BeTrue();
    }
 
    [Fact]
    public void IsDefined_FlagsEnum_UndefinedCombination_ReturnsFalse()
    {
        // A | B = 3 is not explicitly defined in the enum (All = 7)
        Enum.IsDefined((TestFlagsEnum)(TestFlagsEnum.A | TestFlagsEnum.B)).Should().BeFalse();
    }
 
    [Fact]
    public void IsDefined_AllDefinedValues_ReturnTrue()
    {
        Enum.IsDefined(TestEnum.None).Should().BeTrue();
        Enum.IsDefined(TestEnum.First).Should().BeTrue();
        Enum.IsDefined(TestEnum.Second).Should().BeTrue();
        Enum.IsDefined(TestEnum.Third).Should().BeTrue();
    }
 
    [Fact]
    public void GetValues_ReturnsAllDefinedValues()
    {
        TestEnum[] values = Enum.GetValues<TestEnum>();
        values.Should().BeEquivalentTo([TestEnum.None, TestEnum.First, TestEnum.Second, TestEnum.Third]);
    }
 
    [Fact]
    public void GetValues_FlagsEnum_ReturnsAllDefinedValues()
    {
        TestFlagsEnum[] values = Enum.GetValues<TestFlagsEnum>();
        values.Should().BeEquivalentTo([TestFlagsEnum.None, TestFlagsEnum.A, TestFlagsEnum.B, TestFlagsEnum.C, TestFlagsEnum.All]);
    }
 
    [Fact]
    public void GetValues_ReturnsCorrectOrder()
    {
        TestEnum[] values = Enum.GetValues<TestEnum>();
        values.Should().ContainInOrder(TestEnum.None, TestEnum.First, TestEnum.Second, TestEnum.Third);
    }
}