function ifdToTest($name, $number, PelIfd $ifd) { println(); println('/* Start of IDF %s%d. */', $name, $number); $entries = $ifd->getEntries(); println('$this->assertEqual(count(%s%d->getEntries()), %d);', $name, $number, count($entries)); foreach ($entries as $tag => $entry) { println(); println('$entry = %s%d->getEntry(%d); // %s', $name, $number, $tag, PelTag::getName($ifd->getType(), $tag)); entryToTest('$entry', $entry); } println(); println('/* Sub IFDs of %s%d. */', $name, $number); $sub_ifds = $ifd->getSubIfds(); println('$this->assertEqual(count(%s%d->getSubIfds()), %d);', $name, $number, count($sub_ifds)); $n = 0; $sub_name = $name . $number . '_'; foreach ($sub_ifds as $type => $sub_ifd) { println('%s%d = %s%d->getSubIfd(%d); // IFD %s', $sub_name, $n, $name, $number, $type, $sub_ifd->getName()); println('$this->assertIsA(%s%d, \'PelIfd\');', $sub_name, $n); ifdToTest($sub_name, $n, $sub_ifd); $n++; } println(); if (strlen($ifd->getThumbnailData()) > 0) { println('$thumb_data = file_get_contents(dirname(__FILE__) .'); println(' \'/%s\');', $GLOBALS['thumb_filename']); println('$this->assertEqual(%s%d->getThumbnailData(), $thumb_data);', $name, $number); } else { println('$this->assertEqual(%s%d->getThumbnailData(), \'\');', $name, $number); } println(); println('/* Next IFD. */'); $next = $ifd->getNextIfd(); println('%s%d = %s%d->getNextIfd();', $name, $number + 1, $name, $number); if ($next instanceof PelIfd) { println('$this->assertIsA(%s%d, \'PelIfd\');', $name, $number + 1); println('/* End of IFD %s%d. */', $name, $number); ifdToTest($name, $number + 1, $next); } else { println('$this->assertNull(%s%d);', $name, $number + 1); println('/* End of IFD %s%d. */', $name, $number); } }
/** * Set the first IFD. * * @param PelIfd $ifd * the new first IFD, which must be of type {@link * PelIfd::IFD0}. */ public function setIfd(PelIfd $ifd) { if ($ifd->getType() != PelIfd::IFD0) { throw new PelInvalidDataException('Invalid type of IFD: %d, expected %d.', $ifd->getType(), PelIfd::IFD0); } $this->ifd = $ifd; }