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