File: System\Windows\Forms\AbstractButtonBaseTests.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.
 
using System.Drawing;
 
namespace System.Windows.Forms.Tests;
 
public abstract class AbstractButtonBaseTests
{
    protected abstract ButtonBase CreateButton();
 
    protected void ButtonBase_FlatStyle_ValidFlatButtonBorder(int borderSize)
    {
        using var control = CreateButton();
        control.FlatStyle = FlatStyle.Flat;
 
        control.Invoking(y => y.FlatAppearance.BorderColor = Color.Transparent)
            .Should().Throw<NotSupportedException>();
 
        if (borderSize < 0)
        {
            control.Invoking(y => y.FlatAppearance.BorderSize = borderSize)
                .Should().Throw<ArgumentOutOfRangeException>();
        }
        else
        {
            control.FlatAppearance.BorderSize = borderSize;
            control.FlatAppearance.BorderSize.Should().Be(borderSize);
        }
    }
 
    protected void ButtonBase_FlatStyle_ProperFlatButtonColor(int red, int green, int blue)
    {
        Color expectedColor = Color.FromArgb(red, green, blue);
 
        using var control = CreateButton();
        control.FlatStyle = FlatStyle.Flat;
        control.BackColor = expectedColor;
 
        control.FlatAppearance.CheckedBackColor = expectedColor;
        control.FlatAppearance.BorderColor = expectedColor;
 
        control.BackColor.Should().Be(expectedColor);
        control.FlatAppearance.BorderColor.Should().Be(expectedColor);
        control.FlatAppearance.CheckedBackColor.Should().Be(expectedColor);
    }
 
    protected virtual void ButtonBase_OverChangeRectangle_Get(Appearance appearance, FlatStyle flatStyle)
    {
        using dynamic control = CreateButton();
 
        if (control is null)
        {
            return;
        }
 
        control.Appearance = appearance;
        control.FlatStyle = flatStyle;
 
        Rectangle overChangeRectangle;
 
        // ButtonBase.Adapter prohibits this
        if (appearance == Appearance.Normal
            && (flatStyle != FlatStyle.Standard
                && flatStyle != FlatStyle.Popup
                && flatStyle != FlatStyle.Flat))
        {
            // Compiler requires casting lambda expression to delegate or expression
            // before using it as a dynamically dispatched operation
            Action act = () => overChangeRectangle = control.OverChangeRectangle;
            act.Should().Throw<Exception>();
 
            return;
        }
 
        overChangeRectangle = control.OverChangeRectangle;
 
        if (control.FlatStyle == FlatStyle.Standard)
        {
            overChangeRectangle.Should().Be(new Rectangle(-1, -1, 1, 1));
        }
 
        if (control.Appearance == Appearance.Button)
        {
            if (control.FlatStyle != FlatStyle.Standard)
            {
                overChangeRectangle.Should().Be(control.ClientRectangle);
            }
        }
        else if (control.FlatStyle != FlatStyle.Standard)
        {
            overChangeRectangle.Should().Be(control.Adapter.CommonLayout().Layout().CheckBounds);
        }
    }
}