Skip to content

Commit

Permalink
Add code coverage for DataGridViewButtonColumn (#12814)
Browse files Browse the repository at this point in the history
related #10453

Proposed changes
Add unit tests for DataGridViewButtonColumn.cs to test its methods & properties
  • Loading branch information
Zheng-Li01 authored Jan 22, 2025
1 parent 1142ab5 commit c3a752b
Showing 1 changed file with 205 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,205 @@
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.

#nullable enable

using System.Drawing;

namespace System.Windows.Forms.Tests;

public class DataGridViewButtonColumnTests : IDisposable
{
private readonly DataGridView _dataGridView;
private readonly DataGridViewButtonColumn _column;

public DataGridViewButtonColumnTests()
{
_dataGridView = new();
_column = new();
}

public void Dispose()
{
_dataGridView?.Dispose();
_column?.Dispose();
}

[Fact]
public void DataGridViewButtonColumn_FlatStyle_GetSet_ReturnsExpected()
{
_column.FlatStyle.Should().Be(FlatStyle.Standard);

_column.FlatStyle = FlatStyle.Flat;
_column.FlatStyle.Should().Be(FlatStyle.Flat);

_column.FlatStyle = FlatStyle.Popup;
_column.FlatStyle.Should().Be(FlatStyle.Popup);

_column.FlatStyle = FlatStyle.System;
_column.FlatStyle.Should().Be(FlatStyle.System);
}

[Fact]
public void DataGridViewButtonColumn_FlatStyle_SetWithDataGridView_UpdatesRows()
{
_dataGridView.Columns.Add(_column);

using DataGridViewRow row = new();
row.Cells.Add(new DataGridViewButtonCell());
_dataGridView.Rows.Add(row);

_column.FlatStyle = FlatStyle.Flat;
((DataGridViewButtonCell)row.Cells[0]).FlatStyle.Should().Be(FlatStyle.Flat);

_column.FlatStyle = FlatStyle.Popup;
((DataGridViewButtonCell)row.Cells[0]).FlatStyle.Should().Be(FlatStyle.Popup);
}

[Fact]
public void DataGridViewButtonColumn_FlatStyle_SetNullButtonCellTemplate_ThrowsInvalidOperationException()
{
_column.GetType().GetProperty("CellTemplate")!.SetValue(_column, null);

Action action = () => { var flatStyle = _column.FlatStyle; };
action.Should().Throw<InvalidOperationException>();
}

[Fact]
public void DataGridViewButtonColumn_Text_Set_GetReturnsExpected()
{
_column.Text.Should().BeNull();

_column.Text = "Test";
_column.Text.Should().Be("Test");
}

[Fact]
public void DataGridViewButtonColumn_UseColumnTextForButtonValue_Set_GetReturnsExpected()
{
_column.UseColumnTextForButtonValue.Should().BeFalse();

_column.UseColumnTextForButtonValue = true;
_column.UseColumnTextForButtonValue.Should().BeTrue();
}

[Fact]
public void DataGridViewButtonColumn_UseColumnTextForButtonValue_SetWithDataGridView_UpdatesRows()
{
_dataGridView.Columns.Add(_column);

using DataGridViewRow row = new();
using DataGridViewButtonCell cell = new();
row.Cells.Add(cell);
_dataGridView.Rows.Add(row);

((DataGridViewButtonCell)row.Cells[0]).UseColumnTextForButtonValue.Should().BeFalse();

_column.UseColumnTextForButtonValue = true;
((DataGridViewButtonCell)row.Cells[0]).UseColumnTextForButtonValue.Should().BeTrue();
}

[Fact]
public void DataGridViewButtonColumn_UseColumnTextForButtonValue_SetNullButtonCellTemplate_ThrowsInvalidOperationException()
{
_column.GetType().GetProperty("CellTemplate")!.SetValue(_column, null);

Action action = () => { bool useColumnTextForButtonValue = _column.UseColumnTextForButtonValue; };
action.Should().Throw<InvalidOperationException>();
}

[Fact]
public void DataGridViewButtonColumn_Clone_ReturnsExpected()
{
_column.Text = "Test";
_column.FlatStyle = FlatStyle.Flat;
_column.UseColumnTextForButtonValue = true;

var clone = (DataGridViewButtonColumn)_column.Clone();
clone.Text.Should().Be("Test");
clone.FlatStyle.Should().Be(FlatStyle.Flat);
clone.UseColumnTextForButtonValue.Should().BeTrue();
}

[Fact]
public void DataGridViewButtonColumn_Clone_WithDifferentType_ReturnsExpected()
{
CustomDataGridViewButtonColumn customColumn = new()
{
Text = "Test",
FlatStyle = FlatStyle.Flat,
UseColumnTextForButtonValue = true
};

var clone = (CustomDataGridViewButtonColumn)customColumn.Clone();
clone.Text.Should().Be("Test");
clone.FlatStyle.Should().Be(FlatStyle.Flat);
clone.UseColumnTextForButtonValue.Should().BeTrue();
}

[Fact]
public void DataGridViewButtonColumn_ToString_ReturnsExpected()
{
_column.ToString().Should().Be("DataGridViewButtonColumn { Name=, Index=-1 }");

_column.Name = "TestColumn";
_column.ToString().Should().Be("DataGridViewButtonColumn { Name=TestColumn, Index=-1 }");
}

[Fact]
public void DataGridViewButtonColumn_DefaultCellStyle_GetSet_ReturnsExpected()
{
DataGridViewCellStyle style = _column.DefaultCellStyle;
style.Alignment.Should().Be(DataGridViewContentAlignment.MiddleCenter);

DataGridViewCellStyle newStyle = new DataGridViewCellStyle { Alignment = DataGridViewContentAlignment.BottomRight };
_column.DefaultCellStyle = newStyle;
_column.DefaultCellStyle.Alignment.Should().Be(DataGridViewContentAlignment.BottomRight);
}

[Fact]
public void DataGridViewButtonColumn_CellTemplate_SetInvalidType_ThrowsInvalidCastException()
{
Action action = () => _column.CellTemplate = new DataGridViewTextBoxCell();
action.Should().Throw<InvalidCastException>();
}

[Fact]
public void DataGridViewButtonColumn_CellTemplate_SetValidType_GetReturnsExpected()
{
using DataGridViewButtonCell cell = new();
_column.CellTemplate = cell;
_column.CellTemplate.Should().Be(cell);
}

[Fact]
public void DataGridViewButtonColumn_Clone_CopiesProperties()
{
_column.Text = "Test";
_column.FlatStyle = FlatStyle.Flat;
_column.UseColumnTextForButtonValue = true;
_column.DefaultCellStyle = new DataGridViewCellStyle { Alignment = DataGridViewContentAlignment.BottomRight };

var clone = (DataGridViewButtonColumn)_column.Clone();
clone.Text.Should().Be("Test");
clone.FlatStyle.Should().Be(FlatStyle.Flat);
clone.UseColumnTextForButtonValue.Should().BeTrue();
clone.DefaultCellStyle.Alignment.Should().Be(DataGridViewContentAlignment.BottomRight);
}

[Fact]
public void DataGridViewButtonColumn_ShouldSerializeDefaultCellStyle_ReturnsExpected()
{
dynamic accessor = _column.TestAccessor().Dynamic;

bool result = accessor.ShouldSerializeDefaultCellStyle();
result.Should().BeFalse();

_column.DefaultCellStyle.BackColor = Color.Red;
result = accessor.ShouldSerializeDefaultCellStyle();
result.Should().BeTrue();
}

private class CustomDataGridViewButtonColumn : DataGridViewButtonColumn
{
}
}

0 comments on commit c3a752b

Please sign in to comment.