File: System\Windows\Forms\DataGridViewImageCellTests.cs
Web Access
Project: src\src\test\unit\System.Windows.Forms\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 class DataGridViewImageCellTests : IDisposable
{
    private readonly DataGridViewImageCell _dataGridViewImageCell;
 
    public DataGridViewImageCellTests() => _dataGridViewImageCell = new();
 
    public void Dispose() => _dataGridViewImageCell.Dispose();
 
    [Fact]
    public void Ctor_Default_SetsValueIsIconFalse() =>
        _dataGridViewImageCell.ValueIsIcon.Should().BeFalse();
 
    [WinFormsTheory]
    [BoolData]
    public void Ctor_ValueIsIcon_SetsValueIsIcon(bool valueIsIcon)
    {
        using DataGridViewImageCell dataGridViewImageCell = new(valueIsIcon);
 
        dataGridViewImageCell.ValueIsIcon.Should().Be(valueIsIcon);
    }
 
    [Fact]
    public void DefaultNewRowValue_ReturnsErrorBitmap_WhenValueTypeIsImage()
    {
        _dataGridViewImageCell.ValueType = typeof(Image);
        var value = _dataGridViewImageCell.DefaultNewRowValue;
 
        value.Should().BeSameAs(DataGridViewImageCell.ErrorBitmap);
    }
 
    [WinFormsFact]
    public void DefaultNewRowValue_ReturnsNull_WhenValueTypeIsOther()
    {
        _dataGridViewImageCell.ValueType = typeof(string);
        _dataGridViewImageCell.ValueIsIcon = false;
        object? value = _dataGridViewImageCell.DefaultNewRowValue;
 
        value.Should().BeNull();
    }
 
    [Fact]
    public void EditType_IsAlwaysNull()
    {
        _dataGridViewImageCell.EditType.Should().BeNull();
 
        using DataGridViewImageCell dataGridViewImageCellIcon = new(true);
        dataGridViewImageCellIcon.EditType.Should().BeNull();
    }
 
    [WinFormsFact]
    public void FormattedValueType_ReturnsImage_WhenValueIsIconFalse()
    {
        _dataGridViewImageCell.ValueIsIcon = false;
        _dataGridViewImageCell.FormattedValueType.Should().Be(typeof(Image));
    }
 
    [WinFormsFact]
    public void ValueIsIcon_SetFalse_UpdatesFlag()
    {
        _dataGridViewImageCell.ValueIsIcon = true;
        _dataGridViewImageCell.ValueIsIcon = false;
        _dataGridViewImageCell.ValueIsIcon.Should().BeFalse();
    }
 
    [Fact]
    public void ValueType_GetSet_RoundTrips()
    {
        _dataGridViewImageCell.ValueType = typeof(Image);
        _dataGridViewImageCell.ValueType.Should().Be(typeof(Image));
 
        _dataGridViewImageCell.ValueType = null;
        _dataGridViewImageCell.ValueType.Should().Be(typeof(Image));
 
        _dataGridViewImageCell.ValueIsIcon = true;
        _dataGridViewImageCell.ValueType.Should().Be(typeof(Icon));
    }
 
    [Fact]
    public void ValueType_SetToNull_ResetsValueIsIconToDefault()
    {
        _dataGridViewImageCell.ValueType = typeof(Icon);
        _dataGridViewImageCell.ValueIsIcon.Should().BeTrue();
 
        _dataGridViewImageCell.ValueType = null;
        _dataGridViewImageCell.ValueIsIcon.Should().BeFalse();
    }
 
    [Fact]
    public void GetContentBounds_ReturnsEmpty_WhenDataGridViewIsNull()
    {
        using Graphics g = Graphics.FromImage(new Bitmap(10, 10));
        DataGridViewCellStyle dataGridViewCellStyle = new();
        _dataGridViewImageCell.DataGridView = null;
        Rectangle bounds = (Rectangle)_dataGridViewImageCell.TestAccessor().Dynamic.GetContentBounds(g, dataGridViewCellStyle, 0);
 
        bounds.Should().Be(Rectangle.Empty);
    }
 
    [WinFormsFact]
    public void GetContentBounds_ReturnsEmpty_WhenRowIndexNegative()
    {
        using DataGridView dataGridView = new();
        _dataGridViewImageCell.DataGridView = dataGridView;
        using Graphics g = Graphics.FromImage(new Bitmap(10, 10));
        DataGridViewCellStyle dataGridViewCellStyle = new();
        Rectangle bounds = (Rectangle)_dataGridViewImageCell.TestAccessor().Dynamic.GetContentBounds(g, dataGridViewCellStyle, -1);
 
        bounds.Should().Be(Rectangle.Empty);
    }
 
    [WinFormsFact]
    public void GetContentBounds_ReturnsEmpty_WhenOwningColumnIsNull()
    {
        using DataGridView dataGridView = new();
        dataGridView.Columns.Add(new DataGridViewImageColumn());
        dataGridView.Rows.Add();
        _dataGridViewImageCell.DataGridView = dataGridView;
        _dataGridViewImageCell.OwningColumn = null;
        using Graphics g = Graphics.FromImage(new Bitmap(10, 10));
        DataGridViewCellStyle dataGridViewCellStyle = new();
        Rectangle bounds = (Rectangle)_dataGridViewImageCell.TestAccessor().Dynamic.GetContentBounds(g, dataGridViewCellStyle, 0);
 
        bounds.Should().Be(Rectangle.Empty);
    }
 
    [Fact]
    public void GetErrorIconBounds_ReturnsEmpty_WhenDataGridViewIsNull()
    {
        using Graphics g = Graphics.FromImage(new Bitmap(10, 10));
        DataGridViewCellStyle dataGridViewCellStyle = new();
        Rectangle bounds = (Rectangle)_dataGridViewImageCell.TestAccessor().Dynamic.GetErrorIconBounds(g, dataGridViewCellStyle, 0);
 
        bounds.Should().Be(Rectangle.Empty);
    }
 
    [WinFormsFact]
    public void GetErrorIconBounds_ReturnsEmpty_WhenRowIndexNegative()
    {
        using DataGridView dataGridView = new();
        dataGridView.Columns.Add(new DataGridViewImageColumn());
        dataGridView.Rows.Add();
        _dataGridViewImageCell.DataGridView = dataGridView;
        using Graphics g = Graphics.FromImage(new Bitmap(10, 10));
        DataGridViewCellStyle dataGridViewCellStyle = new();
        Rectangle bounds = (Rectangle)_dataGridViewImageCell.TestAccessor().Dynamic.GetErrorIconBounds(g, dataGridViewCellStyle, -1);
 
        bounds.Should().Be(Rectangle.Empty);
    }
 
    [WinFormsFact]
    public void GetErrorIconBounds_ReturnsEmpty_WhenOwningColumnIsNull()
    {
        using DataGridView dataGridView = new();
        dataGridView.Columns.Add(new DataGridViewImageColumn());
        dataGridView.Rows.Add();
        _dataGridViewImageCell.DataGridView = dataGridView;
        _dataGridViewImageCell.OwningColumn = null;
        using Graphics g = Graphics.FromImage(new Bitmap(10, 10));
        DataGridViewCellStyle dataGridViewCellStyle = new();
        Rectangle bounds = (Rectangle)_dataGridViewImageCell.TestAccessor().Dynamic.GetErrorIconBounds(g, dataGridViewCellStyle, 0);
 
        bounds.Should().Be(Rectangle.Empty);
    }
 
    [WinFormsFact]
    public void GetErrorIconBounds_ReturnsEmpty_WhenShowCellErrorsIsFalse()
    {
        using DataGridView dataGridView = new();
        using DataGridViewImageColumn dataGridViewImageColumn = new();
        dataGridView.Columns.Add(dataGridViewImageColumn);
        dataGridView.Rows.Add();
        dataGridView.ShowCellErrors = false;
        _dataGridViewImageCell.DataGridView = dataGridView;
        using Graphics g = Graphics.FromImage(new Bitmap(10, 10));
        DataGridViewCellStyle dataGridViewCellStyle = new();
        Rectangle bounds = (Rectangle)_dataGridViewImageCell.TestAccessor().Dynamic.GetErrorIconBounds(g, dataGridViewCellStyle, 0);
 
        bounds.Should().Be(Rectangle.Empty);
    }
 
    [WinFormsFact]
    public void GetErrorIconBounds_ReturnsEmpty_WhenErrorTextIsNullOrEmpty()
    {
        using DataGridView dataGridView = new();
        using DataGridViewImageColumn dataGridViewImageColumn = new();
        dataGridView.Columns.Add(dataGridViewImageColumn);
        dataGridView.Rows.Add();
        dataGridView.ShowCellErrors = true;
        _dataGridViewImageCell.DataGridView = dataGridView;
        _dataGridViewImageCell.ErrorText = null;
        _dataGridViewImageCell.OwningColumn = null;
        using Graphics g = Graphics.FromImage(new Bitmap(10, 10));
        DataGridViewCellStyle dataGridViewCellStyle = new();
        Rectangle bounds = (Rectangle)_dataGridViewImageCell.TestAccessor().Dynamic.GetErrorIconBounds(g, dataGridViewCellStyle, 0);
 
        bounds.Should().Be(Rectangle.Empty);
    }
 
    [Fact]
    public void GetPreferredSize_ReturnsMinusOne_WhenDataGridViewIsNull()
    {
        using DataGridViewImageCell dataGridViewImageCell = _dataGridViewImageCell;
        using Graphics g = Graphics.FromImage(new Bitmap(10, 10));
        DataGridViewCellStyle dataGridViewCellStyle = new();
        Size size = (Size)dataGridViewImageCell.TestAccessor().Dynamic.GetPreferredSize(g, dataGridViewCellStyle, 0, new Size(100, 100));
 
        size.Should().Be(new Size(-1, -1));
    }
 
    [Fact]
    public void GetPreferredSize_ThrowsNullReferenceException_WhenCellStyleIsNull()
    {
        using DataGridViewImageCell dataGridViewImageCell = _dataGridViewImageCell;
        using Graphics g = Graphics.FromImage(new Bitmap(10, 10));
        Action action = () => dataGridViewImageCell.TestAccessor().Dynamic.GetPreferredSize(g, null, 0, new Size(100, 100));
 
        action.Should().Throw<NullReferenceException>();
    }
 
    [WinFormsFact]
    public void Paint_DoesNotThrow_WithValidArguments_UsingTestAccessor()
    {
        using DataGridView dataGridView = new();
        using DataGridViewImageColumn dataGridViewImageColumn = new();
        dataGridView.Columns.Add(dataGridViewImageColumn);
        dataGridView.Rows.Add();
        using DataGridViewImageCell dataGridViewImageCell = _dataGridViewImageCell;
        dataGridView.Rows[0].Cells[0] = dataGridViewImageCell;
        using Graphics g = Graphics.FromImage(new Bitmap(10, 10));
        DataGridViewCellStyle dataGridViewCellStyle = new();
        DataGridViewAdvancedBorderStyle borderStyle = new();
 
        Action action = () => dataGridViewImageCell.TestAccessor().Dynamic.Paint(
        g,
        new Rectangle(0, 0, 10, 10),
        new Rectangle(0, 0, 10, 10),
        0,
        DataGridViewElementStates.None,
        null,
        null,
        null,
        dataGridViewCellStyle,
        borderStyle,
        DataGridViewPaintParts.All);
 
        action.Should().NotThrow();
    }
 
    [WinFormsFact]
    public void ColumnIndex_ReturnsExpectedFormat()
    {
        using DataGridView dataGridView = new();
        dataGridView.Columns.Add(new DataGridViewImageColumn());
        dataGridView.Rows.Add();
        using DataGridViewImageCell dataGridViewImageCell = _dataGridViewImageCell;
        dataGridView.Rows[0].Cells[0] = dataGridViewImageCell;
 
        dataGridViewImageCell.ColumnIndex.Should().Be(0);
    }
}