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