Skip to content

Commit

Permalink
Add basic GetContextInfo regression tests.
Browse files Browse the repository at this point in the history
  • Loading branch information
JeremyKuhne committed Apr 15, 2021
1 parent 6b64618 commit db05a29
Show file tree
Hide file tree
Showing 3 changed files with 173 additions and 6 deletions.
3 changes: 3 additions & 0 deletions src/libraries/Common/tests/System/Drawing/Helpers.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand Down Expand Up @@ -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;
Expand Down
166 changes: 166 additions & 0 deletions src/libraries/System.Drawing.Common/tests/Graphics_GetContextTests.cs
Original file line number Diff line number Diff line change
@@ -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<object[]>(info);
object[] infoArray = (object[])info;
Assert.Equal(2, infoArray.Length);
Assert.IsType<Region>(infoArray[0]);
Assert.IsType<Matrix>(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);
}
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@
<Compile Include="GraphicsTests.cs" />
<Compile Include="Graphics_DrawBezierTests.cs" />
<Compile Include="Graphics_DrawLineTests.cs" />
<Compile Include="Graphics_GetContextTests.cs" />
<Compile Include="IconTests.cs" />
<Compile Include="ImageTests.cs" />
<Compile Include="Imaging\ImageAttributesTests.cs" />
Expand Down Expand Up @@ -87,12 +88,9 @@
<Compile Include="Printing\PaperSizeTests.cs" />
<Compile Include="Printing\PaperSourceTests.cs" />
<Compile Include="Printing\PrinterUnitConvertTests.cs" />
<Compile Include="$(CommonTestPath)System\Diagnostics\DebuggerAttributes.cs"
Link="Common\System\Diagnostics\DebuggerAttributes.cs" />
<Compile Include="$(CommonTestPath)System\Drawing\Helpers.cs"
Link="Common\System\Drawing\Helpers.cs" />
<Compile Include="$(CommonTestPath)System\IO\TempFile.cs"
Link="Common\System\IO\TempFile.cs" />
<Compile Include="$(CommonTestPath)System\Diagnostics\DebuggerAttributes.cs" Link="Common\System\Diagnostics\DebuggerAttributes.cs" />
<Compile Include="$(CommonTestPath)System\Drawing\Helpers.cs" Link="Common\System\Drawing\Helpers.cs" />
<Compile Include="$(CommonTestPath)System\IO\TempFile.cs" Link="Common\System\IO\TempFile.cs" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="System.Drawing.Common.TestData" Version="$(SystemDrawingCommonTestDataVersion)" GeneratePathProperty="true" />
Expand Down

0 comments on commit db05a29

Please sign in to comment.