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=302f22d0f6e75642e21bd977dbb676b431f7f62f;hpb=c4a3b30460c7ea1a1fb3c97cfc8478555714af2f;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 302f22d0f6e..1b430ae52e2 100644 --- a/mcs/class/System.Drawing/Test/System.Drawing/TestImage.cs +++ b/mcs/class/System.Drawing/Test/System.Drawing/TestImage.cs @@ -6,7 +6,7 @@ // Sebastien Pouliot // // (C) 2005 Ximian, Inc. http://www.ximian.com -// Copyright (C) 2005, 2006 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 @@ -32,7 +32,9 @@ using System; using System.Drawing; using System.Drawing.Imaging; using System.IO; +using System.Reflection; using System.Security.Permissions; +using System.Xml.Serialization; using NUnit.Framework; namespace MonoTests.System.Drawing{ @@ -164,5 +166,229 @@ namespace MonoTests.System.Drawing{ 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)); + } } }