diff --git a/src/Makefile b/src/Makefile index f49c6397..96ae6829 100644 --- a/src/Makefile +++ b/src/Makefile @@ -20,7 +20,7 @@ # 02111-1307, USA. # # File: Makefile -# Version: Exiv2-0_4_040703 1.27 +# Version: $Name: $ $Revision: 1.32 $ # Author(s): Andreas Huggel (ahu) # History: 10-Dec-03, ahu: created # @@ -57,7 +57,7 @@ CCSRC = canonmn.cpp datasets.cpp exif.cpp fujimn.cpp ifd.cpp image.cpp iptc.cpp # Add source files of simple applications to this list BINSRC = addmoddel.cpp exifcomment.cpp exifprint.cpp ifd-test.cpp iptcprint.cpp \ - iptctest.cpp makernote-test.cpp taglist.cpp write-test.cpp \ + iptctest.cpp key-test.cpp makernote-test.cpp taglist.cpp write-test.cpp \ write2-test.cpp # State the main source file of the Exiv2 application here diff --git a/src/key-test.cpp b/src/key-test.cpp new file mode 100644 index 00000000..bcd00bf2 --- /dev/null +++ b/src/key-test.cpp @@ -0,0 +1,211 @@ +// ***************************************************************** -*- C++ -*- +/* + Abstract : Key unit tests + + File : key-test.cpp + Version : $Name: $ $Revision: 1.1 $ + Author(s): Andreas Huggel (ahu) + History : 24-Aug-04, ahu: created + + */ +// ***************************************************************************** +// included header files +#include "exif.hpp" +#include +#include + +using namespace Exiv2; + +int main() +{ + int tc = 0; + int rc = 0; + + std::string key("Exif.Iop.InteroperabilityVersion"); + ExifKey ek(key); + + // operator<< + tc += 1; + std::ostringstream os; + os << ek; + if (os.str() != key) { + std::cout << "Testcase failed (operator<<)" << std::endl; + rc += 1; + } + // familyName + tc += 1; + if (std::string(ek.familyName()) != "Exif") { + std::cout << "Testcase failed (familyName)" << std::endl; + rc += 1; + } + // groupName + tc += 1; + if (ek.groupName() != "Iop") { + std::cout << "Testcase failed (groupName)" << std::endl; + rc += 1; + } + // tagName + tc += 1; + if (ek.tagName() != "InteroperabilityVersion") { + std::cout << "Testcase failed (tagName)" << std::endl; + rc += 1; + } + // tagName + tc += 1; + if (ek.tag() != 0x0002) { + std::cout << "Testcase failed (tag)" << std::endl; + rc += 1; + } + // ifdName + tc += 1; + if (std::string(ek.ifdName()) != "Iop") { + std::cout << "Testcase failed (ifdName: " << std::endl; + rc += 1; + } + // sectionName + tc += 1; + if (ek.sectionName() != "Interoperability") { + std::cout << "Testcase failed (sectionName)" << std::endl; + rc += 1; + } + + // ----- + + // Copy constructor + ExifKey ek2(ek); + + // operator<< + tc += 1; + std::ostringstream os2; + os2 << ek2; + if (os2.str() != key) { + std::cout << "Testcase failed (operator<<)" << std::endl; + rc += 1; + } + // familyName + tc += 1; + if (std::string(ek2.familyName()) != "Exif") { + std::cout << "Testcase failed (familyName)" << std::endl; + rc += 1; + } + // groupName + tc += 1; + if (ek2.groupName() != "Iop") { + std::cout << "Testcase failed (groupName)" << std::endl; + rc += 1; + } + // tagName + tc += 1; + if (ek2.tagName() != "InteroperabilityVersion") { + std::cout << "Testcase failed (tagName)" << std::endl; + rc += 1; + } + // tagName + tc += 1; + if (ek2.tag() != 0x0002) { + std::cout << "Testcase failed (tag)" << std::endl; + rc += 1; + } + // ifdName + tc += 1; + if (std::string(ek2.ifdName()) != "Iop") { + std::cout << "Testcase failed (ifdName: " << std::endl; + rc += 1; + } + // sectionName + tc += 1; + if (ek2.sectionName() != "Interoperability") { + std::cout << "Testcase failed (sectionName)" << std::endl; + rc += 1; + } + + // ----- + + long len = 76; + byte buf[] + = { // No + 0x00,0x04, + // Tag Type Components Offset/Data + 0x00,0x01, 0x00,0x02, 0x00,0x00,0x00,0x04, 'T', 'h', 'e', '\0', + 0x00,0x02, 0x00,0x02, 0x00,0x00,0x00,0x06, 0x00,0x00,0x00,0x37, + 0x00,0x03, 0x00,0x02, 0x00,0x00,0x00,0x07, 0x00,0x00,0x00,0x3d, + 0x00,0x04, 0x00,0x02, 0x00,0x00,0x00,0x09, 0x00,0x00,0x00,0x44, + // Next + 0x00,0x00,0x00,0x00, + // Data + 'K', 'u', 'a', 'l', 'a', '\0', + 'L', 'u', 'm', 'p', 'u', 'r', '\0', + 'M', 'a', 'l', 'a', 'y', 's', 'i', 'a', '\0' + }; + + Ifd ifd(Exiv2::iopIfd, 0, false); + int ret = ifd.read(buf, len, bigEndian, 1); + if (ret) { + std::cout << "Ifd::read failed, ret = " << ret << "\n"; + return ret; + } + + Ifd::const_iterator i = ifd.findTag(0x0002); + if (i == ifd.end()) { + std::cout << "Ifd::findTag failed" << "\n"; + } + else { + ExifKey ek3(*i); + + // operator<< + tc += 1; + std::ostringstream os2; + os2 << ek3; + if (os2.str() != key) { + std::cout << "Testcase failed (operator<<)" << std::endl; + rc += 1; + } + // familyName + tc += 1; + if (std::string(ek3.familyName()) != "Exif") { + std::cout << "Testcase failed (familyName)" << std::endl; + rc += 1; + } + // groupName + tc += 1; + if (ek3.groupName() != "Iop") { + std::cout << "Testcase failed (groupName)" << std::endl; + rc += 1; + } + // tagName + tc += 1; + if (ek3.tagName() != "InteroperabilityVersion") { + std::cout << "Testcase failed (tagName)" << std::endl; + rc += 1; + } + // tagName + tc += 1; + if (ek3.tag() != 0x0002) { + std::cout << "Testcase failed (tag)" << std::endl; + rc += 1; + } + // ifdName + tc += 1; + if (std::string(ek3.ifdName()) != "Iop") { + std::cout << "Testcase failed (ifdName: " << std::endl; + rc += 1; + } + // sectionName + tc += 1; + if (ek3.sectionName() != "Interoperability") { + std::cout << "Testcase failed (sectionName)" << std::endl; + rc += 1; + } + + } + + // ----- + + if (rc == 0) { + std::cout << "All " << tc << " testcases passed." << std::endl; + } + else { + std::cout << rc << " of " << tc << " testcases failed." << std::endl; + } +} +