diff --git a/src/System.Windows.Forms.Design/tests/UnitTests/System/Windows/Forms/Design/ControlCodeDomSerializerTests.cs b/src/System.Windows.Forms.Design/tests/UnitTests/System/Windows/Forms/Design/ControlCodeDomSerializerTests.cs new file mode 100644 index 00000000000..619332a3aa4 --- /dev/null +++ b/src/System.Windows.Forms.Design/tests/UnitTests/System/Windows/Forms/Design/ControlCodeDomSerializerTests.cs @@ -0,0 +1,80 @@ +// 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.CodeDom; +using System.ComponentModel; +using System.ComponentModel.Design; +using System.ComponentModel.Design.Serialization; +using Moq; + +namespace System.Windows.Forms.Design.Tests; + +public class ControlCodeDomSerializerTests : IDisposable +{ + private readonly Mock _managerMock; + private readonly Mock _hostMock; + private readonly Mock _serializerMock; + private readonly ControlCodeDomSerializer _controlCodeDomSerializer; + private readonly TestControl _testControl; + private readonly CodeStatementCollection _codeStatementCollection; + + public ControlCodeDomSerializerTests() + { + _managerMock = new(); + _hostMock = new(); + _serializerMock = new(); + _controlCodeDomSerializer = new(); + _testControl = new(); + _codeStatementCollection = []; + + _managerMock.Setup(m => m.GetService(typeof(IDesignerHost))).Returns(_hostMock.Object); + _managerMock.Setup(m => m.GetSerializer(typeof(Component), typeof(CodeDomSerializer))).Returns(_serializerMock.Object); + } + + public void Dispose() => _testControl.Dispose(); + + [Fact] + public void Deserialize_SuspendsAndResumesLayout() + { + Mock mockContainer = new(); + _managerMock.Setup(m => m.GetService(typeof(IContainer))).Returns(mockContainer.Object); + mockContainer.Setup(c => c.Components).Returns(new ComponentCollection([_testControl])); + + object codeObject = new(); + object expectedObjectGraphData = new(); + _serializerMock.Setup(s => s.Deserialize(_managerMock.Object, codeObject)).Returns(expectedObjectGraphData); + + _controlCodeDomSerializer.Deserialize(_managerMock.Object, codeObject).Should().Be(expectedObjectGraphData); + } + + [Fact] + public void Serialize_ShouldReturnSerializedObject() + { + _serializerMock.Setup(s => s.Serialize(_managerMock.Object, _testControl)).Returns(_codeStatementCollection); + + CodeStatementCollection? result = _controlCodeDomSerializer.Serialize(_managerMock.Object, _testControl) as CodeStatementCollection; + + result.Should().NotBeNull(); + result.Should().BeOfType(); + } + + public class TestControl : Control + { + public bool SuspendLayoutCalled { get; private set; } + public bool ResumeLayoutCalled { get; private set; } + + public new void SuspendLayout() + { + SuspendLayoutCalled = true; + base.SuspendLayout(); + } + + public new void ResumeLayout(bool performLayout) + { + ResumeLayoutCalled = true; + base.ResumeLayout(performLayout); + } + } +}