Skip to content

Stange Behavior When using MatrixDataSource with Enum type #3320

@MrAnyone

Description

@MrAnyone

Hello !

I'm facing a weird issue using MatrixDataSource and Enum, here is the test snippet to reproduice the issue :

public class MyTestClass
{
    // Define the enums used in the tests
    public enum EnumA
    {
        AValueFirst = 1,
        AValueSecond = 2
    }

    public enum EnumB
    {
        BValueFirst = 0,
        BValueSecond = 2,
        BValueThird = 12,
        BValueForth = 45
    }

    // Case 1: Exclusion using enum values directly
    // Exclusion works correctly
    [Test]
    [MatrixDataSource]
    [MatrixExclusion(EnumA.AValueFirst, EnumB.BValueSecond)]
    public async Task SecondTest(EnumA value1, EnumB value2)
    {
        await Assert.That((value1, value2)).IsNotEqualTo((EnumA.AValueFirst, EnumB.BValueSecond));
        Console.WriteLine("Values => {0}, {1}", value1, value2);
    }

    // Case 2: Exclusion using enum values cast to int
    // Exclusion works correctly
    [Test]
    [MatrixDataSource]
    [MatrixExclusion((int)EnumA.AValueFirst, (int)EnumB.BValueSecond)]
    public async Task ThirdTest(EnumA value1, EnumB value2)
    {
        await Assert.That((value1, value2)).IsNotEqualTo((EnumA.AValueFirst, EnumB.BValueSecond));
        Console.WriteLine("Values => {0}, {1}", value1, value2);
    }

    // Case 3: Using Matrix to specify value combinations
    // Exclusion doesn't work
    [Test]
    [MatrixDataSource]
    [MatrixExclusion(EnumA.AValueFirst, EnumB.BValueSecond)]
    public async Task ForthTest(
        [Matrix(EnumA.AValueFirst, EnumA.AValueSecond)] EnumA value1,
        [Matrix(EnumB.BValueFirst, EnumB.BValueSecond)] EnumB value2)
    {
        await Assert.That((value1, value2)).IsNotEqualTo((EnumA.AValueFirst, EnumB.BValueSecond));
        Console.WriteLine("Value => {0}, {1}", value1, value2);
    }

    // Case 4: Matrix with enum values, exclusion cast to int
    // Exclusion doesn't work
    [Test]
    [MatrixDataSource]
    [MatrixExclusion((int)EnumA.AValueFirst, (int)EnumB.BValueSecond)]
    public async Task FifthTest(
        [Matrix(EnumA.AValueFirst, EnumA.AValueSecond)] EnumA value1,
        [Matrix(EnumB.BValueFirst, EnumB.BValueSecond)] EnumB value2)
    {
        await Assert.That((value1, value2)).IsNotEqualTo((EnumA.AValueFirst, EnumB.BValueSecond));
        Console.WriteLine("Value => {0}, {1}", value1, value2);
    }

    // Case 5: Matrix and exclusion both using int casts
    // Exclusion works as expected
    [Test]
    [MatrixDataSource]
    [MatrixExclusion((int)EnumA.AValueFirst, (int)EnumB.BValueSecond)]
    public async Task SixthTest(
        [Matrix((int)EnumA.AValueFirst, (int)EnumA.AValueSecond)] EnumA value1,
        [Matrix((int)EnumB.BValueFirst, (int)EnumB.BValueSecond)] EnumB value2)
    {
        await Assert.That((value1, value2)).IsNotEqualTo((EnumA.AValueFirst, EnumB.BValueSecond));
        Console.WriteLine("Value => {0}, {1}", value1, value2);
    }
}

am I doing something wrong ?

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions