Home | History | Annotate | Download | only in tests
      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