New test.
[mono.git] / mcs / class / System.Drawing / Test / System.Drawing / TestImage.cs
index 89125532ed072bebdd4d807c97f736db70dbb673..302f22d0f6e75642e21bd977dbb676b431f7f62f 100644 (file)
@@ -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  <sebastien@ximian.com>
 //
 // (C) 2005 Ximian, Inc.  http://www.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
 // 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.Security.Permissions;
+using NUnit.Framework;
 
 namespace MonoTests.System.Drawing{
 
        [TestFixture]
-       public class TestImage {
+       [SecurityPermission (SecurityAction.Deny, UnmanagedCode = true)]
+       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);
+                       }
                }
        }
 }