// This may look like C code, but it is really -*- C++ -*-
//
// Copyright Bob Friesenhahn, 2001, 2002, 2003
//
// Test Magick::CoderInfo class and Magick::coderInfoList
//
#include <Magick++.h>
#include <string>
#include <iostream>
#include <list>
using namespace std;
using namespace Magick;
int test( CoderInfo::MatchType isReadable_,
CoderInfo::MatchType isWritable_,
CoderInfo::MatchType isMultiFrame_ )
{
int result = 0;
list<CoderInfo> coderList;
coderInfoList( &coderList, isReadable_, isWritable_, isMultiFrame_ );
list<CoderInfo>::iterator entry = coderList.begin();
while( entry != coderList.end() )
{
// Readable
if ( isReadable_ != CoderInfo::AnyMatch &&
(( entry->isReadable() && isReadable_ != CoderInfo::TrueMatch ) ||
( !entry->isReadable() && isReadable_ != CoderInfo::FalseMatch )) )
{
cout << "Entry \""
<< entry->name()
<< "\" has unexpected readablity state ("
<< static_cast<int>(entry->isReadable())
<< ")"
<< endl;
++result;
}
// Writable
if ( isWritable_ != CoderInfo::AnyMatch &&
(( entry->isWritable() && isWritable_ != CoderInfo::TrueMatch ) ||
( !entry->isWritable() && isWritable_ != CoderInfo::FalseMatch )) )
{
cout << "Entry \""
<< entry->name()
<< "\" has unexpected writablity state ("
<< static_cast<int>(entry->isWritable())
<< ")"
<< endl;
++result;
}
// MultiFrame
if ( isMultiFrame_ != CoderInfo::AnyMatch &&
(( entry->isMultiFrame() && isMultiFrame_ != CoderInfo::TrueMatch ) ||
( !entry->isMultiFrame() && isMultiFrame_ != CoderInfo::FalseMatch )) )
{
cout << "Entry \""
<< entry->name()
<< "\" has unexpected multiframe state ("
<< static_cast<int>(entry->isMultiFrame())
<< ")"
<< endl;
++result;
}
entry++;
}
return result;
}
int main( int /*argc*/, char **argv)
{
// Initialize ImageMagick install location for Windows
InitializeMagick(*argv);
int failures=0;
try {
CoderInfo coderInfo("GIF");
if ( coderInfo.name() != string("GIF") )
{
cout << "Unexpected coder name \""
<< coderInfo.name()
<< "\""
<< endl;
++failures;
}
if( coderInfo.description() != string("CompuServe graphics interchange format") )
{
cout << "Unexpected coder description \""
<< coderInfo.description()
<< "\""
<< endl;
++failures;
}
failures += test(CoderInfo::AnyMatch,CoderInfo::AnyMatch,CoderInfo::AnyMatch);
failures += test(CoderInfo::FalseMatch,CoderInfo::FalseMatch,CoderInfo::FalseMatch);
failures += test(CoderInfo::TrueMatch,CoderInfo::AnyMatch,CoderInfo::AnyMatch);
failures += test(CoderInfo::FalseMatch,CoderInfo::AnyMatch,CoderInfo::AnyMatch);
failures += test(CoderInfo::AnyMatch,CoderInfo::TrueMatch,CoderInfo::AnyMatch);
failures += test(CoderInfo::AnyMatch,CoderInfo::FalseMatch,CoderInfo::AnyMatch);
failures += test(CoderInfo::AnyMatch,CoderInfo::AnyMatch,CoderInfo::TrueMatch);
failures += test(CoderInfo::AnyMatch,CoderInfo::AnyMatch,CoderInfo::FalseMatch);
}
catch( Exception &error_ )
{
cout << "Caught exception: " << error_.what() << endl;
return 1;
}
catch( exception &error_ )
{
cout << "Caught exception: " << error_.what() << endl;
return 1;
}
if ( failures )
{
cout << failures << " failures" << endl;
return 1;
}
return 0;
}