1 // This may look like C code, but it is really -*- C++ -*-
2 //
3 // Copyright Bob Friesenhahn, 2001, 2002, 2003
4 //
5 // Test Magick::CoderInfo class and Magick::coderInfoList
6 //
7 
8 #include <Magick++.h>
9 #include <string>
10 #include <iostream>
11 #include <list>
12 
13 using namespace std;
14 
15 using namespace Magick;
16 
test(CoderInfo::MatchType isReadable_,CoderInfo::MatchType isWritable_,CoderInfo::MatchType isMultiFrame_)17 int test( CoderInfo::MatchType isReadable_,
18           CoderInfo::MatchType isWritable_,
19           CoderInfo::MatchType isMultiFrame_ )
20 {
21   int result = 0;
22   list<CoderInfo> coderList;
23   coderInfoList( &coderList, isReadable_, isWritable_, isMultiFrame_ );
24   list<CoderInfo>::iterator entry = coderList.begin();
25   while( entry != coderList.end() )
26     {
27       // Readable
28       if ( isReadable_ != CoderInfo::AnyMatch &&
29            (( entry->isReadable() && isReadable_ != CoderInfo::TrueMatch ) ||
30             ( !entry->isReadable() && isReadable_ != CoderInfo::FalseMatch )) )
31         {
32           cout << "Entry \""
33                << entry->name()
34                << "\" has unexpected readablity state ("
35                << static_cast<int>(entry->isReadable())
36                << ")"
37                << endl;
38           ++result;
39         }
40 
41       // Writable
42       if ( isWritable_ != CoderInfo::AnyMatch &&
43            (( entry->isWritable() && isWritable_ != CoderInfo::TrueMatch ) ||
44             ( !entry->isWritable() && isWritable_ != CoderInfo::FalseMatch )) )
45         {
46           cout << "Entry \""
47                << entry->name()
48                << "\" has unexpected writablity state ("
49                << static_cast<int>(entry->isWritable())
50                << ")"
51                << endl;
52           ++result;
53         }
54 
55       // MultiFrame
56       if ( isMultiFrame_ != CoderInfo::AnyMatch &&
57            (( entry->isMultiFrame() && isMultiFrame_ != CoderInfo::TrueMatch ) ||
58             ( !entry->isMultiFrame() && isMultiFrame_ != CoderInfo::FalseMatch )) )
59         {
60           cout << "Entry \""
61                << entry->name()
62                << "\" has unexpected multiframe state ("
63                << static_cast<int>(entry->isMultiFrame())
64                << ")"
65                << endl;
66           ++result;
67         }
68 
69       entry++;
70     }
71 
72   return result;
73 }
74 
main(int,char ** argv)75 int main( int /*argc*/, char **argv)
76 {
77 
78   // Initialize ImageMagick install location for Windows
79   InitializeMagick(*argv);
80 
81   int failures=0;
82 
83   try {
84 
85     CoderInfo coderInfo("GIF");
86     if ( coderInfo.name() != string("GIF") )
87       {
88         cout << "Unexpected coder name \""
89              << coderInfo.name()
90              << "\""
91              << endl;
92         ++failures;
93       }
94 
95     if( coderInfo.description() != string("CompuServe graphics interchange format") )
96       {
97         cout << "Unexpected coder description \""
98              << coderInfo.description()
99              << "\""
100              << endl;
101         ++failures;
102       }
103 
104     failures += test(CoderInfo::AnyMatch,CoderInfo::AnyMatch,CoderInfo::AnyMatch);
105     failures += test(CoderInfo::FalseMatch,CoderInfo::FalseMatch,CoderInfo::FalseMatch);
106 
107     failures += test(CoderInfo::TrueMatch,CoderInfo::AnyMatch,CoderInfo::AnyMatch);
108     failures += test(CoderInfo::FalseMatch,CoderInfo::AnyMatch,CoderInfo::AnyMatch);
109 
110     failures += test(CoderInfo::AnyMatch,CoderInfo::TrueMatch,CoderInfo::AnyMatch);
111     failures += test(CoderInfo::AnyMatch,CoderInfo::FalseMatch,CoderInfo::AnyMatch);
112 
113     failures += test(CoderInfo::AnyMatch,CoderInfo::AnyMatch,CoderInfo::TrueMatch);
114     failures += test(CoderInfo::AnyMatch,CoderInfo::AnyMatch,CoderInfo::FalseMatch);
115   }
116   catch( Exception &error_ )
117     {
118       cout << "Caught exception: " << error_.what() << endl;
119       return 1;
120     }
121   catch( exception &error_ )
122     {
123       cout << "Caught exception: " << error_.what() << endl;
124       return 1;
125     }
126 
127   if ( failures )
128     {
129       cout << failures << " failures" << endl;
130       return 1;
131     }
132 
133   return 0;
134 }
135