%PDF- %PDF-
| Direktori : /home/tjamichg/intranet.tjamich.gob.mx/intranet/common/ZendPdf-master/tests/ZendPdf/ |
| Current File : /home/tjamichg/intranet.tjamich.gob.mx/intranet/common/ZendPdf-master/tests/ZendPdf/ActionTest.php |
<?php
/**
* Zend Framework (http://framework.zend.com/)
*
* @link http://github.com/zendframework/zf2 for the canonical source repository
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
* @license http://framework.zend.com/license/new-bsd New BSD License
* @package Zend_Pdf
*/
namespace ZendPdfTest;
use ZendPdf\InternalType;
use ZendPdf\Action;
use ZendPdf\Util;
use ZendPdf\ObjectFactory;
use ZendPdf as Pdf;
use ZendPdf\Destination;
/** \ZendPdf\Action */
/** PHPUnit Test Case */
/**
* @category Zend
* @package Zend_PDF
* @subpackage UnitTests
* @group Zend_PDF
*/
class ActionTest extends \PHPUnit_Framework_TestCase
{
/**
* Stores the original set timezone
* @var string
*/
private $_originaltimezone;
public function setUp()
{
$this->_originaltimezone = date_default_timezone_get();
date_default_timezone_set('GMT');
}
/**
* Teardown environment
*/
public function tearDown()
{
date_default_timezone_set($this->_originaltimezone);
}
public function testLoad()
{
$dictionary = new InternalType\DictionaryObject();
$dictionary->Type = new InternalType\NameObject('Action');
$dictionary->S = new InternalType\NameObject('GoTo');
$dictionary->D = new InternalType\StringObject('SomeNamedDestination');
$action2Dictionary = new InternalType\DictionaryObject();
$action2Dictionary->Type = new InternalType\NameObject('Action');
$action2Dictionary->S = new InternalType\NameObject('Thread');
$action2Dictionary->D = new InternalType\StringObject('NamedDestination 2');
$action2Dictionary->Next = new InternalType\ArrayObject();
$dictionary->Next = $action2Dictionary;
$leafAction = new InternalType\DictionaryObject();
$leafAction->Type = new InternalType\NameObject('Action');
$leafAction->S = new InternalType\NameObject('GoTo');
$leafAction->D = new InternalType\StringObject('NamedDestination 3');
$action2Dictionary->Next->items[] = $leafAction;
$leafAction = new InternalType\DictionaryObject();
$leafAction->Type = new InternalType\NameObject('Action');
$leafAction->S = new InternalType\NameObject('GoToR');
$action2Dictionary->Next->items[] = $leafAction;
$leafAction = new InternalType\DictionaryObject();
$leafAction->Type = new InternalType\NameObject('Action');
$leafAction->S = new InternalType\NameObject('GoToE');
$action2Dictionary->Next->items[] = $leafAction;
$leafAction = new InternalType\DictionaryObject();
$leafAction->Type = new InternalType\NameObject('Action');
$leafAction->S = new InternalType\NameObject('Launch');
$action2Dictionary->Next->items[] = $leafAction;
$leafAction = new InternalType\DictionaryObject();
$leafAction->Type = new InternalType\NameObject('Action');
$leafAction->S = new InternalType\NameObject('Thread');
$action2Dictionary->Next->items[] = $leafAction;
$leafAction = new InternalType\DictionaryObject();
$leafAction->Type = new InternalType\NameObject('Action');
$leafAction->S = new InternalType\NameObject('URI');
$leafAction->URI = new InternalType\NameObject('http://some_host/');
$action2Dictionary->Next->items[] = $leafAction;
$leafAction = new InternalType\DictionaryObject();
$leafAction->Type = new InternalType\NameObject('Action');
$leafAction->S = new InternalType\NameObject('Sound');
$action2Dictionary->Next->items[] = $leafAction;
$leafAction = new InternalType\DictionaryObject();
$leafAction->Type = new InternalType\NameObject('Action');
$leafAction->S = new InternalType\NameObject('Movie');
$action2Dictionary->Next->items[] = $leafAction;
$leafAction = new InternalType\DictionaryObject();
$leafAction->Type = new InternalType\NameObject('Action');
$leafAction->S = new InternalType\NameObject('Hide');
$action2Dictionary->Next->items[] = $leafAction;
$leafAction = new InternalType\DictionaryObject();
$leafAction->Type = new InternalType\NameObject('Action');
$leafAction->S = new InternalType\NameObject('Named');
$action2Dictionary->Next->items[] = $leafAction;
$leafAction = new InternalType\DictionaryObject();
$leafAction->Type = new InternalType\NameObject('Action');
$leafAction->S = new InternalType\NameObject('SubmitForm');
$action2Dictionary->Next->items[] = $leafAction;
$leafAction = new InternalType\DictionaryObject();
$leafAction->Type = new InternalType\NameObject('Action');
$leafAction->S = new InternalType\NameObject('ResetForm');
$action2Dictionary->Next->items[] = $leafAction;
$leafAction = new InternalType\DictionaryObject();
$leafAction->Type = new InternalType\NameObject('Action');
$leafAction->S = new InternalType\NameObject('ImportData');
$action2Dictionary->Next->items[] = $leafAction;
$leafAction = new InternalType\DictionaryObject();
$leafAction->Type = new InternalType\NameObject('Action');
$leafAction->S = new InternalType\NameObject('JavaScript');
$action2Dictionary->Next->items[] = $leafAction;
$leafAction = new InternalType\DictionaryObject();
$leafAction->Type = new InternalType\NameObject('Action');
$leafAction->S = new InternalType\NameObject('SetOCGState');
$action2Dictionary->Next->items[] = $leafAction;
$leafAction = new InternalType\DictionaryObject();
$leafAction->Type = new InternalType\NameObject('Action');
$leafAction->S = new InternalType\NameObject('Rendition');
$action2Dictionary->Next->items[] = $leafAction;
$leafAction = new InternalType\DictionaryObject();
$leafAction->Type = new InternalType\NameObject('Action');
$leafAction->S = new InternalType\NameObject('Trans');
$action2Dictionary->Next->items[] = $leafAction;
$leafAction = new InternalType\DictionaryObject();
$leafAction->Type = new InternalType\NameObject('Action');
$leafAction->S = new InternalType\NameObject('GoTo3DView');
$action2Dictionary->Next->items[] = $leafAction;
$action = Action\AbstractAction::load($dictionary);
$actionsCount = 0;
$iterator = new \RecursiveIteratorIterator(new Util\RecursivelyIteratableObjectsContainer(array($action)),
\RecursiveIteratorIterator::SELF_FIRST);
foreach ($iterator as $chainedAction) {
$actionsCount++;
}
$this->assertEquals(20, $actionsCount);
}
public function testExtract()
{
$dictionary = new InternalType\DictionaryObject();
$dictionary->Type = new InternalType\NameObject('Action');
$dictionary->S = new InternalType\NameObject('GoToR');
$dictionary->D = new InternalType\StringObject('SomeNamedDestination');
$action2Dictionary = new InternalType\DictionaryObject();
$action2Dictionary->Type = new InternalType\NameObject('Action');
$action2Dictionary->S = new InternalType\NameObject('Thread');
$action2Dictionary->D = new InternalType\StringObject('NamedDestination 2');
$action2Dictionary->Next = new InternalType\ArrayObject();
$dictionary->Next = $action2Dictionary;
$leafAction = new InternalType\DictionaryObject();
$leafAction->Type = new InternalType\NameObject('Action');
$leafAction->S = new InternalType\NameObject('GoTo');
$leafAction->D = new InternalType\StringObject('NamedDestination 3');
$action2Dictionary->Next->items[] = $leafAction;
$leafAction = new InternalType\DictionaryObject();
$leafAction->Type = new InternalType\NameObject('Action');
$leafAction->S = new InternalType\NameObject('GoToR');
$action2Dictionary->Next->items[] = $leafAction;
$leafAction = new InternalType\DictionaryObject();
$leafAction->Type = new InternalType\NameObject('Action');
$leafAction->S = new InternalType\NameObject('GoToE');
$action2Dictionary->Next->items[] = $leafAction;
$leafAction = new InternalType\DictionaryObject();
$leafAction->Type = new InternalType\NameObject('Action');
$leafAction->S = new InternalType\NameObject('Launch');
$action2Dictionary->Next->items[] = $leafAction;
$leafAction = new InternalType\DictionaryObject();
$leafAction->Type = new InternalType\NameObject('Action');
$leafAction->S = new InternalType\NameObject('Thread');
$action2Dictionary->Next->items[] = $leafAction;
$leafAction = new InternalType\DictionaryObject();
$leafAction->Type = new InternalType\NameObject('Action');
$leafAction->S = new InternalType\NameObject('URI');
$leafAction->URI = new InternalType\NameObject('http://some_host/');
$action2Dictionary->Next->items[] = $leafAction;
$leafAction = new InternalType\DictionaryObject();
$leafAction->Type = new InternalType\NameObject('Action');
$leafAction->S = new InternalType\NameObject('Sound');
$action2Dictionary->Next->items[] = $leafAction;
$leafAction = new InternalType\DictionaryObject();
$leafAction->Type = new InternalType\NameObject('Action');
$leafAction->S = new InternalType\NameObject('Movie');
$action2Dictionary->Next->items[] = $leafAction;
$leafAction = new InternalType\DictionaryObject();
$leafAction->Type = new InternalType\NameObject('Action');
$leafAction->S = new InternalType\NameObject('Hide');
$action2Dictionary->Next->items[] = $leafAction;
$leafAction = new InternalType\DictionaryObject();
$leafAction->Type = new InternalType\NameObject('Action');
$leafAction->S = new InternalType\NameObject('Named');
$action2Dictionary->Next->items[] = $leafAction;
$leafAction = new InternalType\DictionaryObject();
$leafAction->Type = new InternalType\NameObject('Action');
$leafAction->S = new InternalType\NameObject('SubmitForm');
$action2Dictionary->Next->items[] = $leafAction;
$leafAction = new InternalType\DictionaryObject();
$leafAction->Type = new InternalType\NameObject('Action');
$leafAction->S = new InternalType\NameObject('ResetForm');
$action2Dictionary->Next->items[] = $leafAction;
$leafAction = new InternalType\DictionaryObject();
$leafAction->Type = new InternalType\NameObject('Action');
$leafAction->S = new InternalType\NameObject('ImportData');
$action2Dictionary->Next->items[] = $leafAction;
$leafAction = new InternalType\DictionaryObject();
$leafAction->Type = new InternalType\NameObject('Action');
$leafAction->S = new InternalType\NameObject('JavaScript');
$action2Dictionary->Next->items[] = $leafAction;
$leafAction = new InternalType\DictionaryObject();
$leafAction->Type = new InternalType\NameObject('Action');
$leafAction->S = new InternalType\NameObject('SetOCGState');
$action2Dictionary->Next->items[] = $leafAction;
$leafAction = new InternalType\DictionaryObject();
$leafAction->Type = new InternalType\NameObject('Action');
$leafAction->S = new InternalType\NameObject('Rendition');
$action2Dictionary->Next->items[] = $leafAction;
$leafAction = new InternalType\DictionaryObject();
$leafAction->Type = new InternalType\NameObject('Action');
$leafAction->S = new InternalType\NameObject('Trans');
$action2Dictionary->Next->items[] = $leafAction;
$leafAction = new InternalType\DictionaryObject();
$leafAction->Type = new InternalType\NameObject('Action');
$leafAction->S = new InternalType\NameObject('GoTo3DView');
$action2Dictionary->Next->items[] = $leafAction;
$action = Action\AbstractAction::load($dictionary);
$actionsToClean = array();
$deletionCandidateKeys = array();
$iterator = new \RecursiveIteratorIterator($action, \RecursiveIteratorIterator::SELF_FIRST);
foreach ($iterator as $chainedAction) {
if ($chainedAction instanceof Action\GoToAction) {
$actionsToClean[] = $iterator->getSubIterator();
$deletionCandidateKeys[] = $iterator->getSubIterator()->key();
}
}
foreach ($actionsToClean as $id => $action) {
unset($action->next[$deletionCandidateKeys[$id]]);
}
$actionsCount = 0;
$iterator = new \RecursiveIteratorIterator(new Util\RecursivelyIteratableObjectsContainer(array($action)),
\RecursiveIteratorIterator::SELF_FIRST);
foreach ($iterator as $chainedAction) {
$actionsCount++;
}
$this->assertEquals(18, $actionsCount);
$action->dumpAction(new ObjectFactory(1));
$this->assertEquals(
$action->getResource()->toString(),
'<</Type /Action '
. '/S /Thread '
. '/D (NamedDestination 2) '
. '/Next [1 0 R 2 0 R 3 0 R 4 0 R 5 0 R 6 0 R 7 0 R 8 0 R 9 0 R 10 0 R 11 0 R 12 0 R 13 0 R 14 0 R 15 0 R 16 0 R 17 0 R ] >>');
}
public function testCreate()
{
$action1 = Action\GoToAction::create('SomeNamedDestination');
$action1->next[] = Action\GoToAction::create('AnotherNamedDestination');
$action1->dumpAction(new ObjectFactory(1));
$this->assertEquals($action1->getResource()->toString(),
'<</Type /Action /S /GoTo /D (SomeNamedDestination) /Next 1 0 R >>');
}
public function testCreate1()
{
$pdf = new Pdf\PdfDocument();
$page1 = $pdf->newPage(Pdf\Page::SIZE_A4);
$page2 = $pdf->newPage(Pdf\Page::SIZE_A4);
$destination = Destination\Fit::create($page2);
$action = Action\GoToAction::create($destination);
$action->dumpAction(new ObjectFactory(1));
$this->assertEquals($action->getResource()->toString(),
'<</Type /Action /S /GoTo /D [4 0 R /Fit ] >>');
}
public function testGetDestination()
{
$dictionary = new InternalType\DictionaryObject();
$dictionary->Type = new InternalType\NameObject('Action');
$dictionary->S = new InternalType\NameObject('GoTo');
$dictionary->D = new InternalType\StringObject('SomeNamedDestination');
$action = Action\AbstractAction::load($dictionary);
$this->assertEquals($action->getDestination()->getName(), 'SomeNamedDestination');
}
public function testGetDestination2()
{
$pdf = new Pdf\PdfDocument();
$page1 = $pdf->newPage(Pdf\Page::SIZE_A4);
$page2 = $pdf->newPage(Pdf\Page::SIZE_A4);
$page3 = $pdf->newPage(Pdf\Page::SIZE_A4); // Page created, but not included into pages list
$pdf->pages[] = $page1;
$pdf->pages[] = $page2;
$action1 = Action\GoToAction::create(Destination\Fit::create($page2));
$action2 = Action\GoToAction::create(Destination\Fit::create($page3));
$this->assertTrue($pdf->resolveDestination($action1->getDestination()) === $page2);
$this->assertTrue($pdf->resolveDestination($action2->getDestination()) === null);
}
public function testActionURILoad1()
{
$dictionary = new InternalType\DictionaryObject();
$dictionary->Type = new InternalType\NameObject('Action');
$dictionary->S = new InternalType\NameObject('URI');
$dictionary->URI = new InternalType\StringObject('http://somehost/');
$action = Action\AbstractAction::load($dictionary);
$this->assertTrue($action instanceof Action\URI);
}
public function testActionURILoad2()
{
$dictionary = new InternalType\DictionaryObject();
$dictionary->Type = new InternalType\NameObject('Action');
$dictionary->S = new InternalType\NameObject('URI');
$this->setExpectedException('\ZendPdf\Exception\CorruptedPdfException', 'URI action dictionary entry is required');
$action = Action\AbstractAction::load($dictionary);
}
public function testActionURICreate()
{
$action = Action\URI::create('http://somehost/');
$this->assertTrue($action instanceof Action\URI);
$this->assertEquals($action->getResource()->toString(),
'<</Type /Action /S /URI /URI (http://somehost/) >>');
}
public function testActionURIGettersSetters()
{
$action = Action\URI::create('http://somehost/');
$this->assertEquals($action->getUri(), 'http://somehost/');
$action->setUri('http://another_host/');
$this->assertEquals($action->getUri(), 'http://another_host/');
$this->assertEquals($action->getIsMap(), false);
$action->setIsMap(true);
$this->assertEquals($action->getIsMap(), true);
$this->assertEquals($action->getResource()->toString(),
'<</Type /Action /S /URI /URI (http://another_host/) /IsMap true >>');
$action->setIsMap(false);
$this->assertEquals($action->getIsMap(), false);
$this->assertEquals($action->getResource()->toString(),
'<</Type /Action /S /URI /URI (http://another_host/) >>');
}
/**
* @group ZF-8462
*/
public function testPhpVersionBug()
{
$this->setExpectedException(
'\ZendPdf\Exception\NotImplementedException',
'Cross-reference streams are not supported yet'
);
$pdf = Pdf\PdfDocument::load(__DIR__ . '/_files/ZF-8462.pdf');
}
}