Home | History | Annotate | Download | only in tests
      1 // This may look like C code, but it is really -*- C++ -*-
      2 //
      3 // Copyright Bob Friesenhahn, 1999, 2000, 2001, 2002, 2003
      4 //
      5 // Tests for throwing exceptions
      6 //
      7 
      8 #include <Magick++.h>
      9 #include <string>
     10 #include <iostream>
     11 
     12 using namespace std;
     13 
     14 using namespace Magick;
     15 
     16 int main( int /*argc*/, char ** argv)
     17 {
     18   // Initialize ImageMagick install location for Windows
     19   InitializeMagick(*argv);
     20 
     21   volatile int failures=0;
     22 
     23   cout << "Checking for working exceptions (may crash) ... ";
     24   cout.flush();
     25 
     26   {
     27     // Basic exception test
     28     try
     29       {
     30         failures++;
     31         throw int(100);
     32       }
     33     catch ( int /*value_*/ )
     34       {
     35         failures--;
     36       }
     37 
     38     // Throw a Magick++ exception class.
     39     try
     40       {
     41         failures++;
     42         cout << "Throwing 'Magick::WarningResourceLimit' exception" << endl;
     43         cout.flush();
     44         throw WarningResourceLimit("How now brown cow?");
     45       }
     46     catch( Exception & /*error_*/ )
     47       {
     48         cout << "Successfully caught 'Magick::WarningResourceLimit' exception" << endl;
     49         cout.flush();
     50         failures--;
     51       }
     52 
     53     // A more complex test
     54     try
     55       {
     56         size_t columns = 640;
     57         size_t rows = 480;
     58         Geometry geometry(columns,rows);
     59         Color canvasColor( "red" );
     60         Image image( geometry, canvasColor);
     61 
     62         {
     63           try
     64             {
     65               failures++;
     66               cout << "Throwing library 'Magick::Exception' exception" << endl;
     67               cout.flush();
     68               image.directory();
     69             }
     70           catch ( Exception& /*error_*/ )
     71             {
     72               cout << "Successfully caught library 'Magick::Exception' exception" << endl;
     73               cout.flush();
     74               failures--;
     75             }
     76         }
     77 
     78       }
     79     catch( Exception &error_ )
     80       {
     81         cout << "Bogus catch: Caught exception: " << error_.what() << endl;
     82         cout.flush();
     83         return 1;
     84       }
     85     catch( exception &error_ )
     86       {
     87         cout << "Bogus catch: Caught exception: " << error_.what() << endl;
     88         cout.flush();
     89         return 1;
     90       }
     91 
     92     if ( failures )
     93       {
     94         cout << failures << " failures" << endl;
     95         cout.flush();
     96         return 1;
     97       }
     98     cout << "Exception testing passed!" << endl;
     99   }
    100 
    101   return 0;
    102 }
    103