Search code examples
c#nunitenum-flags

How do you test an enum flag combination?


Let’s say I have an enum flag:

[Flags]
public enum ColorType
{
    None = 0,
    Red = 1 << 0,
    White = 1<<1,
    Yellow = 1 << 2,
    Blue = 1 << 3,
    All = Red | White | Yellow | Blue
}

I have the below function, which parameter is a combination of flag, such as DoSomething( ColorType.Blue | ColorType.Yellow ).

public void DoSomethingr(ColorType theColorTypes)
{
        if (theColorTypes.HasFlag(All)) Foo1();
        if (theColorTypes.HasFlag(White) && theColorTypes.HasFlag(Red) )  Foo2();
        if (!theColorTypes.HasFlag(Blue)) Foo3();
        . . . 
}

Is there an easy way to test all of possible flag bitwise combination?

[Test] 
public void Test1(ColorType.Red | ColorType.Yellow | ColorType.White) 

[Test]
public void Test1(ColorType.Red | ColorType.Yellow | ColorType.white | ColorType.Blue) 

Thanks


Solution

  • Loop over all the possible values and put it in a TestCaseSource to generate a different test for each enumeration value:

    public IEnumerable<ColorType> TestCaseSource 
    { 
        get
        {
            int start = (int)ColorType.None;
            int count = (int)ColorType.All - start + 1;
            return Enumerable.Range(start, count).Select(i => (ColorType)i); 
        } 
    }
    
    [TestCaseSource("TestCaseSource")]
    public void Test1(ColorType colorType)
    {
        // whatever your test is
    }