File: System\Windows\Forms\Design\LinkAreaEditor.LinkAreaUITests.cs
Web Access
Project: src\src\System.Windows.Forms.Design\tests\UnitTests\System.Windows.Forms.Design.Tests.csproj (System.Windows.Forms.Design.Tests)
// 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 Moq;
using System.ComponentModel.Design;
 
namespace System.Windows.Forms.Design.Tests;
 
public class LinkAreaEditorLinkAreaUITests : IDisposable
{
    private readonly LinkAreaEditor.LinkAreaUI _linkAreaUI;
    private readonly Mock<IHelpService> _mockHelpService;
 
    public LinkAreaEditorLinkAreaUITests()
    {
        _mockHelpService = new();
        _linkAreaUI = new(_mockHelpService.Object);
    }
 
    public void Dispose()
    {
        _linkAreaUI.Dispose();
    }
 
    [Fact]
    public void LinkAreaUI_Constructor_InitializesCorrectly()
    {
        _linkAreaUI.Should().NotBeNull();
        _linkAreaUI.Should().BeOfType<LinkAreaEditor.LinkAreaUI>();
 
        IHelpService? helpServiceField = _linkAreaUI.TestAccessor().Dynamic._helpService;
 
        helpServiceField.Should().Be(_mockHelpService.Object);
    }
 
    [Fact]
    public void SampleText_SetGet_WorksCorrectly()
    {
        string sampleText = "Test Sample Text";
        _linkAreaUI.SampleText = sampleText;
 
        _linkAreaUI.SampleText.Should().Be(sampleText);
    }
 
    [Fact]
    public void SampleText_Set_UpdatesSelection()
    {
        string testText = "Sample text for testing";
        LinkArea linkArea = new(7, 4);
        _linkAreaUI.Start(linkArea);
 
        _linkAreaUI.SampleText = testText;
 
        _linkAreaUI.SampleText.Should().Be(testText);
 
        dynamic testAccessor = _linkAreaUI.TestAccessor().Dynamic;
        int selectionStart = (int)testAccessor._sampleEdit.SelectionStart;
        int selectionLength = (int)testAccessor._sampleEdit.SelectionLength;
 
        selectionStart.Should().Be(linkArea.Start);
        selectionLength.Should().Be(linkArea.Length);
    }
 
    [Fact]
    public void Value_SetGet_WorksCorrectly()
    {
        _linkAreaUI.Start(new object());
        object? initialValue = _linkAreaUI.Value;
 
        _linkAreaUI.End();
        object? finalValue = _linkAreaUI.Value;
 
        initialValue.Should().NotBeNull();
        finalValue.Should().BeNull();
    }
 
    [Fact]
    public void End_SetsValueToNull()
    {
        _linkAreaUI.Start(new LinkArea(1, 2));
 
        _linkAreaUI.End();
 
        _linkAreaUI.Value.Should().BeNull();
    }
 
    [Fact]
    public void Start_SetsValueAndUpdatesSelection()
    {
        object? testValue = new LinkArea(3, 4);
        _linkAreaUI.Start(testValue);
 
        dynamic dynamicAccessor = _linkAreaUI.TestAccessor().Dynamic;
        int selectionStart = (int)dynamicAccessor._sampleEdit.SelectionStart;
        int selectionLength = (int)dynamicAccessor._sampleEdit.SelectionLength;
 
        _linkAreaUI.Value.Should().Be(testValue);
 
        string sampleText = _linkAreaUI.SampleText;
        sampleText.Length.Should().BeGreaterThanOrEqualTo(selectionStart + selectionLength);
 
        selectionStart.Should().Be(3);
        selectionLength.Should().Be(4);
    }
 
    [Fact]
    public void Start_WithNullValue_DoesNotThrow()
    {
        Action action = () => _linkAreaUI.Start(null);
 
        action.Should().NotThrow();
        _linkAreaUI.Value.Should().BeNull();
    }
}