X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mcs%2Fclass%2FSystem.Drawing%2FTest%2FSystem.Drawing%2FTestImage.cs;h=1b430ae52e212d44aad8662dfd2c850caff888e6;hb=90d6059c5475419ddf6e0fc4b49098158010cab0;hp=7a77f3da2259e66672029509c0be6df26bf20905;hpb=f73e0d5c67f0d26e85b92fc4b75fc48783f20d64;p=mono.git diff --git a/mcs/class/System.Drawing/Test/System.Drawing/TestImage.cs b/mcs/class/System.Drawing/Test/System.Drawing/TestImage.cs index 7a77f3da225..1b430ae52e2 100644 --- a/mcs/class/System.Drawing/Test/System.Drawing/TestImage.cs +++ b/mcs/class/System.Drawing/Test/System.Drawing/TestImage.cs @@ -1,15 +1,12 @@ // // Image class testing unit // -// Author: -// -// Jordi Mas i Hernàndez (jmas@softcatala.org> +// Authors: +// Jordi Mas i Hernàndez (jmas@softcatala.org> +// Sebastien Pouliot // // (C) 2005 Ximian, Inc. http://www.ximian.com -// - -// -// Copyright (C) 2005 Novell, Inc (http://www.novell.com) +// Copyright (C) 2005-2007 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 @@ -30,26 +27,368 @@ // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. // + using System; using System.Drawing; using System.Drawing.Imaging; -using NUnit.Framework; using System.IO; -using System.Runtime.InteropServices; +using System.Reflection; using System.Security.Permissions; +using System.Xml.Serialization; +using NUnit.Framework; namespace MonoTests.System.Drawing{ [TestFixture] [SecurityPermission (SecurityAction.Deny, UnmanagedCode = true)] - public class TestImage { + public class ImageTest { + + private string fname; + private bool callback; + [TestFixtureSetUp] + public void FixtureSetup () + { + fname = Path.GetTempFileName (); + } + + [TestFixtureTearDown] + public void FixtureTearDown () + { + try { + File.Delete (fname); + } + catch { + } + } + + [SetUp] + public void SetUp () + { + callback = false; + } [Test] [ExpectedException (typeof (FileNotFoundException))] public void FileDoesNotExists () { - Image img = Image.FromFile ("FileDoesNotExists.jpg"); + Image.FromFile ("FileDoesNotExists.jpg"); + } + + private bool CallbackTrue () + { + callback = true; + return true; + } + + private bool CallbackFalse () + { + callback = true; + return false; + } + + [Test] + public void GetThumbnailImage_NullCallback_Tiff () + { + using (Bitmap bmp = new Bitmap (10, 10)) { + // according to documentation a callback is mandatory + Image tn = bmp.GetThumbnailImage (10, 5, null, IntPtr.Zero); + Assert.AreEqual (5, tn.Height, "Height"); + Assert.AreEqual (10, tn.Width, "Width"); + Assert.IsFalse (callback, "Callback called"); + tn.Save (fname, ImageFormat.Tiff); + } + } + + [Test] + [ExpectedException (typeof (OutOfMemoryException))] + public void GetThumbnailImage_Height_Zero () + { + using (Bitmap bmp = new Bitmap (10, 10)) { + Image tn = bmp.GetThumbnailImage (5, 0, new Image.GetThumbnailImageAbort (CallbackFalse), IntPtr.Zero); + } + } + + [Test] + [ExpectedException (typeof (OutOfMemoryException))] + public void GetThumbnailImage_Width_Negative () + { + using (Bitmap bmp = new Bitmap (10, 10)) { + Image tn = bmp.GetThumbnailImage (-5, 5, new Image.GetThumbnailImageAbort (CallbackFalse), IntPtr.Zero); + } + } + + [Test] + public void GetThumbnailImage_CallbackData_Invalid () + { + using (Bitmap bmp = new Bitmap (10, 10)) { + // according to documentation IntPtr.Zero must be supplied as data + Image tn = bmp.GetThumbnailImage (5, 5, new Image.GetThumbnailImageAbort (CallbackFalse), (IntPtr)Int32.MaxValue); + Assert.AreEqual (5, tn.Height, "Height"); + Assert.AreEqual (5, tn.Width, "Width"); + Assert.IsFalse (callback, "Callback called"); + tn.Save (fname, ImageFormat.Tiff); + } + } + + [Test] + public void GetThumbnailImage_SameSize_Bmp () + { + using (Bitmap bmp = new Bitmap (10, 10)) { + Image tn = bmp.GetThumbnailImage (10, 10, new Image.GetThumbnailImageAbort (CallbackFalse), IntPtr.Zero); + Assert.AreEqual (10, tn.Height, "Height"); + Assert.AreEqual (10, tn.Width, "Width"); + Assert.IsFalse (callback, "Callback called"); + tn.Save (fname, ImageFormat.Bmp); + } + } + + [Test] + public void GetThumbnailImage_Smaller_Gif () + { + using (Bitmap bmp = new Bitmap (10, 10)) { + Image tn = bmp.GetThumbnailImage (4, 4, new Image.GetThumbnailImageAbort (CallbackTrue), IntPtr.Zero); + Assert.AreEqual (4, tn.Height, "Height"); + Assert.AreEqual (4, tn.Width, "Width"); + Assert.IsFalse (callback, "Callback called"); + tn.Save (fname, ImageFormat.Gif); + } + } + + [Test] + public void GetThumbnailImage_Bigger_Png () + { + using (Bitmap bmp = new Bitmap (10, 10)) { + Image tn = bmp.GetThumbnailImage (40, 40, new Image.GetThumbnailImageAbort (CallbackTrue), IntPtr.Zero); + Assert.AreEqual (40, tn.Height, "Height"); + Assert.AreEqual (40, tn.Width, "Width"); + Assert.IsFalse (callback, "Callback called"); + tn.Save (fname, ImageFormat.Png); + } + } + + [Test] +#if !NET_2_0 + [Category ("NotDotNet")] // MS 1.x throws an ArgumentNullException in this case +#endif + public void Stream_Unlocked () + { + try { + Image img = null; + using (MemoryStream ms = new MemoryStream ()) { + using (Bitmap bmp = new Bitmap (10, 10)) { + bmp.Save (ms, ImageFormat.Png); + } + ms.Position = 0; + img = Image.FromStream (ms); + } + // stream isn't available anymore + ((Bitmap) img).MakeTransparent (Color.Transparent); + } + catch (OutOfMemoryException) { + int p = (int) Environment.OSVersion.Platform; + // libgdiplus (UNIX) doesn't lazy load the image so the + // stream may be freed (and this exception will never occur) + if ((p == 4) || (p == 128) || (p == 6)) + throw; + } + } + + [Test] +#if !NET_2_0 + [Category ("NotDotNet")] // MS 1.x throws an ArgumentNullException in this case +#endif + public void Stream_Locked () + { + Image img = null; + using (MemoryStream ms = new MemoryStream ()) { + using (Bitmap bmp = new Bitmap (10, 10)) { + bmp.Save (ms, ImageFormat.Png); + } + ms.Position = 0; + img = Image.FromStream (ms); + // stream is available + ((Bitmap) img).MakeTransparent (Color.Transparent); + } + } + + [Test] +#if NET_2_0 + [Category ("NotWorking")] // http://bugzilla.ximian.com/show_bug.cgi?id=80558 +#else + [ExpectedException (typeof (InvalidOperationException))] +#endif + public void XmlSerialize () + { + new XmlSerializer (typeof (Image)); + } + + private void Wmf (Image img) + { + Assert.IsFalse (img is Bitmap, "Bitmap"); + Assert.IsTrue (img is Metafile, "Metafile"); + // as Image + Assert.AreEqual (327683, img.Flags, "Flags"); + Assert.IsTrue (img.RawFormat.Equals (ImageFormat.Wmf), "Wmf"); +#if NET_2_0 + Assert.IsNull (img.Tag, "Tag"); +#endif + } + + [Test] + public void FromFile_Metafile_Wmf () + { + string filename = TestBitmap.getInFile ("bitmaps/telescope_01.wmf"); + using (Image img = Image.FromFile (filename)) { + Wmf (img); + } + } + + [Test] + public void FromStream_Metafile_Wmf () + { + string filename = TestBitmap.getInFile ("bitmaps/telescope_01.wmf"); + using (FileStream fs = File.OpenRead (filename)) { + using (Image img = Image.FromStream (fs)) { + Wmf (img); + } + } + } + + [Test] + [Category ("NotWorking")] // https://bugzilla.novell.com/show_bug.cgi?id=338779 + [ExpectedException (typeof (ArgumentException))] + public void FromStream_Metafile_Wmf_NotOrigin () + { + string filename = TestBitmap.getInFile ("bitmaps/telescope_01.wmf"); + using (FileStream fs = File.OpenRead (filename)) { + fs.Position = fs.Length / 2; + Image.FromStream (fs); + } + } + + private void Emf (Image img) + { + Assert.IsFalse (img is Bitmap, "Bitmap"); + Assert.IsTrue (img is Metafile, "Metafile"); + // as Image + Assert.AreEqual (327683, img.Flags, "Flags"); + Assert.IsTrue (img.RawFormat.Equals (ImageFormat.Emf), "Emf"); +#if NET_2_0 + Assert.IsNull (img.Tag, "Tag"); +#endif + } + + [Test] + public void FromFile_Metafile_Emf () + { + string filename = TestBitmap.getInFile ("bitmaps/milkmateya01.emf"); + using (Image img = Image.FromFile (filename)) { + Emf (img); + } + } + + [Test] + public void FromStream_Metafile_Emf () + { + string filename = TestBitmap.getInFile ("bitmaps/milkmateya01.emf"); + using (FileStream fs = File.OpenRead (filename)) { + using (Image img = Image.FromStream (fs)) { + Emf (img); + } + } + } + + [Test] + [Category ("NotWorking")] // https://bugzilla.novell.com/show_bug.cgi?id=338779 + [ExpectedException (typeof (ArgumentException))] + public void FromStream_Metafile_Emf_NotOrigin () + { + string filename = TestBitmap.getInFile ("bitmaps/milkmateya01.emf"); + using (FileStream fs = File.OpenRead (filename)) { + fs.Position = fs.Length / 2; + Image.FromStream (fs); + } + } + + [Test] + [ExpectedException (typeof (OutOfMemoryException))] + public void FromFile_Invalid () + { + string filename = Assembly.GetExecutingAssembly ().Location; + Image.FromFile (filename); + } + + [Test] + [ExpectedException (typeof (ArgumentException))] + public void FromStream_Invalid () + { + string filename = Assembly.GetExecutingAssembly ().Location; + using (FileStream fs = File.OpenRead (filename)) { + Image.FromStream (fs); + } + } + + private Bitmap GetBitmap () + { + Bitmap bmp = new Bitmap (20, 10, PixelFormat.Format24bppRgb); + using (Graphics g = Graphics.FromImage (bmp)) + { + Pen pen = new Pen (Color.Black, 3); + g.DrawRectangle (pen, 0, 0, 5, 10); + } + return bmp; + } + + [Test] + public void StreamSaveLoad () + { + using (MemoryStream ms = new MemoryStream ()) { + using (Bitmap bmp = GetBitmap ()) { + Assert.AreEqual (0, ms.Position, "Position-1"); + bmp.Save (ms, ImageFormat.Bmp); + Assert.IsTrue (ms.Position > 0, "Position-2"); + + ms.Position = ms.Length; + Assert.AreEqual (ms.Length, ms.Position, "Position-3"); + + Bitmap bmp2 = (Bitmap)Image.FromStream (ms); + Assert.IsTrue (ms.Position > 20, "Position-4"); + + Assert.IsTrue (bmp2.RawFormat.Equals (ImageFormat.Bmp), "Bmp"); + + Assert.AreEqual (bmp.GetPixel (0, 0), bmp2.GetPixel (0, 0), "0,0"); + Assert.AreEqual (bmp.GetPixel (10, 0), bmp2.GetPixel (10, 0), "10,0"); + } + } + } + + [Test] + [ExpectedException (typeof (ArgumentException))] + public void StreamJunkSaveLoad () + { + using (MemoryStream ms = new MemoryStream ()) { + // junk + ms.WriteByte (0xff); + ms.WriteByte (0xef); + Assert.AreEqual (2, ms.Position, "Position-1"); + + using (Bitmap bmp = GetBitmap ()) { + bmp.Save (ms, ImageFormat.Bmp); + Assert.IsTrue (ms.Position > 2, "Position-2"); + // exception here + Image.FromStream (ms); + } + } + } + + [Test] +#if !NET_2_0 + [ExpectedException (typeof (InvalidOperationException))] +#endif + public void XmlSerialization () + { + new XmlSerializer (typeof (Image)); } } }