//
// Graphics class testing unit
//
-// Author:
+// Authors:
// Jordi Mas, jordi@ximian.com
+// Sebastien Pouliot <sebastien@ximian.com>
//
-//
-// Copyright (C) 2005 Novell, Inc (http://www.novell.com)
+// Copyright (C) 2005-2006 Novell, Inc (http://www.novell.com)
//
// Permission is hereby granted, free of charge, to any person obtaining
// a copy of this software and associated documentation files (the
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
-
-
using NUnit.Framework;
using System;
using System.Drawing;
{
private RectangleF[] rects;
- [TearDown]
- public void TearDown () {}
-
- [SetUp]
- public void SetUp ()
- {
-
- }
-
[Test]
public void DefaultProperties ()
{
AssertEquals ("Clip3", 40, rects[0].Y);
AssertEquals ("Clip4", 210, rects[0].Width);
AssertEquals ("Clip5", 220, rects[0].Height);
+ }\r
+\r
+ [Test]\r
+ public void Clip_NotAReference ()\r
+ {\r
+ Bitmap bmp = new Bitmap (200, 200);\r
+ Graphics g = Graphics.FromImage (bmp);\r
+ Assert ("IsInfinite", g.Clip.IsInfinite (g));\r
+ g.Clip.IsEmpty (g);\r
+ Assert ("!IsEmpty", !g.Clip.IsEmpty (g));\r
+ Assert ("IsInfinite-2", g.Clip.IsInfinite (g));\r
}
[Test]
public void FromImage ()
{
Graphics g = Graphics.FromImage (null);
- }
+ }\r
+\r
+ private Graphics Get (int w, int h)\r
+ {\r
+ Bitmap bitmap = new Bitmap (w, h);\r
+ Graphics g = Graphics.FromImage (bitmap);\r
+ g.Clip = new Region (new Rectangle (0, 0, w, h));\r
+ return g;\r
+ }\r
+\r
+ private void Compare (string msg, RectangleF b1, RectangleF b2)\r
+ {\r
+ AssertEquals (msg + ".compare.X", b1.X, b2.X);\r
+ AssertEquals (msg + ".compare.Y", b1.Y, b2.Y);\r
+ AssertEquals (msg + ".compare.Width", b1.Width, b2.Width);\r
+ AssertEquals (msg + ".compare.Height", b1.Height, b2.Height);\r
+ }\r
+\r
+ [Test]\r
+ public void Clip_GetBounds ()\r
+ {\r
+ Graphics g = Get (16, 16);\r
+ RectangleF bounds = g.Clip.GetBounds (g);\r
+ AssertEquals ("X", 0, bounds.X);\r
+ AssertEquals ("Y", 0, bounds.Y);\r
+ AssertEquals ("Width", 16, bounds.Width);\r
+ AssertEquals ("Height", 16, bounds.Height);\r
+ Assert ("Identity", g.Transform.IsIdentity);\r
+ g.Dispose ();\r
+ }\r
+\r
+ [Test]\r
+ public void Clip_TranslateTransform ()\r
+ {\r
+ Graphics g = Get (16, 16);\r
+ g.TranslateTransform (12.22f, 10.10f);\r
+ RectangleF bounds = g.Clip.GetBounds (g);\r
+ Compare ("translate", bounds, g.ClipBounds);\r
+ AssertEquals ("translate.X", -12.22, bounds.X);\r
+ AssertEquals ("translate.Y", -10.10, bounds.Y);\r
+ AssertEquals ("translate.Width", 16, bounds.Width);\r
+ AssertEquals ("translate.Height", 16, bounds.Height);\r
+ float[] elements = g.Transform.Elements;\r
+ AssertEquals ("translate.0", 1, elements[0]);\r
+ AssertEquals ("translate.1", 0, elements[1]);\r
+ AssertEquals ("translate.2", 0, elements[2]);\r
+ AssertEquals ("translate.3", 1, elements[3]);\r
+ AssertEquals ("translate.4", 12.22, elements[4]);\r
+ AssertEquals ("translate.5", 10.10, elements[5]);\r
+\r
+ g.ResetTransform ();\r
+ bounds = g.Clip.GetBounds (g);\r
+ Compare ("reset", bounds, g.ClipBounds);\r
+ AssertEquals ("reset.X", 0, bounds.X);\r
+ AssertEquals ("reset.Y", 0, bounds.Y);\r
+ AssertEquals ("reset.Width", 16, bounds.Width);\r
+ AssertEquals ("reset.Height", 16, bounds.Height);\r
+ Assert ("Identity", g.Transform.IsIdentity);\r
+ g.Dispose ();\r
+ }\r
+\r
+ [Test]\r
+ [ExpectedException (typeof (ArgumentException))]\r
+ public void Transform_NonInvertibleMatrix ()\r
+ {\r
+ Matrix matrix = new Matrix (123, 24, 82, 16, 47, 30);\r
+ Assert ("IsInvertible", !matrix.IsInvertible);\r
+ Graphics g = Get (16, 16);\r
+ g.Transform = matrix;\r
+ }\r
+\r
+ private void CheckBounds (string msg, RectangleF bounds, float x, float y, float w, float h)\r
+ {\r
+ AssertEquals (msg + ".X", x, bounds.X, 0.1);\r
+ AssertEquals (msg + ".Y", y, bounds.Y, 0.1);\r
+ AssertEquals (msg + ".Width", w, bounds.Width, 0.1);\r
+ AssertEquals (msg + ".Height", h, bounds.Height, 0.1);\r
+ }\r
+\r
+ [Test]\r
+ public void ClipBounds ()\r
+ {\r
+ Graphics g = Get (16, 16);\r
+ CheckBounds ("graphics.ClipBounds", g.ClipBounds, 0, 0, 16, 16);\r
+ CheckBounds ("graphics.Clip.GetBounds", g.Clip.GetBounds (g), 0, 0, 16, 16);\r
+\r
+ g.Clip = new Region (new Rectangle (0, 0, 8, 8));\r
+ CheckBounds ("clip.ClipBounds", g.ClipBounds, 0, 0, 8, 8);\r
+ CheckBounds ("clip.Clip.GetBounds", g.Clip.GetBounds (g), 0, 0, 8, 8);\r
+ }\r
+\r
+ [Test]\r
+ public void ClipBounds_Rotate ()\r
+ {\r
+ Graphics g = Get (16, 16);\r
+ g.Clip = new Region (new Rectangle (0, 0, 8, 8));\r
+ g.RotateTransform (90);\r
+ CheckBounds ("rotate.ClipBounds", g.ClipBounds, 0, -8, 8, 8);\r
+ CheckBounds ("rotate.Clip.GetBounds", g.Clip.GetBounds (g), 0, -8, 8, 8);\r
+\r
+ g.Transform = new Matrix ();\r
+ CheckBounds ("identity.ClipBounds", g.Clip.GetBounds (g), 0, 0, 8, 8);\r
+ CheckBounds ("identity.Clip.GetBounds", g.Clip.GetBounds (g), 0, 0, 8, 8);\r
+ }\r
+\r
+ [Test]\r
+ public void ClipBounds_Scale ()\r
+ {\r
+ RectangleF clip = new Rectangle (0, 0, 8, 8);\r
+ Graphics g = Get (16, 16);\r
+ g.Clip = new Region (clip);\r
+ g.ScaleTransform (0.25f, 0.5f);\r
+ CheckBounds ("scale.ClipBounds", g.ClipBounds, 0, 0, 32, 16);\r
+ CheckBounds ("scale.Clip.GetBounds", g.Clip.GetBounds (g), 0, 0, 32, 16);\r
+\r
+ g.SetClip (clip);\r
+ CheckBounds ("setclip.ClipBounds", g.ClipBounds, 0, 0, 8, 8);\r
+ CheckBounds ("setclip.Clip.GetBounds", g.Clip.GetBounds (g), 0, 0, 8, 8);\r
+ }\r
+\r
+ [Test]\r
+ public void ClipBounds_Translate ()\r
+ {\r
+ Graphics g = Get (16, 16);\r
+ g.Clip = new Region (new Rectangle (0, 0, 8, 8));\r
+ Region clone = g.Clip.Clone ();\r
+ g.TranslateTransform (8, 8);\r
+ CheckBounds ("translate.ClipBounds", g.ClipBounds, -8, -8, 8, 8);\r
+ CheckBounds ("translate.Clip.GetBounds", g.Clip.GetBounds (g), -8, -8, 8, 8);\r
+\r
+ g.SetClip (clone, CombineMode.Replace);\r
+ CheckBounds ("setclip.ClipBounds", g.Clip.GetBounds (g), 0, 0, 8, 8);\r
+ CheckBounds ("setclip.Clip.GetBounds", g.Clip.GetBounds (g), 0, 0, 8, 8);\r
+ }\r
+\r
+ [Test]\r
+ public void ClipBounds_Transform_Translation ()\r
+ {\r
+ Graphics g = Get (16, 16);\r
+ g.Clip = new Region (new Rectangle (0, 0, 8, 8));\r
+ g.Transform = new Matrix (1, 0, 0, 1, 8, 8);\r
+ CheckBounds ("transform.ClipBounds", g.ClipBounds, -8, -8, 8, 8);\r
+ CheckBounds ("transform.Clip.GetBounds", g.Clip.GetBounds (g), -8, -8, 8, 8);\r
+\r
+ g.ResetTransform ();\r
+ CheckBounds ("reset.ClipBounds", g.ClipBounds, 0, 0, 8, 8);\r
+ CheckBounds ("reset.Clip.GetBounds", g.Clip.GetBounds (g), 0, 0, 8, 8);\r
+ }\r
+\r
+ [Test]\r
+ public void ClipBounds_Transform_Scale ()\r
+ {\r
+ Graphics g = Get (16, 16);\r
+ g.Clip = new Region (new Rectangle (0, 0, 8, 8));\r
+ g.Transform = new Matrix (0.5f, 0, 0, 0.25f, 0, 0);\r
+ CheckBounds ("scale.ClipBounds", g.ClipBounds, 0, 0, 16, 32);\r
+ CheckBounds ("scale.Clip.GetBounds", g.Clip.GetBounds (g), 0, 0, 16, 32);\r
+\r
+ g.ResetClip ();\r
+ // see next test for ClipBounds\r
+ CheckBounds ("resetclip.Clip.GetBounds", g.Clip.GetBounds (g), -4194304, -4194304, 8388608, 8388608);\r
+ Assert ("IsInfinite", g.Clip.IsInfinite (g));\r
+ }\r
+\r
+ [Test]\r
+ [Category ("NotWorking")]\r
+ public void ClipBounds_Transform_Scale_Strange ()\r
+ {\r
+ Graphics g = Get (16, 16);\r
+ g.Clip = new Region (new Rectangle (0, 0, 8, 8));\r
+ g.Transform = new Matrix (0.5f, 0, 0, 0.25f, 0, 0);\r
+ CheckBounds ("scale.ClipBounds", g.ClipBounds, 0, 0, 16, 32);\r
+ CheckBounds ("scale.Clip.GetBounds", g.Clip.GetBounds (g), 0, 0, 16, 32);\r
+\r
+ g.ResetClip ();\r
+ // note: strange case where g.ClipBounds and g.Clip.GetBounds are different\r
+ CheckBounds ("resetclip.ClipBounds", g.ClipBounds, -8388608, -16777216, 16777216, 33554432);\r
+ }\r
+\r
+ [Test]\r
+ public void ClipBounds_Multiply ()\r
+ {\r
+ Graphics g = Get (16, 16);\r
+ g.Clip = new Region (new Rectangle (0, 0, 8, 8));\r
+ g.Transform = new Matrix (1, 0, 0, 1, 8, 8);\r
+ g.MultiplyTransform (g.Transform);\r
+ CheckBounds ("multiply.ClipBounds", g.ClipBounds, -16, -16, 8, 8);\r
+ CheckBounds ("multiply.Clip.GetBounds", g.Clip.GetBounds (g), -16, -16, 8, 8);\r
+\r
+ g.ResetTransform ();\r
+ CheckBounds ("reset.ClipBounds", g.ClipBounds, 0, 0, 8, 8);\r
+ CheckBounds ("reset.Clip.GetBounds", g.Clip.GetBounds (g), 0, 0, 8, 8);\r
+ }\r
+\r
+ [Test]\r
+ public void ClipBounds_Cumulative_Effects ()\r
+ {\r
+ Graphics g = Get (16, 16);\r
+ CheckBounds ("graphics.ClipBounds", g.ClipBounds, 0, 0, 16, 16);\r
+ CheckBounds ("graphics.Clip.GetBounds", g.Clip.GetBounds (g), 0, 0, 16, 16);\r
+\r
+ g.Clip = new Region (new Rectangle (0, 0, 8, 8));\r
+ CheckBounds ("clip.ClipBounds", g.ClipBounds, 0, 0, 8, 8);\r
+ CheckBounds ("clip.Clip.GetBounds", g.Clip.GetBounds (g), 0, 0, 8, 8);\r
+\r
+ g.RotateTransform (90);\r
+ CheckBounds ("rotate.ClipBounds", g.ClipBounds, 0, -8, 8, 8);\r
+ CheckBounds ("rotate.Clip.GetBounds", g.Clip.GetBounds (g), 0, -8, 8, 8);\r
+\r
+ g.ScaleTransform (0.25f, 0.5f);\r
+ CheckBounds ("scale.ClipBounds", g.ClipBounds, 0, -16, 32, 16);\r
+ CheckBounds ("scale.Clip.GetBounds", g.Clip.GetBounds (g), 0, -16, 32, 16);\r
+\r
+ g.TranslateTransform (8, 8);\r
+ CheckBounds ("translate.ClipBounds", g.ClipBounds, -8, -24, 32, 16);\r
+ CheckBounds ("translate.Clip.GetBounds", g.Clip.GetBounds (g), -8, -24, 32, 16);\r
+ \r
+ g.MultiplyTransform (g.Transform);\r
+ CheckBounds ("multiply.ClipBounds", g.ClipBounds, -104, -56, 64, 64);\r
+ CheckBounds ("multiply.Clip.GetBounds", g.Clip.GetBounds (g), -104, -56, 64, 64);\r
+ }\r
+\r
+ [Test]\r
+ [ExpectedException (typeof (ArgumentException))]\r
+ public void ScaleTransform_X0 ()\r
+ {\r
+ Graphics g = Get (16, 16);\r
+ g.ScaleTransform (0, 1);\r
+ }\r
+\r
+ [Test]\r
+ [ExpectedException (typeof (ArgumentException))]\r
+ public void ScaleTransform_Y0 ()\r
+ {\r
+ Graphics g = Get (16, 16);\r
+ g.ScaleTransform (1, 0);\r
+ }\r
}
}
-