Author: spouliot Date: 2007-05-15 16:16:00 -0400 (Tue, 15 May 2007) New Revision: 77436
Modified: trunk/mcs/class/System.Drawing/Test/System.Drawing/ChangeLog trunk/mcs/class/System.Drawing/Test/System.Drawing/GDIPlusTest.cs trunk/mcs/class/System.Drawing/Test/System.Drawing/TestGraphics.cs trunk/mcs/class/System.Drawing/Test/System.Drawing/TestRectangle.cs trunk/mcs/class/System.Drawing/Test/System.Drawing/TestRectangleF.cs Log: 2007-05-15 Sebastien Pouliot <[EMAIL PROTECTED]> * GDIPlusTest.cs: Add test cases for GdipDrawImage[I] (overflow) and GdipDrawImageRectRect (GraphicsUnit). * TestGraphics.cs: Add test cases for DrawImage, DrawImageUnscaled and DrawImageUnscaledAndClipped (2.0). * TestRectangle.cs: Add test cases for negative width/height. Fix some test cases that were using RectangleF instead of Rectangle. * TestRectangleF.cs: Add test cases for negative width/height. Modified: trunk/mcs/class/System.Drawing/Test/System.Drawing/ChangeLog =================================================================== --- trunk/mcs/class/System.Drawing/Test/System.Drawing/ChangeLog 2007-05-15 20:12:03 UTC (rev 77435) +++ trunk/mcs/class/System.Drawing/Test/System.Drawing/ChangeLog 2007-05-15 20:16:00 UTC (rev 77436) @@ -1,3 +1,13 @@ +2007-05-15 Sebastien Pouliot <[EMAIL PROTECTED]> + + * GDIPlusTest.cs: Add test cases for GdipDrawImage[I] (overflow) and + GdipDrawImageRectRect (GraphicsUnit). + * TestGraphics.cs: Add test cases for DrawImage, DrawImageUnscaled and + DrawImageUnscaledAndClipped (2.0). + * TestRectangle.cs: Add test cases for negative width/height. Fix some + test cases that were using RectangleF instead of Rectangle. + * TestRectangleF.cs: Add test cases for negative width/height. + 2007-05-08 Everaldo Canuto <[EMAIL PROTECTED]> * TestGraphics.cs: MeasureString_MultlineString_Width added (NotWorking) Modified: trunk/mcs/class/System.Drawing/Test/System.Drawing/GDIPlusTest.cs =================================================================== --- trunk/mcs/class/System.Drawing/Test/System.Drawing/GDIPlusTest.cs 2007-05-15 20:12:03 UTC (rev 77435) +++ trunk/mcs/class/System.Drawing/Test/System.Drawing/GDIPlusTest.cs 2007-05-15 20:16:00 UTC (rev 77436) @@ -218,25 +218,93 @@ // Graphics [Test] - public void Graphics_FromImage () + public void GdipGetImageGraphicsContext_Null () { IntPtr graphics; Assert.AreEqual (Status.InvalidParameter, GDIPlus.GdipGetImageGraphicsContext (IntPtr.Zero, out graphics), "GdipGetImageGraphicsContext"); + } - IntPtr image; - GDIPlus.GdipCreateBitmapFromScan0 (10, 10, 0, PixelFormat.Format32bppArgb, IntPtr.Zero, out image); - Assert.IsTrue (image != IntPtr.Zero, "image"); - + private void Graphics_DrawImage (IntPtr image, bool metafile) + { + IntPtr graphics; Assert.AreEqual (Status.Ok, GDIPlus.GdipGetImageGraphicsContext (image, out graphics), "GdipGetImageGraphicsContext"); Assert.IsTrue (graphics != IntPtr.Zero, "graphics"); + if (metafile) { + Assert.AreEqual (Status.Ok, GDIPlus.GdipDrawImage (graphics, image, Single.MinValue, Single.MaxValue), "FloatMinMax"); + Assert.AreEqual (Status.Ok, GDIPlus.GdipDrawImageI (graphics, image, Int32.MinValue, Int32.MaxValue), "IntMinMax"); + } else { + Assert.AreEqual (Status.ValueOverflow, GDIPlus.GdipDrawImage (graphics, image, Single.MinValue, Single.MaxValue), "FloatOverflow"); + Assert.AreEqual (Status.Ok, GDIPlus.GdipDrawImage (graphics, image, 1073741888, 0), "FloatXMax"); + Assert.AreEqual (Status.ValueOverflow, GDIPlus.GdipDrawImage (graphics, image, 1073741889, 0), "FloatXMaxOverflow"); + Assert.AreEqual (Status.Ok, GDIPlus.GdipDrawImage (graphics, image, 0, 1073741888), "FloatYMax"); + Assert.AreEqual (Status.ValueOverflow, GDIPlus.GdipDrawImage (graphics, image, 0, 1073741889), "FloatYMaxOverflow"); + Assert.AreEqual (Status.Ok, GDIPlus.GdipDrawImage (graphics, image, -1073741888, 0), "FloatXMin"); + Assert.AreEqual (Status.ValueOverflow, GDIPlus.GdipDrawImage (graphics, image, -1073741889, 0), "FloatXMinOverflow"); + Assert.AreEqual (Status.Ok, GDIPlus.GdipDrawImage (graphics, image, 0, -1073741888), "FloatYMin"); + Assert.AreEqual (Status.ValueOverflow, GDIPlus.GdipDrawImage (graphics, image, 0, -1073741889), "FloatYMinOverflow"); + + Assert.AreEqual (Status.ValueOverflow, GDIPlus.GdipDrawImageI (graphics, image, Int32.MinValue, Int32.MaxValue), "IntOverflow"); + // the real limit of MS GDI+ is 1073741951 but differs (by a very few) from the float limit + Assert.AreEqual (Status.Ok, GDIPlus.GdipDrawImageI (graphics, image, 1073741824, 0), "IntXMax"); + Assert.AreEqual (Status.ValueOverflow, GDIPlus.GdipDrawImageI (graphics, image, 1073741952, 0), "IntXMaxOverflow"); + Assert.AreEqual (Status.Ok, GDIPlus.GdipDrawImageI (graphics, image, 0, 1073741824), "IntYMax"); + Assert.AreEqual (Status.ValueOverflow, GDIPlus.GdipDrawImageI (graphics, image, 0, 1073741952), "IntYMaxOverflow"); + Assert.AreEqual (Status.Ok, GDIPlus.GdipDrawImageI (graphics, image, -1073741824, 0), "IntXMin"); + // the real limit of MS GDI+ is -1073741825 but int-to-float convertion in libgdiplus turns this into a -1073741824 + Assert.AreEqual (Status.ValueOverflow, GDIPlus.GdipDrawImageI (graphics, image, -1073741899, 0), "IntXMinOverflow"); + Assert.AreEqual (Status.Ok, GDIPlus.GdipDrawImageI (graphics, image, 0, -1073741824), "IntYMin"); + Assert.AreEqual (Status.ValueOverflow, GDIPlus.GdipDrawImageI (graphics, image, 0, -1073741899), "IntYMinOverflow"); + } + + Assert.AreEqual (Status.InvalidParameter, GDIPlus.GdipDrawImageRectRectI (graphics, image, 0, 0, 10, 10, 0, 0, 10, 10, GraphicsUnit.Display, IntPtr.Zero, null, IntPtr.Zero), "Display"); + Assert.AreEqual (Status.NotImplemented, GDIPlus.GdipDrawImageRectRectI (graphics, image, 0, 0, 10, 10, 0, 0, 10, 10, GraphicsUnit.Document, IntPtr.Zero, null, IntPtr.Zero), "Document"); + Assert.AreEqual (Status.NotImplemented, GDIPlus.GdipDrawImageRectRectI (graphics, image, 0, 0, 10, 10, 0, 0, 10, 10, GraphicsUnit.Inch, IntPtr.Zero, null, IntPtr.Zero), "Inch"); + Assert.AreEqual (Status.NotImplemented, GDIPlus.GdipDrawImageRectRectI (graphics, image, 0, 0, 10, 10, 0, 0, 10, 10, GraphicsUnit.Millimeter, IntPtr.Zero, null, IntPtr.Zero), "Millimeter"); + Assert.AreEqual (Status.Ok, GDIPlus.GdipDrawImageRectRectI (graphics, image, 0, 0, 10, 10, 0, 0, 10, 10, GraphicsUnit.Pixel, IntPtr.Zero, null, IntPtr.Zero), "Pixel"); + Assert.AreEqual (Status.NotImplemented, GDIPlus.GdipDrawImageRectRectI (graphics, image, 0, 0, 10, 10, 0, 0, 10, 10, GraphicsUnit.Point, IntPtr.Zero, null, IntPtr.Zero), "Point"); + Assert.AreEqual (Status.InvalidParameter, GDIPlus.GdipDrawImageRectRectI (graphics, image, 0, 0, 10, 10, 0, 0, 10, 10, GraphicsUnit.World, IntPtr.Zero, null, IntPtr.Zero), "World"); + Assert.AreEqual (Status.InvalidParameter, GDIPlus.GdipDrawImageRectRectI (graphics, image, 0, 0, 10, 10, 0, 0, 10, 10, (GraphicsUnit) Int32.MinValue, IntPtr.Zero, null, IntPtr.Zero), "invalid"); + Assert.AreEqual (Status.Ok, GDIPlus.GdipDeleteGraphics (graphics), "GdipDeleteGraphics"); Assert.AreEqual (Status.InvalidParameter, GDIPlus.GdipDeleteGraphics (IntPtr.Zero), "GdipDeleteGraphics-null"); + } + [Test] + public void Graphics_FromImage_Bitmap () + { + IntPtr image; + GDIPlus.GdipCreateBitmapFromScan0 (10, 10, 0, PixelFormat.Format32bppArgb, IntPtr.Zero, out image); + Assert.IsTrue (image != IntPtr.Zero, "image"); + + Graphics_DrawImage (image, false); + Assert.AreEqual (Status.Ok, GDIPlus.GdipDisposeImage (image), "GdipDisposeImage"); } [Test] + [Category ("NotWorking")] // incomplete GdipDrawImageRectRect[I] support + public void Graphics_FromImage_Metafile () + { + using (Bitmap bmp = new Bitmap (100, 100, PixelFormat.Format32bppArgb)) { + using (Graphics g = Graphics.FromImage (bmp)) { + IntPtr metafile = IntPtr.Zero; + IntPtr hdc = g.GetHdc (); + try { + RectangleF rect = new RectangleF (10, 20, 100, 200); + Assert.AreEqual (Status.Ok, GDIPlus.GdipRecordMetafileFileName ("test-drawimage.emf", hdc, EmfType.EmfPlusOnly, ref rect, MetafileFrameUnit.GdiCompatible, null, out metafile), "GdipRecordMetafileFileName"); + Assert.IsTrue (metafile != IntPtr.Zero, "image"); + + Graphics_DrawImage (metafile, true); + } + finally { + Assert.AreEqual (Status.Ok, GDIPlus.GdipDisposeImage (metafile), "GdipDisposeImage"); + } + } + } + } + + [Test] public void MeasureCharacterRanges () { IntPtr image; Modified: trunk/mcs/class/System.Drawing/Test/System.Drawing/TestGraphics.cs =================================================================== --- trunk/mcs/class/System.Drawing/Test/System.Drawing/TestGraphics.cs 2007-05-15 20:12:03 UTC (rev 77435) +++ trunk/mcs/class/System.Drawing/Test/System.Drawing/TestGraphics.cs 2007-05-15 20:16:00 UTC (rev 77436) @@ -2192,5 +2192,518 @@ } } } + + [Test] + [ExpectedException (typeof (ArgumentNullException))] + public void DrawIcon_NullRectangle () + { + using (Bitmap bmp = new Bitmap (40, 40)) { + using (Graphics g = Graphics.FromImage (bmp)) { + g.DrawIcon (null, new Rectangle (0, 0, 32, 32)); + } + } + } + + [Test] + public void DrawIcon_IconRectangle () + { + using (Bitmap bmp = new Bitmap (40, 40)) { + using (Graphics g = Graphics.FromImage (bmp)) { + g.DrawIcon (SystemIcons.Application, new Rectangle (0, 0, 40, 20)); + // Rectangle is empty when X, Y, Width and Height == 0 + // (yep X and Y too, RectangleF only checks for Width and Height) + g.DrawIcon (SystemIcons.Asterisk, new Rectangle (0, 0, 0, 0)); + // so this one is half-empty ;-) + g.DrawIcon (SystemIcons.Error, new Rectangle (20, 40, 0, 0)); + // negative width or height isn't empty (for Rectangle) + g.DrawIconUnstretched (SystemIcons.WinLogo, new Rectangle (10, 20, -1, 0)); + g.DrawIconUnstretched (SystemIcons.WinLogo, new Rectangle (20, 10, 0, -1)); + } + } + } + + [Test] + [ExpectedException (typeof (ArgumentNullException))] + public void DrawIcon_NullIntInt () + { + using (Bitmap bmp = new Bitmap (40, 40)) { + using (Graphics g = Graphics.FromImage (bmp)) { + g.DrawIcon (null, 4, 2); + } + } + } + + [Test] + public void DrawIcon_IconIntInt () + { + using (Bitmap bmp = new Bitmap (40, 40)) { + using (Graphics g = Graphics.FromImage (bmp)) { + g.DrawIcon (SystemIcons.Exclamation, 4, 2); + g.DrawIcon (SystemIcons.Hand, 0, 0); + } + } + } + + [Test] + [ExpectedException (typeof (ArgumentNullException))] + public void DrawIconUnstretched_NullRectangle () + { + using (Bitmap bmp = new Bitmap (40, 40)) { + using (Graphics g = Graphics.FromImage (bmp)) { + g.DrawIconUnstretched (null, new Rectangle (0, 0, 40, 20)); + } + } + } + + [Test] + public void DrawIconUnstretched_IconRectangle () + { + using (Bitmap bmp = new Bitmap (40, 40)) { + using (Graphics g = Graphics.FromImage (bmp)) { + g.DrawIconUnstretched (SystemIcons.Information, new Rectangle (0, 0, 40, 20)); + // Rectangle is empty when X, Y, Width and Height == 0 + // (yep X and Y too, RectangleF only checks for Width and Height) + g.DrawIconUnstretched (SystemIcons.Question, new Rectangle (0, 0, 0, 0)); + // so this one is half-empty ;-) + g.DrawIconUnstretched (SystemIcons.Warning, new Rectangle (20, 40, 0, 0)); + // negative width or height isn't empty (for Rectangle) + g.DrawIconUnstretched (SystemIcons.WinLogo, new Rectangle (10, 20, -1, 0)); + g.DrawIconUnstretched (SystemIcons.WinLogo, new Rectangle (20, 10, 0, -1)); + } + } + } + + [Test] + [ExpectedException (typeof (ArgumentNullException))] + public void DrawImage_NullRectangleF () + { + using (Bitmap bmp = new Bitmap (40, 40)) { + using (Graphics g = Graphics.FromImage (bmp)) { + g.DrawImage (null, new RectangleF (0, 0, 0, 0)); + } + } + } + + [Test] + public void DrawImage_ImageRectangleF () + { + using (Bitmap bmp = new Bitmap (40, 40)) { + using (Graphics g = Graphics.FromImage (bmp)) { + g.DrawImage (bmp, new RectangleF (0, 0, 0, 0)); + g.DrawImage (bmp, new RectangleF (20, 40, 0, 0)); + g.DrawImage (bmp, new RectangleF (10, 20, -1, 0)); + g.DrawImage (bmp, new RectangleF (20, 10, 0, -1)); + } + } + } + + [Test] + [ExpectedException (typeof (ArgumentNullException))] + public void DrawImage_NullPointF () + { + using (Bitmap bmp = new Bitmap (40, 40)) { + using (Graphics g = Graphics.FromImage (bmp)) { + g.DrawImage (null, new PointF (0, 0)); + } + } + } + + [Test] + public void DrawImage_ImagePointF () + { + using (Bitmap bmp = new Bitmap (40, 40)) { + using (Graphics g = Graphics.FromImage (bmp)) { + g.DrawImage (bmp, new PointF (0, 0)); + } + } + } + + [Test] + [ExpectedException (typeof (ArgumentNullException))] + public void DrawImage_NullPointFArray () + { + using (Bitmap bmp = new Bitmap (40, 40)) { + using (Graphics g = Graphics.FromImage (bmp)) { + g.DrawImage (null, new PointF[0]); + } + } + } + + [Test] + [ExpectedException (typeof (ArgumentNullException))] + public void DrawImage_ImagePointFArrayNull () + { + using (Bitmap bmp = new Bitmap (40, 40)) { + using (Graphics g = Graphics.FromImage (bmp)) { + g.DrawImage (bmp, (PointF[])null); + } + } + } + + [Test] + [ExpectedException (typeof (ArgumentException))] + public void DrawImage_ImagePointFArrayEmpty () + { + using (Bitmap bmp = new Bitmap (40, 40)) { + using (Graphics g = Graphics.FromImage (bmp)) { + g.DrawImage (bmp, new PointF[0]); + } + } + } + + [Test] + public void DrawImage_ImagePointFArray () + { + using (Bitmap bmp = new Bitmap (40, 40)) { + using (Graphics g = Graphics.FromImage (bmp)) { + g.DrawImage (bmp, new PointF[] { + new PointF (0, 0), new PointF (1, 1), new PointF (2, 2) }); + } + } + } + + [Test] + [ExpectedException (typeof (ArgumentNullException))] + public void DrawImage_NullRectangle () + { + using (Bitmap bmp = new Bitmap (40, 40)) { + using (Graphics g = Graphics.FromImage (bmp)) { + g.DrawImage (null, new Rectangle (0, 0, 0, 0)); + } + } + } + + [Test] + public void DrawImage_ImageRectangle () + { + using (Bitmap bmp = new Bitmap (40, 40)) { + using (Graphics g = Graphics.FromImage (bmp)) { + // Rectangle is empty when X, Y, Width and Height == 0 + // (yep X and Y too, RectangleF only checks for Width and Height) + g.DrawImage (bmp, new Rectangle (0, 0, 0, 0)); + // so this one is half-empty ;-) + g.DrawImage (bmp, new Rectangle (20, 40, 0, 0)); + // negative width or height isn't empty (for Rectangle) + g.DrawImage (bmp, new Rectangle (10, 20, -1, 0)); + g.DrawImage (bmp, new Rectangle (20, 10, 0, -1)); + } + } + } + + [Test] + [ExpectedException (typeof (ArgumentNullException))] + public void DrawImage_NullPoint () + { + using (Bitmap bmp = new Bitmap (40, 40)) { + using (Graphics g = Graphics.FromImage (bmp)) { + g.DrawImage (null, new Point (0, 0)); + } + } + } + + [Test] + public void DrawImage_ImagePoint () + { + using (Bitmap bmp = new Bitmap (40, 40)) { + using (Graphics g = Graphics.FromImage (bmp)) { + g.DrawImage (bmp, new Point (0, 0)); + } + } + } + + [Test] + [ExpectedException (typeof (ArgumentNullException))] + public void DrawImage_NullPointArray () + { + using (Bitmap bmp = new Bitmap (40, 40)) { + using (Graphics g = Graphics.FromImage (bmp)) { + g.DrawImage (null, new Point[0]); + } + } + } + + [Test] + [ExpectedException (typeof (ArgumentNullException))] + public void DrawImage_ImagePointArrayNull () + { + using (Bitmap bmp = new Bitmap (40, 40)) { + using (Graphics g = Graphics.FromImage (bmp)) { + g.DrawImage (bmp, (Point[]) null); + } + } + } + + [Test] + [ExpectedException (typeof (ArgumentException))] + public void DrawImage_ImagePointArrayEmpty () + { + using (Bitmap bmp = new Bitmap (40, 40)) { + using (Graphics g = Graphics.FromImage (bmp)) { + g.DrawImage (bmp, new Point[0]); + } + } + } + + [Test] + public void DrawImage_ImagePointArray () + { + using (Bitmap bmp = new Bitmap (40, 40)) { + using (Graphics g = Graphics.FromImage (bmp)) { + g.DrawImage (bmp, new Point[] { + new Point (0, 0), new Point (1, 1), new Point (2, 2) }); + } + } + } + + [Test] + [ExpectedException (typeof (ArgumentNullException))] + public void DrawImage_NullIntInt () + { + using (Bitmap bmp = new Bitmap (40, 40)) { + using (Graphics g = Graphics.FromImage (bmp)) { + g.DrawImage (null, Int32.MaxValue, Int32.MinValue); + } + } + } + + [Test] + [ExpectedException (typeof (OverflowException))] + public void DrawImage_ImageIntInt_Overflow () + { + using (Bitmap bmp = new Bitmap (40, 40)) { + using (Graphics g = Graphics.FromImage (bmp)) { + g.DrawImage (bmp, Int32.MaxValue, Int32.MinValue); + } + } + } + + [Test] + public void DrawImage_ImageIntInt () + { + using (Bitmap bmp = new Bitmap (40, 40)) { + using (Graphics g = Graphics.FromImage (bmp)) { + g.DrawImage (bmp, -40, -40); + } + } + } + + [Test] + [ExpectedException (typeof (ArgumentNullException))] + public void DrawImage_NullFloat () + { + using (Bitmap bmp = new Bitmap (40, 40)) { + using (Graphics g = Graphics.FromImage (bmp)) { + g.DrawImage (null, Single.MaxValue, Single.MinValue); + } + } + } + + [Test] + [ExpectedException (typeof (OverflowException))] + public void DrawImage_ImageFloatFloat_Overflow () + { + using (Bitmap bmp = new Bitmap (40, 40)) { + using (Graphics g = Graphics.FromImage (bmp)) { + g.DrawImage (bmp, Single.MaxValue, Single.MinValue); + } + } + } + + [Test] + public void DrawImage_ImageFloatFloat () + { + using (Bitmap bmp = new Bitmap (40, 40)) { + using (Graphics g = Graphics.FromImage (bmp)) { + g.DrawImage (bmp, -40.0f, -40.0f); + } + } + } + + [Test] + [ExpectedException (typeof (ArgumentNullException))] + public void DrawImage_NullRectangleRectangleGraphicsUnit () + { + using (Bitmap bmp = new Bitmap (40, 40)) { + using (Graphics g = Graphics.FromImage (bmp)) { + g.DrawImage (null, new Rectangle (), new Rectangle (), GraphicsUnit.Display); + } + } + } + + private void DrawImage_ImageRectangleRectangleGraphicsUnit (GraphicsUnit unit) + { + using (Bitmap bmp = new Bitmap (40, 40)) { + using (Graphics g = Graphics.FromImage (bmp)) { + Rectangle r = new Rectangle (0, 0, 40, 40); + g.DrawImage (bmp, r, r, unit); + } + } + } + + [Test] + [ExpectedException (typeof (ArgumentException))] + public void DrawImage_ImageRectangleRectangleGraphicsUnit_Display () + { + DrawImage_ImageRectangleRectangleGraphicsUnit (GraphicsUnit.Display); + } + + [Test] + [ExpectedException (typeof (NotImplementedException))] + public void DrawImage_ImageRectangleRectangleGraphicsUnit_Document () + { + DrawImage_ImageRectangleRectangleGraphicsUnit (GraphicsUnit.Document); + } + + [Test] + [ExpectedException (typeof (NotImplementedException))] + public void DrawImage_ImageRectangleRectangleGraphicsUnit_Inch () + { + DrawImage_ImageRectangleRectangleGraphicsUnit (GraphicsUnit.Inch); + } + + [Test] + [ExpectedException (typeof (NotImplementedException))] + public void DrawImage_ImageRectangleRectangleGraphicsUnit_Millimeter () + { + DrawImage_ImageRectangleRectangleGraphicsUnit (GraphicsUnit.Millimeter); + } + + [Test] + public void DrawImage_ImageRectangleRectangleGraphicsUnit_Pixel () + { + // this unit works + DrawImage_ImageRectangleRectangleGraphicsUnit (GraphicsUnit.Pixel); + } + + [Test] + [ExpectedException (typeof (NotImplementedException))] + public void DrawImage_ImageRectangleRectangleGraphicsUnit_Point () + { + DrawImage_ImageRectangleRectangleGraphicsUnit (GraphicsUnit.Point); + } + + [Test] + [ExpectedException (typeof (ArgumentException))] + public void DrawImage_ImageRectangleRectangleGraphicsUnit_World () + { + DrawImage_ImageRectangleRectangleGraphicsUnit (GraphicsUnit.World); + } + + [Test] + [ExpectedException (typeof (ArgumentNullException))] + public void DrawImageUnscaled_NullPoint () + { + using (Bitmap bmp = new Bitmap (40, 40)) { + using (Graphics g = Graphics.FromImage (bmp)) { + g.DrawImageUnscaled (null, new Point (0, 0)); + } + } + } + + [Test] + public void DrawImageUnscaled_ImagePoint () + { + using (Bitmap bmp = new Bitmap (40, 40)) { + using (Graphics g = Graphics.FromImage (bmp)) { + g.DrawImageUnscaled (bmp, new Point (0, 0)); + } + } + } + + [Test] + [ExpectedException (typeof (ArgumentNullException))] + public void DrawImageUnscaled_NullRectangle () + { + using (Bitmap bmp = new Bitmap (40, 40)) { + using (Graphics g = Graphics.FromImage (bmp)) { + g.DrawImageUnscaled (null, new Rectangle (0, 0, -1, -1)); + } + } + } + + [Test] + public void DrawImageUnscaled_ImageRectangle () + { + using (Bitmap bmp = new Bitmap (40, 40)) { + using (Graphics g = Graphics.FromImage (bmp)) { + g.DrawImageUnscaled (bmp, new Rectangle (0, 0, -1, -1)); + } + } + } + + [Test] + [ExpectedException (typeof (ArgumentNullException))] + public void DrawImageUnscaled_NullIntInt () + { + using (Bitmap bmp = new Bitmap (40, 40)) { + using (Graphics g = Graphics.FromImage (bmp)) { + g.DrawImageUnscaled (null, 0, 0); + } + } + } + + [Test] + public void DrawImageUnscaled_ImageIntInt () + { + using (Bitmap bmp = new Bitmap (40, 40)) { + using (Graphics g = Graphics.FromImage (bmp)) { + g.DrawImageUnscaled (bmp, 0, 0); + } + } + } + + [Test] + [ExpectedException (typeof (ArgumentNullException))] + public void DrawImageUnscaled_NullIntIntIntInt () + { + using (Bitmap bmp = new Bitmap (40, 40)) { + using (Graphics g = Graphics.FromImage (bmp)) { + g.DrawImageUnscaled (null, 0, 0, -1, -1); + } + } + } + + [Test] + public void DrawImageUnscaled_ImageIntIntIntInt () + { + using (Bitmap bmp = new Bitmap (40, 40)) { + using (Graphics g = Graphics.FromImage (bmp)) { + g.DrawImageUnscaled (bmp, 0, 0, -1, -1); + } + } + } +#if NET_2_0 + [Test] + [ExpectedException (typeof (ArgumentNullException))] + public void DrawImageUnscaledAndClipped_Null () + { + using (Bitmap bmp = new Bitmap (40, 40)) { + using (Graphics g = Graphics.FromImage (bmp)) { + g.DrawImageUnscaledAndClipped (null, new Rectangle (0, 0, 0, 0)); + } + } + } + + [Test] + public void DrawImageUnscaledAndClipped () + { + using (Bitmap bmp = new Bitmap (40, 40)) { + using (Graphics g = Graphics.FromImage (bmp)) { + // Rectangle is empty when X, Y, Width and Height == 0 + // (yep X and Y too, RectangleF only checks for Width and Height) + g.DrawImageUnscaledAndClipped (bmp, new Rectangle (0, 0, 0, 0)); + // so this one is half-empty ;-) + g.DrawImageUnscaledAndClipped (bmp, new Rectangle (20, 40, 0, 0)); + // negative width or height isn't empty (for Rectangle) + g.DrawImageUnscaledAndClipped (bmp, new Rectangle (10, 20, -1, 0)); + g.DrawImageUnscaledAndClipped (bmp, new Rectangle (20, 10, 0, -1)); + // smaller + g.DrawImageUnscaledAndClipped (bmp, new Rectangle (0, 0, 10, 20)); + g.DrawImageUnscaledAndClipped (bmp, new Rectangle (0, 0, 40, 10)); + g.DrawImageUnscaledAndClipped (bmp, new Rectangle (0, 0, 80, 20)); + } + } + } +#endif } } Modified: trunk/mcs/class/System.Drawing/Test/System.Drawing/TestRectangle.cs =================================================================== --- trunk/mcs/class/System.Drawing/Test/System.Drawing/TestRectangle.cs 2007-05-15 20:12:03 UTC (rev 77435) +++ trunk/mcs/class/System.Drawing/Test/System.Drawing/TestRectangle.cs 2007-05-15 20:16:00 UTC (rev 77436) @@ -82,6 +82,7 @@ Assert.IsFalse (rect_0.IsEmpty, "0"); Assert.IsTrue (rect_2.IsEmpty, "2"); Assert.IsFalse (rect_3.IsEmpty, "3"); + Assert.IsFalse (new Rectangle (0, 0, -1, -1).IsEmpty, "negative w/h"); } [Test] @@ -202,32 +203,51 @@ [Test] public void Union () { - Assert.AreEqual (RectangleF.FromLTRB (5, 5, 50, 50), RectangleF.Union (rect_0, rect_1)); + Assert.AreEqual (Rectangle.FromLTRB (5, 5, 50, 50), Rectangle.Union (rect_0, rect_1)); } [Test] public void Operator_Equal () { - RectangleF r0 = new RectangleF (1, 2, 3, 4); - RectangleF r1 = r0; + Rectangle r0 = new Rectangle (1, 2, 3, 4); + Rectangle r1 = r0; Assert.IsTrue (r0 == r1, "self"); - Assert.IsFalse (r0 == new RectangleF (0, 2, 3, 4), "X"); - Assert.IsFalse (r0 == new RectangleF (1, 0, 3, 4), "Y"); - Assert.IsFalse (r0 == new RectangleF (1, 2, 0, 4), "Width"); - Assert.IsFalse (r0 == new RectangleF (1, 2, 3, 0), "Height"); + Assert.IsFalse (r0 == new Rectangle (0, 2, 3, 4), "X"); + Assert.IsFalse (r0 == new Rectangle (1, 0, 3, 4), "Y"); + Assert.IsFalse (r0 == new Rectangle (1, 2, 0, 4), "Width"); + Assert.IsFalse (r0 == new Rectangle (1, 2, 3, 0), "Height"); } [Test] public void Operator_NotEqual () { - RectangleF r0 = new RectangleF (1, 2, 3, 4); - RectangleF r1 = r0; + Rectangle r0 = new Rectangle (1, 2, 3, 4); + Rectangle r1 = r0; Assert.IsFalse (r0 != r1, "self"); - Assert.IsTrue (r0 != new RectangleF (0, 2, 3, 4), "X"); - Assert.IsTrue (r0 != new RectangleF (1, 0, 3, 4), "Y"); - Assert.IsTrue (r0 != new RectangleF (1, 2, 0, 4), "Width"); - Assert.IsTrue (r0 != new RectangleF (1, 2, 3, 0), "Height"); + Assert.IsTrue (r0 != new Rectangle (0, 2, 3, 4), "X"); + Assert.IsTrue (r0 != new Rectangle (1, 0, 3, 4), "Y"); + Assert.IsTrue (r0 != new Rectangle (1, 2, 0, 4), "Width"); + Assert.IsTrue (r0 != new Rectangle (1, 2, 3, 0), "Height"); } + + [Test] + public void NegativeWidth () + { + Rectangle r = new Rectangle (0, 0, -1, 10); + Assert.AreEqual (0, r.X, "X"); + Assert.AreEqual (0, r.Y, "Y"); + Assert.AreEqual (-1, r.Width, "Width"); + Assert.AreEqual (10, r.Height, "Height"); + } + + [Test] + public void NegativeHeight () + { + Rectangle r = new Rectangle (10, 10, 10, -1); + Assert.AreEqual (10, r.X, "X"); + Assert.AreEqual (10, r.Y, "Y"); + Assert.AreEqual (10, r.Width, "Width"); + Assert.AreEqual (-1, r.Height, "Height"); + } } } - Modified: trunk/mcs/class/System.Drawing/Test/System.Drawing/TestRectangleF.cs =================================================================== --- trunk/mcs/class/System.Drawing/Test/System.Drawing/TestRectangleF.cs 2007-05-15 20:12:03 UTC (rev 77435) +++ trunk/mcs/class/System.Drawing/Test/System.Drawing/TestRectangleF.cs 2007-05-15 20:16:00 UTC (rev 77436) @@ -84,6 +84,7 @@ Assert.IsTrue (rect_2.IsEmpty, "2"); Assert.IsTrue (rect_3.IsEmpty, "3"); Assert.IsTrue (rect_6.IsEmpty, "6"); + Assert.IsTrue (new RectangleF (0, 0, -1, -1).IsEmpty, "negative w/h"); } [Test] @@ -216,6 +217,25 @@ Assert.IsTrue (r0 != new RectangleF (1, 2, 0, 4), "Width"); Assert.IsTrue (r0 != new RectangleF (1, 2, 3, 0), "Height"); } + + [Test] + public void NegativeWidth () + { + RectangleF r = new RectangleF (0, 0, -1, 10); + Assert.AreEqual (0, r.X, "X"); + Assert.AreEqual (0, r.Y, "Y"); + Assert.AreEqual (-1, r.Width, "Width"); + Assert.AreEqual (10, r.Height, "Height"); + } + + [Test] + public void NegativeHeight () + { + RectangleF r = new RectangleF (10, 10, 10, -1); + Assert.AreEqual (10, r.X, "X"); + Assert.AreEqual (10, r.Y, "Y"); + Assert.AreEqual (10, r.Width, "Width"); + Assert.AreEqual (-1, r.Height, "Height"); + } } } - _______________________________________________ Mono-patches maillist - Mono-patches@lists.ximian.com http://lists.ximian.com/mailman/listinfo/mono-patches