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 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 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