• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
main(int,char ** argv)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