-
Notifications
You must be signed in to change notification settings - Fork 971
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add tests for MaskedTextBoxTextEditor (#11737)
Add tests for MaskedTextBoxTextEditor.cs
- Loading branch information
Showing
1 changed file
with
215 additions
and
0 deletions.
There are no files selected for viewing
215 changes: 215 additions & 0 deletions
215
....Forms.Design/tests/UnitTests/System/Windows/Forms/Design/MaskedTextBoxTextEditorTests.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,215 @@ | ||
// 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.Drawing.Design; | ||
using Moq; | ||
|
||
#nullable enable | ||
|
||
namespace System.Windows.Forms.Design.Tests; | ||
|
||
public class MaskedTextBoxTextEditorTests | ||
{ | ||
[Fact] | ||
public void EditValue_ReturnsOriginalValue_WhenContextInstanceIsNull() | ||
{ | ||
Mock<ITypeDescriptorContext> mockContext = new(MockBehavior.Strict); | ||
mockContext | ||
.Setup(c => c.Instance) | ||
.Returns(null); | ||
|
||
Mock<IWindowsFormsEditorService> mockEditorService = new(MockBehavior.Strict); | ||
mockEditorService | ||
.Setup(s => s.ShowDialog(It.IsAny<Form>())) | ||
.Returns(DialogResult.OK); | ||
|
||
Mock<IServiceProvider> mockServiceProvider = new(MockBehavior.Strict); | ||
mockServiceProvider | ||
.Setup(p => p.GetService(typeof(IWindowsFormsEditorService))) | ||
.Returns(mockEditorService.Object); | ||
|
||
MaskedTextBoxTextEditor editor = new(); | ||
object? value = "TestValue"; | ||
|
||
value.Should().BeSameAs(editor.EditValue(mockContext.Object, mockServiceProvider.Object, value)); | ||
} | ||
|
||
[WinFormsFact] | ||
public void EditValue_ReturnsOriginalValue_WhenEditorServiceIsNotAvailable() | ||
{ | ||
Mock<ITypeDescriptorContext> mockContext = new(MockBehavior.Strict); | ||
mockContext | ||
.Setup(c => c.Instance) | ||
.Returns(new object()); | ||
|
||
IWindowsFormsEditorService? editorService = null; | ||
|
||
Mock<IServiceProvider> mockServiceProvider = new(MockBehavior.Strict); | ||
mockServiceProvider | ||
.Setup(p => p.GetService(typeof(IWindowsFormsEditorService))) | ||
.Returns(editorService); | ||
|
||
MaskedTextBoxTextEditor editor = new(); | ||
object? value = "TestValue"; | ||
|
||
value.Should().BeSameAs(editor.EditValue(mockContext.Object, mockServiceProvider.Object, value)); | ||
} | ||
|
||
[Fact] | ||
public void EditValue_ReturnsOriginalValue_WhenContextInstanceIsNotMaskedTextBox() | ||
{ | ||
// Set context.Instance to new object. | ||
Mock<ITypeDescriptorContext> mockContext = new(MockBehavior.Strict); | ||
mockContext | ||
.Setup(c => c.Instance) | ||
.Returns(new object()); | ||
|
||
Mock<IWindowsFormsEditorService> mockEditorService = new(MockBehavior.Strict); | ||
mockEditorService | ||
.Setup(s => s.DropDownControl(It.IsAny<MaskedTextBoxTextEditorDropDown>())); | ||
|
||
Mock<IServiceProvider> mockServiceProvider = new(MockBehavior.Strict); | ||
mockServiceProvider | ||
.Setup(p => p.GetService(typeof(IWindowsFormsEditorService))) | ||
.Returns(mockEditorService.Object); | ||
|
||
MaskedTextBoxTextEditor editor = new(); | ||
string originalValue = "TestValue"; | ||
object? actualValue = editor.EditValue(mockContext.Object, mockServiceProvider.Object, originalValue); | ||
|
||
// When Context.Instance is not MaskedTextBox, its Text property should be the original value, | ||
// and the return value of EditValue is also the original value. | ||
mockContext.Object.Instance.Should().NotBeOfType<MaskedTextBox>(); | ||
MaskedTextBox? maskedText = mockContext.Object.Instance as MaskedTextBox; | ||
|
||
maskedText?.Text.Should().Be(originalValue); | ||
actualValue.Should().Be(originalValue); | ||
} | ||
|
||
[Fact] | ||
public void EditValue_ReturnsDropDownValue_WhenContextInstanceIsMaskedTextBox_AndDropDownValueIsNotNull() | ||
{ | ||
MaskedTextBox CustomMaskedTextBox = new() | ||
{ | ||
Text = "MaskText" | ||
}; | ||
|
||
// Set context.Instance to a new MaskedTextBox with Text. | ||
Mock<ITypeDescriptorContext> mockContext = new(MockBehavior.Strict); | ||
mockContext | ||
.Setup(c => c.Instance) | ||
.Returns(CustomMaskedTextBox); | ||
|
||
Mock<IWindowsFormsEditorService> mockEditorService = new(MockBehavior.Strict); | ||
mockEditorService | ||
.Setup(s => s.DropDownControl(It.IsAny<MaskedTextBoxTextEditorDropDown>())); | ||
|
||
Mock<IServiceProvider> mockServiceProvider = new(MockBehavior.Strict); | ||
mockServiceProvider | ||
.Setup(p => p.GetService(typeof(IWindowsFormsEditorService))) | ||
.Returns(mockEditorService.Object); | ||
|
||
MaskedTextBoxTextEditor editor = new(); | ||
string originalValue = "TestValue"; | ||
object? actualValue = editor.EditValue(mockContext.Object, mockServiceProvider.Object, originalValue); | ||
|
||
// When Context.Instance is MaskedTextBox, its own Text property of control itself is not changed, | ||
// and the return value of EditValue is equal to the control's own Text value. | ||
Assert.True(mockContext.Object.Instance is MaskedTextBox); | ||
MaskedTextBox? maskedTextBox = mockContext.Object.Instance as MaskedTextBox; | ||
|
||
maskedTextBox?.Text.Should().NotBe(originalValue); | ||
actualValue.Should().Be(CustomMaskedTextBox.Text); | ||
} | ||
|
||
[Fact] | ||
public void EditValue_ReturnsOriginalValue_WhenContextInstanceIsMaskedTextBox_AndDropDownValueIsNull() | ||
{ | ||
MaskedTextBox CustomMaskedTextBox = new(); | ||
|
||
// Set context.Instance to a new MaskedTextBox without Text value. | ||
Mock<ITypeDescriptorContext> mockContext = new(MockBehavior.Strict); | ||
mockContext | ||
.Setup(c => c.Instance) | ||
.Returns(CustomMaskedTextBox); | ||
|
||
Mock<IWindowsFormsEditorService> mockEditorService = new(MockBehavior.Strict); | ||
mockEditorService | ||
.Setup(s => s.DropDownControl(It.IsAny<MaskedTextBoxTextEditorDropDown>())); | ||
|
||
Mock<IServiceProvider> mockServiceProvider = new(MockBehavior.Strict); | ||
mockServiceProvider | ||
.Setup(p => p.GetService(typeof(IWindowsFormsEditorService))) | ||
.Returns(mockEditorService.Object); | ||
|
||
MaskedTextBoxTextEditor editor = new(); | ||
string originalValue = "TestValue"; | ||
object? actualValue = editor.EditValue(mockContext.Object, mockServiceProvider.Object, originalValue); | ||
|
||
// When Context.Instance is MaskedTextBox, its own Text property of control itself will not change, | ||
// and the return value of EditValue is also original value. | ||
Assert.True(mockContext.Object.Instance is MaskedTextBox); | ||
MaskedTextBox? maskedTextBox = mockContext.Object.Instance as MaskedTextBox; | ||
|
||
maskedTextBox?.Text.Should().NotBe(originalValue); | ||
actualValue.Should().BeSameAs(CustomMaskedTextBox.Text); | ||
} | ||
|
||
[Theory] | ||
[InlineData([new object[] { }])] | ||
[InlineData(null)] | ||
public void GetEditStyle_ReturnExpected(object? host) | ||
{ | ||
Mock<ITypeDescriptorContext> mockContext = new(MockBehavior.Strict); | ||
mockContext | ||
.Setup(c => c.Instance) | ||
.Returns(host); | ||
|
||
MaskedTextBoxTextEditor editor = new(); | ||
UITypeEditorEditStyle result = editor.GetEditStyle(mockContext.Object); | ||
|
||
if (host is null) | ||
{ | ||
// Returns base.GetEditStyle when Context.Instance is null. | ||
result.Should().Be(editor.GetEditStyle(mockContext.Object)); | ||
} | ||
else | ||
{ | ||
// Returns DropDown when Context.Instance is not null. | ||
result.Should().Be(UITypeEditorEditStyle.DropDown); | ||
} | ||
} | ||
|
||
[Theory] | ||
[InlineData([new object[] { }])] | ||
[InlineData(null)] | ||
public void GetPaintValueSupported_ReturnExpected(object? host) | ||
{ | ||
Mock<ITypeDescriptorContext> mockContext = new(MockBehavior.Strict); | ||
mockContext | ||
.Setup(c => c.Instance) | ||
.Returns(host); | ||
|
||
MaskedTextBoxTextEditor editor = new(); | ||
bool result = editor.GetPaintValueSupported(mockContext.Object); | ||
|
||
if (host is null) | ||
{ | ||
// Returns base.GetPaintValueSupported when Context.Instance is null. | ||
result.Should().Be(editor.GetPaintValueSupported(mockContext.Object)); | ||
} | ||
else | ||
{ | ||
// Returns false when Context.Instance is not null. | ||
result.Should().BeFalse(); | ||
} | ||
} | ||
|
||
[Fact] | ||
public void IsDropDownResizable_ReturnsFalse() | ||
{ | ||
MaskedTextBoxTextEditor editor = new(); | ||
editor.IsDropDownResizable.Should().BeFalse(); | ||
} | ||
} |