File: System\Windows\MessageBox.Tests.cs
Web Access
Project: src\src\Microsoft.DotNet.Wpf\tests\UnitTests\PresentationFramework.Tests\PresentationFramework.Tests.csproj (PresentationFramework.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.ComponentModel;
using System.Windows.Interop;
 
namespace System.Windows;
 
public sealed class MessageBoxTests
{
    // MessageBoxButton range is from 0x00000000 to 0x00000006
    // Values outside are illegal.
    [WpfTheory]
    [InlineData(0xFFFFFFFF)]
    [InlineData(0x00000007)]
    public void Show_InvalidMessageBoxButton_ThrowsInvalidEnumArgumentException(uint invalidButton)
    {
        InvalidEnumArgumentException exception = Assert.Throws<InvalidEnumArgumentException>(() =>
            MessageBox.Show("Test Message", "Test Caption", (MessageBoxButton)invalidButton));
        Assert.Contains("button", exception.Message);
    }
 
    // MessageBoxButton range is from 0x00000000 to 0x00000006
    // Values outside are illegal.
    [WpfTheory]
    [InlineData(0xFFFFFFFF)]
    [InlineData(0x00000007)]
    public void Show_WithOwner_InvalidMessageBoxButton_ThrowsInvalidEnumArgumentException(uint invalidButton)
    {
        InvalidEnumArgumentException exception = Assert.Throws<InvalidEnumArgumentException>(() =>
            MessageBox.Show(new Window(), "Test Message", "Test Caption", (MessageBoxButton)invalidButton));
        Assert.Contains("button", exception.Message);
    }
 
    // MessageBoxResult range is from 0 to 11 with 8 and 9 not used.
    // Values outside are illegal as well as values 8 and 9.
    [WpfTheory]
    [InlineData(-1)]    // Just outside enum range
    [InlineData(8)]     // Not defined - hole in enum range
    [InlineData(9)]     // Not defined - hole in enum range
    [InlineData(12)]    // Just outside enum range
    public void Show_InvalidMessageBoxResult_ThrowsInvalidEnumArgumentException(int invalidResult)
    {
        InvalidEnumArgumentException exception = Assert.Throws<InvalidEnumArgumentException>(() =>
            MessageBox.Show("Test Message", "Test Caption", MessageBoxButton.OK, MessageBoxImage.None, (MessageBoxResult)invalidResult));
        Assert.Contains("defaultResult", exception.Message);
    }
 
    // MessageBoxResult range is from 0 to 11 with 8 and 9 not used.
    // Values outside are illegal as well as values 8 and 9.
    [WpfTheory]
    [InlineData(-1)]    // Just outside enum range
    [InlineData(8)]     // Not defined - hole in enum range
    [InlineData(9)]     // Not defined - hole in enum range
    [InlineData(12)]    // Just outside enum range
    public void Show_WithOwner_InvalidMessageBoxResult_ThrowsInvalidEnumArgumentException(int invalidResult)
    {
        InvalidEnumArgumentException exception = Assert.Throws<InvalidEnumArgumentException>(() =>
            MessageBox.Show(new Window(), "Test Message", "Test Caption", MessageBoxButton.OK, MessageBoxImage.None, (MessageBoxResult)invalidResult));
        Assert.Contains("defaultResult", exception.Message);
    }
 
    // MessageBoxImage values are 0x00000000, 0x00000010, 0x00000020, 0x00000030, 0x00000040
    // Any other value is illegal.
    [WpfTheory]
    [InlineData(0xFFFFFFFF)]
    [InlineData(0x00000001)]
    [InlineData(0x0000000F)]
    [InlineData(0x00000011)]
    [InlineData(0x0000001F)]
    [InlineData(0x00000021)]
    [InlineData(0x0000002F)]
    [InlineData(0x00000031)]
    [InlineData(0x0000003F)]
    [InlineData(0x00000041)]
    [InlineData(0x0000004F)]
    public void Show_InvalidMessageBoxImage_ThrowsInvalidEnumArgumentException(uint invalidImage)
    {
        InvalidEnumArgumentException exception = Assert.Throws<InvalidEnumArgumentException>(() =>
            MessageBox.Show("Test Message", "Test Caption", MessageBoxButton.OK, (MessageBoxImage)invalidImage, MessageBoxResult.None));
        Assert.Contains("icon", exception.Message);
    }
 
    // MessageBoxImage values are 0x00000000, 0x00000010, 0x00000020, 0x00000030, 0x00000040
    // Any other value is illegal.
    [WpfTheory]
    [InlineData(0xFFFFFFFF)]
    [InlineData(0x00000001)]
    [InlineData(0x0000000F)]
    [InlineData(0x00000011)]
    [InlineData(0x0000001F)]
    [InlineData(0x00000021)]
    [InlineData(0x0000002F)]
    [InlineData(0x00000031)]
    [InlineData(0x0000003F)]
    [InlineData(0x00000041)]
    [InlineData(0x0000004F)]
    public void Show_WithOwner_InvalidMessageBoxImage_ThrowsInvalidEnumArgumentException(uint invalidImage)
    {
        InvalidEnumArgumentException exception = Assert.Throws<InvalidEnumArgumentException>(() =>
            MessageBox.Show(new Window(), "Test Message", "Test Caption", MessageBoxButton.OK, (MessageBoxImage)invalidImage, MessageBoxResult.None));
        Assert.Contains("icon", exception.Message);
    }
 
    // MessageBoxOptions values are 0x00000000, 0x00020000, 0x00080000, 0x00100000, 0x00200000
    [WpfTheory]
    [InlineData(0xFFFFFFFF)]
    [InlineData(0x00000001)]
    [InlineData(0x0001FFFF)]
    [InlineData(0x00020001)]
    [InlineData(0x0007FFFF)]
    [InlineData(0x00080001)]
    [InlineData(0x000FFFFF)]
    [InlineData(0x00100001)]
    [InlineData(0x001FFFFF)]
    [InlineData(0x00200001)]
    public void Show_InvalidMessageBoxOptions_ThrowsInvalidEnumArgumentException(uint invalidOptions)
    {
        InvalidEnumArgumentException exception = Assert.Throws<InvalidEnumArgumentException>(() =>
            MessageBox.Show("Test Message", "Test Caption", MessageBoxButton.OK, MessageBoxImage.None, MessageBoxResult.None, (MessageBoxOptions)invalidOptions));
        Assert.Contains("options", exception.Message);
    }
 
    // MessageBoxOptions values are 0x00000000, 0x00020000, 0x00080000, 0x00100000, 0x00200000
    [WpfTheory]
    [InlineData(0xFFFFFFFF)]
    [InlineData(0x00000001)]
    [InlineData(0x0001FFFF)]
    [InlineData(0x00020001)]
    [InlineData(0x0007FFFF)]
    [InlineData(0x00080001)]
    [InlineData(0x000FFFFF)]
    [InlineData(0x00100001)]
    [InlineData(0x001FFFFF)]
    [InlineData(0x00200001)]
    public void Show_WithOwner_InvalidMessageBoxOptions_ThrowsInvalidEnumArgumentException(uint invalidOptions)
    {
        var exception = Assert.Throws<InvalidEnumArgumentException>(() =>
            MessageBox.Show(new Window(), "Test Message", "Test Caption", MessageBoxButton.OK, MessageBoxImage.None, MessageBoxResult.None, (MessageBoxOptions)invalidOptions));
        Assert.Contains("options", exception.Message);
    }
 
    // For either of these two MessageBoxOptions values, MessageBox.ShowCore throws an ArgumentException if the
    // owner window handle is non-zero (!= IntPtr.Zero).
    [WpfTheory]
    [InlineData(MessageBoxOptions.ServiceNotification)]
    [InlineData(MessageBoxOptions.DefaultDesktopOnly)]
    [InlineData(MessageBoxOptions.DefaultDesktopOnly | MessageBoxOptions.RightAlign)]
    [InlineData(MessageBoxOptions.ServiceNotification | MessageBoxOptions.RightAlign)]
    public void Show_WithOwner_WithSpecificMessageBoxOptions_ThrowsArgumentException(MessageBoxOptions messageBoxOptions)
    {
        // Arrange
        Window owner = new Window();
        WindowInteropHelper windowInteropHelper = new WindowInteropHelper(owner);
        windowInteropHelper.EnsureHandle();
 
        // Act & Assert
        Assert.Throws<ArgumentException>(() =>
            MessageBox.Show(owner, "Test Message", "Test Caption", MessageBoxButton.OK, MessageBoxImage.None, MessageBoxResult.None, messageBoxOptions));
    }
}