forked from dotnet/winforms
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Write unit test for DataGridViewAddColumnDialog (dotnet#12662)
Related dotnet#10773 Proposed changes Add unit test DataGridViewAddColumnDialogTests.cs for public properties and method of the DataGridViewAddColumnDialog. Enable nullability in DataGridViewAddColumnDialogTests.cs.
- Loading branch information
Showing
1 changed file
with
139 additions
and
0 deletions.
There are no files selected for viewing
139 changes: 139 additions & 0 deletions
139
...ms.Design/tests/UnitTests/System/Windows/Forms/Design/DataGridViewAddColumnDialogTests.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,139 @@ | ||
// 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.ComponentModel; | ||
using System.ComponentModel.Design; | ||
using System.ComponentModel.Design.Serialization; | ||
using System.Drawing; | ||
using System.Reflection; | ||
using Moq; | ||
|
||
namespace System.Windows.Forms.Design.Tests; | ||
|
||
public sealed class DataGridViewAddColumnDialogTests : IDisposable | ||
{ | ||
private readonly DataGridView _dataGridView = new(); | ||
private readonly Container _container = new(); | ||
|
||
public void Dispose() | ||
{ | ||
_dataGridView.Dispose(); | ||
_container.Dispose(); | ||
} | ||
|
||
[Fact] | ||
public void Constructor_ShouldInitializeFields() | ||
{ | ||
DataGridViewColumnCollection columns = _dataGridView.Columns; | ||
|
||
Mock<ISite> mockSite = new(); | ||
Mock<IUIService> mockUIService = new(); | ||
using Font expectedFont = new("Arial", 12); | ||
|
||
mockUIService.Setup(ui => ui.Styles["DialogFont"]).Returns(expectedFont); | ||
mockSite.Setup(site => site.GetService(typeof(IUIService))).Returns(mockUIService.Object); | ||
_dataGridView.Site = mockSite.Object; | ||
|
||
using DataGridViewAddColumnDialog dialog = new(columns, _dataGridView); | ||
|
||
DataGridViewColumnCollection dataGridViewColumns = (DataGridViewColumnCollection)dialog.TestAccessor().Dynamic._dataGridViewColumns; | ||
using DataGridView liveDataGridView = (DataGridView)dialog.TestAccessor().Dynamic._liveDataGridView; | ||
|
||
dialog.Should().NotBeNull(); | ||
dataGridViewColumns.Should().BeSameAs(columns); | ||
liveDataGridView.Should().BeSameAs(_dataGridView); | ||
dialog.Font.Should().Be(expectedFont); | ||
} | ||
|
||
[WinFormsTheory] | ||
[InlineData(typeof(NoDesignerAttributeClass), null, null)] | ||
[InlineData(typeof(WithDesignerAttributeClass), typeof(MockComponentDesigner), true)] | ||
[InlineData(typeof(WithDesignerAttributeClass), typeof(MockComponentDesigner), false)] | ||
public void GetComponentDesignerForType_ShouldReturnExpectedResult(Type type, Type? expectedDesignerType, bool? useTypeResolutionService) | ||
{ | ||
ITypeResolutionService? typeResolutionService = useTypeResolutionService.HasValue && useTypeResolutionService.Value ? new MockTypeResolutionService() : null; | ||
|
||
using ComponentDesigner? result = DataGridViewAddColumnDialog.GetComponentDesignerForType(typeResolutionService, type); | ||
|
||
if (expectedDesignerType is null) | ||
{ | ||
result.Should().BeNull(); | ||
} | ||
else | ||
{ | ||
result.Should().NotBeNull(); | ||
result.Should().BeOfType(expectedDesignerType); | ||
} | ||
} | ||
|
||
private class NoDesignerAttributeClass | ||
{ | ||
} | ||
|
||
[Designer(typeof(MockComponentDesigner))] | ||
private class WithDesignerAttributeClass | ||
{ | ||
} | ||
|
||
private class MockComponentDesigner : ComponentDesigner | ||
{ | ||
} | ||
|
||
private class MockTypeResolutionService : ITypeResolutionService | ||
{ | ||
public Assembly GetAssembly(AssemblyName name) => throw new NotImplementedException(); | ||
public Assembly GetAssembly(AssemblyName name, bool throwOnError) => throw new NotImplementedException(); | ||
public string GetPathOfAssembly(AssemblyName name) => throw new NotImplementedException(); | ||
public Type? GetType(string name) => Type.GetType(name); | ||
public Type? GetType(string name, bool throwOnError) => Type.GetType(name, throwOnError); | ||
public Type? GetType(string name, bool throwOnError, bool ignoreCase) => Type.GetType(name, throwOnError, ignoreCase); | ||
public void ReferenceAssembly(AssemblyName name) => throw new NotImplementedException(); | ||
} | ||
|
||
[WinFormsTheory] | ||
[InlineData("ValidName", false, false, false, true, true)] | ||
[InlineData("DuplicateColumnName", true, false, false, true, false)] | ||
[InlineData("DuplicateComponentName", false, true, false, true, false)] | ||
[InlineData("InvalidIdentifier", false, false, true, true, false)] | ||
[InlineData("DuplicateLiveColumnName", false, true, false, false, false)] | ||
public void ValidName_ShouldReturnExpectedResult(string name, bool columnContains, bool containerContains, bool invalidIdentifier, bool allowDuplicateNameInLiveColumnCollection, bool expectedResult) | ||
{ | ||
DataGridViewColumnCollection columns = _dataGridView.Columns; | ||
if (columnContains) | ||
{ | ||
columns.Add(new DataGridViewTextBoxColumn { Name = name }); | ||
} | ||
|
||
if (containerContains) | ||
{ | ||
_container.Add(new Component(), name); | ||
} | ||
|
||
NameCreationService nameCreationService = new(invalidIdentifier); | ||
DataGridViewColumnCollection liveColumns = new(new DataGridView()); | ||
if (!allowDuplicateNameInLiveColumnCollection) | ||
{ | ||
liveColumns.Add(new DataGridViewTextBoxColumn { Name = name }); | ||
} | ||
|
||
bool result = DataGridViewAddColumnDialog.ValidName(name, columns, _container, nameCreationService, liveColumns, allowDuplicateNameInLiveColumnCollection); | ||
|
||
result.Should().Be(expectedResult); | ||
} | ||
|
||
private class NameCreationService : INameCreationService | ||
{ | ||
private readonly bool _invalidIdentifier; | ||
|
||
public NameCreationService(bool invalidIdentifier) | ||
{ | ||
_invalidIdentifier = invalidIdentifier; | ||
} | ||
|
||
public string CreateName(IContainer? container, Type dataType) => throw new NotImplementedException(); | ||
public bool IsValidName(string name) => !_invalidIdentifier; | ||
public void ValidateName(string name) => throw new NotImplementedException(); | ||
} | ||
} |