File: System\Windows\Forms\PowerStatusTests.cs
Web Access
Project: src\src\System.Windows.Forms\tests\UnitTests\System.Windows.Forms.Tests.csproj (System.Windows.Forms.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.Windows.Forms.Tests;
 
// NB: doesn't require thread affinity
public class PowerStatusTests
{
    [Fact]
    public void PowerStatus_BatteryChargeStatus_Get_ReturnsExpected()
    {
        PowerStatus status = SystemInformation.PowerStatus;
 
        // try a valid combination
        // an edge-case can surface on laptops that are not permanently connected to power
        // e.g. a charing laptop in a high performance mode would be HIGH | CHARGING
        Assert.True(EnumIsDefined(status.BatteryChargeStatus));
 
        // try an invalid (as of time of writing) combination
        Assert.False(EnumIsDefined((BatteryChargeStatus)67));
 
        static bool EnumIsDefined(BatteryChargeStatus value)
        {
            // BatteryChargeStatus.Unknown == 1111_1111, OR'ing anything with it won't change the result
            // and thus won't catch invalid combinations, so we need to exclude if from further consideration
 
            if (value == BatteryChargeStatus.Unknown)
            {
                return true;
            }
 
            var values = Enum.GetValues(typeof(BatteryChargeStatus))
                .OfType<BatteryChargeStatus>()
                .Where(v => v != BatteryChargeStatus.Unknown)
                .Aggregate((e1, e2) => (e1 | e2));
 
            return (values & value) == value;
        }
    }
 
    [Fact]
    public void PowerStatus_BatteryFullLifetime_Get_ReturnsExpected()
    {
        PowerStatus status = SystemInformation.PowerStatus;
        Assert.True(status.BatteryFullLifetime >= -1);
    }
 
    [Fact]
    public void PowerStatus_BatteryLifePercent_Get_ReturnsExpected()
    {
        PowerStatus status = SystemInformation.PowerStatus;
        float value = status.BatteryLifePercent;
        Assert.True(value is >= 0 and <= 100 or 255);
    }
 
    [Fact]
    public void PowerStatus_BatteryLifeRemaining_Get_ReturnsExpected()
    {
        PowerStatus status = SystemInformation.PowerStatus;
        Assert.True(status.BatteryLifeRemaining >= -1);
    }
 
    [Fact]
    public void PowerStatus_PowerLineStatus_Get_ReturnsExpected()
    {
        PowerStatus status = SystemInformation.PowerStatus;
        Assert.True(Enum.IsDefined(status.PowerLineStatus));
    }
}