File: System\Drawing\BufferedGraphicsTests.cs
Web Access
Project: src\src\System.Drawing.Common\tests\System.Drawing.Common.Tests.csproj (System.Drawing.Common.Tests)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
 
namespace System.Drawing.Tests;
 
public class BufferedGraphicsTests
{
    [Fact]
    public void Dispose_TempMultipleTimes_Success()
    {
        using BufferedGraphicsContext context = new();
        using Bitmap image = new(3, 3);
        using Graphics targetGraphics = Graphics.FromImage(image);
        BufferedGraphics graphics = context.Allocate(targetGraphics, new Rectangle(0, 0, 1, 1));
        Assert.NotNull(graphics.Graphics);
 
        graphics.Dispose();
        Assert.Null(graphics.Graphics);
 
        graphics.Dispose();
    }
 
    [Fact]
    public void Dispose_ActualMultipleTimes_Success()
    {
        using BufferedGraphicsContext context = new();
        using Bitmap image = new(3, 3);
        using Graphics targetGraphics = Graphics.FromImage(image);
        BufferedGraphics graphics = context.Allocate(targetGraphics, new Rectangle(0, 0, context.MaximumBuffer.Width + 1, context.MaximumBuffer.Height + 1));
        Assert.NotNull(graphics.Graphics);
 
        graphics.Dispose();
        Assert.Null(graphics.Graphics);
 
        graphics.Dispose();
    }
 
    [Fact]
    public void Render_ParameterlessWithTargetGraphics_Success()
    {
        Color color = Color.FromArgb(255, 0, 0, 0);
 
        using BufferedGraphicsContext context = new();
        using Bitmap image = new(3, 3);
        using Graphics graphics = Graphics.FromImage(image);
        using SolidBrush brush = new(Color.Red);
        graphics.FillRectangle(brush, new Rectangle(0, 0, 3, 3));
 
        using BufferedGraphics bufferedGraphics = context.Allocate(graphics, new Rectangle(0, 0, 3, 3));
        bufferedGraphics.Render();
 
        Helpers.VerifyBitmap(image,
        [
                    [color, color, color],
                    [color, color, color],
                    [color, color, color]
        ]);
    }
 
    [Fact]
    public void Render_ParameterlessWithNullTargetGraphics_Success()
    {
        using BufferedGraphicsContext context = new();
        using Bitmap image = new(3, 3);
        using Graphics graphics = Graphics.FromImage(image);
        using SolidBrush brush = new(Color.Red);
        graphics.FillRectangle(brush, new Rectangle(0, 0, 3, 3));
        try
        {
            IntPtr hdc = graphics.GetHdc();
 
            using BufferedGraphics bufferedGraphics = context.Allocate(hdc, new Rectangle(0, 0, 3, 3));
            bufferedGraphics.Render();
        }
        finally
        {
            graphics.ReleaseHdc();
        }
    }
 
    [Fact]
    public void Render_TargetGraphics_Success()
    {
        Color color = Color.FromArgb(255, 0, 0, 0);
 
        using BufferedGraphicsContext context = new();
        using Bitmap originalImage = new(3, 3);
        using Bitmap targetImage = new(3, 3);
        using Graphics originalGraphics = Graphics.FromImage(originalImage);
        using Graphics targetGraphics = Graphics.FromImage(targetImage);
        using SolidBrush brush = new(Color.Red);
        originalGraphics.FillRectangle(brush, new Rectangle(0, 0, 3, 3));
 
        using BufferedGraphics graphics = context.Allocate(originalGraphics, new Rectangle(0, 0, 3, 3));
        graphics.Render(targetGraphics);
 
        Helpers.VerifyBitmap(targetImage,
        [
                    [color, color, color],
                    [color, color, color],
                    [color, color, color]
        ]);
    }
 
    [Fact]
    public void Render_NullGraphics_Nop()
    {
        using BufferedGraphicsContext context = new();
        using Bitmap image = new(3, 3);
        using Graphics graphics = Graphics.FromImage(image);
        using BufferedGraphics bufferedGraphics = context.Allocate(graphics, new Rectangle(0, 0, 1, 1));
        bufferedGraphics.Render(null);
    }
 
    [Fact]
    public void Render_InvalidTargetDC_Nop()
    {
        using BufferedGraphicsContext context = new();
        using BufferedGraphics graphics = context.Allocate(null, Rectangle.Empty);
        graphics.Render(IntPtr.Zero);
        graphics.Render(-1);
    }
}