From db05a293b8f435dc665d54c44477b5da4734e55a Mon Sep 17 00:00:00 2001 From: Jeremy Kuhne Date: Thu, 4 Mar 2021 13:46:37 -0800 Subject: [PATCH] Add basic GetContextInfo regression tests. --- .../Common/tests/System/Drawing/Helpers.cs | 3 + .../tests/Graphics_GetContextTests.cs | 166 ++++++++++++++++++ .../tests/System.Drawing.Common.Tests.csproj | 10 +- 3 files changed, 173 insertions(+), 6 deletions(-) create mode 100644 src/libraries/System.Drawing.Common/tests/Graphics_GetContextTests.cs diff --git a/src/libraries/Common/tests/System/Drawing/Helpers.cs b/src/libraries/Common/tests/System/Drawing/Helpers.cs index 162cf6abcb072..fc68b4e6e124a 100644 --- a/src/libraries/Common/tests/System/Drawing/Helpers.cs +++ b/src/libraries/Common/tests/System/Drawing/Helpers.cs @@ -20,6 +20,7 @@ public static class Helpers public const string GdiPlusIsAvailableNotWindows7 = nameof(Helpers) + "." + nameof(GetGdiPlusIsAvailableNotWindows7); public const string AnyInstalledPrinters = nameof(Helpers) + "." + nameof(IsAnyInstalledPrinters); public const string WindowsRS3OrEarlier = nameof(Helpers) + "." + nameof(IsWindowsRS3OrEarlier); + public const string IsWindows = nameof(Helpers) + "." + nameof(GetIsWindows); public static bool GetIsDrawingSupported() => PlatformDetection.IsDrawingSupported; @@ -53,6 +54,8 @@ public static bool GetIsWindowsOrAtLeastLibgdiplus6() return installedVersion.Major >= 6; } + public static bool GetIsWindows() => PlatformDetection.IsWindows; + public static bool IsNotUnix => PlatformDetection.IsWindows; public static bool IsWindowsRS3OrEarlier => !PlatformDetection.IsWindows10Version1803OrGreater; diff --git a/src/libraries/System.Drawing.Common/tests/Graphics_GetContextTests.cs b/src/libraries/System.Drawing.Common/tests/Graphics_GetContextTests.cs new file mode 100644 index 0000000000000..3eb940d75da69 --- /dev/null +++ b/src/libraries/System.Drawing.Common/tests/Graphics_GetContextTests.cs @@ -0,0 +1,166 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using System.Drawing.Drawing2D; +using Xunit; + +namespace System.Drawing.Tests +{ + public class Graphics_GetContextTests : DrawingTest + { + [ConditionalFact(Helpers.IsWindows)] + public void GetContextInfo_DefaultGraphics() + { + using (var image = new Bitmap(10, 10)) + using (Graphics graphics = Graphics.FromImage(image)) + { + object info = graphics.GetContextInfo(); + Assert.IsType(info); + object[] infoArray = (object[])info; + Assert.Equal(2, infoArray.Length); + Assert.IsType(infoArray[0]); + Assert.IsType(infoArray[1]); + using (Region region = (Region)infoArray[0]) + using (Matrix matrix = (Matrix)infoArray[1]) + { + Assert.True(region.IsInfinite(graphics)); + Assert.True(matrix.IsIdentity); + } + } + } + + [ConditionalFact(Helpers.IsWindows)] + public void GetContextInfo_Clipping() + { + using (var image = new Bitmap(10, 10)) + using (Graphics graphics = Graphics.FromImage(image)) + using (Region initialClip = new Region(new Rectangle(1, 2, 9, 10))) + { + graphics.Clip = initialClip; + + object[] info = (object[])graphics.GetContextInfo(); + using (Region region = (Region)info[0]) + using (Matrix matrix = (Matrix)info[1]) + { + Assert.Equal(initialClip.GetBounds(graphics), region.GetBounds(graphics)); + Assert.True(matrix.IsIdentity); + } + } + } + + [ConditionalFact(Helpers.IsWindows)] + public void GetContextInfo_Transform() + { + using (var image = new Bitmap(10, 10)) + using (Graphics graphics = Graphics.FromImage(image)) + using (Matrix initialTransform = new Matrix()) + { + initialTransform.Translate(1, 2); + graphics.Transform = initialTransform; + + object[] info = (object[])graphics.GetContextInfo(); + using (Region region = (Region)info[0]) + using (Matrix matrix = (Matrix)info[1]) + { + Assert.True(region.IsInfinite(graphics)); + Assert.Equal(initialTransform, matrix); + } + } + } + + [ConditionalFact(Helpers.IsWindows)] + public void GetContextInfo_ClipAndTransform() + { + using (var image = new Bitmap(10, 10)) + using (Graphics graphics = Graphics.FromImage(image)) + using (Matrix initialTransform = new Matrix()) + using (Region initialClip = new Region(new Rectangle(1, 2, 9, 10))) + { + graphics.Clip = initialClip; + initialTransform.Translate(1, 2); + graphics.Transform = initialTransform; + + object[] info = (object[])graphics.GetContextInfo(); + using (Region region = (Region)info[0]) + using (Matrix matrix = (Matrix)info[1]) + { + Assert.Equal(new RectangleF(0, 0, 9, 10), region.GetBounds(graphics)); + Assert.Equal(initialTransform, matrix); + } + } + } + + [ConditionalFact(Helpers.IsWindows)] + public void GetContextInfo_TransformAndClip() + { + using (var image = new Bitmap(10, 10)) + using (Graphics graphics = Graphics.FromImage(image)) + using (Matrix initialTransform = new Matrix()) + using (Region initialClip = new Region(new Rectangle(1, 2, 9, 10))) + { + initialTransform.Translate(1, 2); + graphics.Transform = initialTransform; + graphics.Clip = initialClip; + + object[] info = (object[])graphics.GetContextInfo(); + using (Region region = (Region)info[0]) + using (Matrix matrix = (Matrix)info[1]) + { + Assert.Equal(new RectangleF(1, 2, 9, 10), region.GetBounds(graphics)); + Assert.Equal(initialTransform, matrix); + } + } + } + + [ConditionalFact(Helpers.IsWindows)] + public void GetContextInfo_ClipAndTransformSaveState() + { + using (var image = new Bitmap(10, 10)) + using (Graphics graphics = Graphics.FromImage(image)) + using (Matrix initialTransform = new Matrix()) + using (Region initialClip = new Region(new Rectangle(1, 2, 9, 10))) + { + graphics.Clip = initialClip; + initialTransform.Translate(1, 2); + graphics.Transform = initialTransform; + + GraphicsState state = graphics.Save(); + object[] info = (object[])graphics.GetContextInfo(); + + using (Region region = (Region)info[0]) + using (Matrix matrix = (Matrix)info[1]) + { + initialTransform.Translate(1, 2); + Assert.Equal(new RectangleF(0, 0, 8, 8), region.GetBounds(graphics)); + Assert.Equal(initialTransform, matrix); + } + } + } + + [ConditionalFact(Helpers.IsWindows)] + public void GetContextInfo_ClipAndTransformSaveAndRestoreState() + { + using (var image = new Bitmap(10, 10)) + using (Graphics graphics = Graphics.FromImage(image)) + using (Matrix initialTransform = new Matrix()) + using (Region initialClip = new Region(new Rectangle(1, 2, 9, 10))) + { + graphics.Clip = initialClip; + initialTransform.Translate(1, 2); + graphics.Transform = initialTransform; + + GraphicsState state = graphics.Save(); + object[] info = (object[])graphics.GetContextInfo(); + graphics.Restore(state); + + using (Region region = (Region)info[0]) + using (Matrix matrix = (Matrix)info[1]) + { + initialTransform.Translate(1, 2); + Assert.Equal(new RectangleF(0, 0, 8, 8), region.GetBounds(graphics)); + Assert.Equal(initialTransform, matrix); + } + } + } + } +} diff --git a/src/libraries/System.Drawing.Common/tests/System.Drawing.Common.Tests.csproj b/src/libraries/System.Drawing.Common/tests/System.Drawing.Common.Tests.csproj index 9d0c15dec7797..baa169e969831 100644 --- a/src/libraries/System.Drawing.Common/tests/System.Drawing.Common.Tests.csproj +++ b/src/libraries/System.Drawing.Common/tests/System.Drawing.Common.Tests.csproj @@ -28,6 +28,7 @@ + @@ -87,12 +88,9 @@ - - - + + +