blob: bcb761ed3644d8925a53d1155349d1b606e5f803 [file] [log] [blame]
<?php
/**
* ezcDocumentPdfDriverHaruTests
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
* @package Document
* @version //autogen//
* @subpackage Tests
* @license http://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0
*/
require_once 'base.php';
/**
* Test suite for class.
*
* @package Document
* @subpackage Tests
*/
abstract class ezcDocumentPdfDriverTests extends ezcDocumentPdfTestCase
{
/**
* Expected font widths for calculateWordWidth tests
*
* @var array
*/
protected $expectedWidths = array(
'testEstimateDefaultWordWidthWithoutPageCreation' => null,
'testEstimateDefaultWordWidth' => null,
'testEstimateWordWidthDifferentSize' => null,
'testEstimateWordWidthDifferentSizeAndUnit' => null,
'testEstimateBoldWordWidth' => null,
'testEstimateMonospaceWordWidth' => null,
'testFontStyleFallback' => null,
'testUtf8FontWidth' => null,
'testCustomFontWidthEstimation' => null,
);
/**
* Get driver to test
*
* @return ezcDocumentPdfDriver
*/
abstract protected function getDriver();
public function testEstimateDefaultWordWidthWithoutPageCreation()
{
$driver = $this->getDriver();
$this->assertEquals(
$this->expectedWidths[__FUNCTION__],
$driver->calculateWordWidth( 'Hello' ),
'Wrong word width estimation', .1
);
}
public function testEstimateDefaultWordWidth()
{
$driver = $this->getDriver();
$driver->createPage( 210, 297 );
$this->assertEquals(
$this->expectedWidths[__FUNCTION__],
$driver->calculateWordWidth( 'Hello' ),
'Wrong word width estimation', .1
);
}
public function testEstimateWordWidthDifferentSize()
{
$driver = $this->getDriver();
$driver->createPage( 210, 297 );
$driver->setTextFormatting( 'font-size', '14' );
$this->assertEquals(
$this->expectedWidths[__FUNCTION__],
$driver->calculateWordWidth( 'Hello' ),
'Wrong word width estimation', .1
);
}
public function testEstimateWordWidthDifferentSizeAndUnit()
{
$driver = $this->getDriver();
$driver->createPage( 210, 297 );
$driver->setTextFormatting( 'font-size', '14pt' );
$this->assertEquals(
$this->expectedWidths[__FUNCTION__],
$driver->calculateWordWidth( 'Hello' ),
'Wrong word width estimation', .1
);
}
public function testEstimateBoldWordWidth()
{
$driver = $this->getDriver();
$driver->createPage( 210, 297 );
$driver->setTextFormatting( 'font-weight', 'bold' );
$this->assertEquals(
$this->expectedWidths[__FUNCTION__],
$driver->calculateWordWidth( 'Hello' ),
'Wrong word width estimation', .1
);
}
public function testEstimateMonospaceWordWidth()
{
$driver = $this->getDriver();
$driver->createPage( 210, 297 );
$driver->setTextFormatting( 'font-family', 'monospace' );
$driver->setTextFormatting( 'font-size', '12' );
$this->assertEquals(
$this->expectedWidths[__FUNCTION__],
$driver->calculateWordWidth( 'Hello' ),
'Wrong word width estimation', .1
);
}
public function testFontStyleFallback()
{
$driver = $this->getDriver();
$driver->createPage( 210, 297 );
$driver->setTextFormatting( 'font-family', 'ZapfDingbats' );
$driver->setTextFormatting( 'font-weight', 'bold' );
$driver->setTextFormatting( 'font-style', 'italic' );
$this->assertEquals(
$this->expectedWidths[__FUNCTION__],
$driver->calculateWordWidth( 'Hello' ),
'Wrong word width estimation', .1
);
}
public function testUtf8FontWidth()
{
$driver = $this->getDriver();
$driver->createPage( 210, 297 );
$this->assertEquals(
$this->expectedWidths[__FUNCTION__],
$driver->calculateWordWidth( 'ℋℇℒℒΩ' ),
'Wrong word width estimation', .1
);
}
public function testCustomFontWidthEstimation()
{
$driver = $this->getDriver();
try {
$driver->registerFont(
'my_font',
ezcDocumentPdfDriver::FONT_PLAIN,
array(
dirname( __FILE__ ) . '/../files/fonts/fdb_font.fdb',
dirname( __FILE__ ) . '/../files/fonts/ps_font.pfb',
dirname( __FILE__ ) . '/../files/fonts/font.ttf',
)
);
} catch ( ezcBaseFunctionalityNotSupportedException $e )
{
$this->markTestSkipped( 'Fonts are not supported.' );
}
$driver->createPage( 210, 297 );
$driver->setTextFormatting( 'font-family', 'my_font' );
$driver->setTextFormatting( 'font-size', '10' );
$driver->setTextFormatting( 'font-weight', 'bold' );
$this->assertEquals(
$this->expectedWidths[__FUNCTION__],
$driver->calculateWordWidth( 'Hello world.' ),
'Wrong word width estimation', .1
);
}
public function testRenderHelloWorld()
{
$driver = $this->getDriver();
$driver->createPage( 210, 297 );
$driver->setTextFormatting( 'font-family', 'sans-serif' );
$driver->setTextFormatting( 'font-size', '10' );
$driver->drawWord( 0, 10, 'The quick brown fox jumps over the lazy dog' );
$driver->drawWord( 0, 297, 'The quick brown fox jumps over the lazy dog' );
$pdf = $driver->save();
$this->assertPdfDocumentsSimilar( $pdf, get_class( $driver ) . '_' . __FUNCTION__ );
}
public function testRenderHelloWorldSmallFont()
{
$driver = $this->getDriver();
$driver->createPage( 210, 297 );
$driver->setTextFormatting( 'font-family', 'sans-serif' );
$driver->setTextFormatting( 'font-size', '4' );
$driver->drawWord( 0, 4, 'The quick brown fox jumps over the lazy dog' );
$driver->drawWord( 0, 297, 'The quick brown fox jumps over the lazy dog' );
$pdf = $driver->save();
$this->assertPdfDocumentsSimilar( $pdf, get_class( $driver ) . '_' . __FUNCTION__ );
}
public function testRenderSwitchingFontStates()
{
$driver = $this->getDriver();
$driver->createPage( 210, 297 );
$driver->setTextFormatting( 'font-size', '8' );
$driver->drawWord( 0, 8, 'The quick brown fox jumps over the lazy dog' );
$driver->setTextFormatting( 'font-weight', 'bold' );
$driver->setTextFormatting( 'font-style', 'italic' );
$driver->drawWord( 0, 18, 'The quick brown fox jumps over the lazy dog' );
$driver->setTextFormatting( 'font-style', 'normal' );
$driver->drawWord( 0, 28, 'The quick brown fox jumps over the lazy dog' );
$driver->setTextFormatting( 'font-weight', 'normal' );
$driver->drawWord( 0, 38, 'The quick brown fox jumps over the lazy dog' );
$driver->setTextFormatting( 'font-weight', 'bold' );
$driver->drawWord( 0, 48, 'The quick brown fox jumps over the lazy dog' );
$driver->setTextFormatting( 'font-family', 'serif' );
$driver->drawWord( 0, 58, 'The quick brown fox jumps over the lazy dog' );
$driver->setTextFormatting( 'font-weight', 'normal' );
$driver->drawWord( 0, 68, 'The quick brown fox jumps over the lazy dog' );
$driver->setTextFormatting( 'font-family', 'Symbol' );
$driver->drawWord( 0, 78, 'The quick brown fox jumps over the lazy dog' );
$driver->setTextFormatting( 'font-weight', 'bold' );
$driver->drawWord( 0, 88, 'The quick brown fox jumps over the lazy dog' );
$driver->setTextFormatting( 'font-style', 'italic' );
$driver->drawWord( 0, 98, 'The quick brown fox jumps over the lazy dog' );
$driver->setTextFormatting( 'font-family', 'monospace' );
$driver->drawWord( 0, 108, 'The quick brown fox jumps over the lazy dog' );
$driver->setTextFormatting( 'font-weight', 'bold' );
$driver->setTextFormatting( 'font-style', 'italic' );
$driver->drawWord( 0, 118, 'The quick brown fox jumps over the lazy dog' );
$pdf = $driver->save();
$this->assertPdfDocumentsSimilar( $pdf, get_class( $driver ) . '_' . __FUNCTION__ );
}
public function testRenderUtf8Text()
{
$driver = $this->getDriver();
$driver->createPage( 210, 297 );
$driver->drawWord( 10, 10, 'ℋℇℒℒΩ' );
$pdf = $driver->save();
$this->assertPdfDocumentsSimilar( $pdf, get_class( $driver ) . '_' . __FUNCTION__ );
}
public function testRenderPngImage()
{
$driver = $this->getDriver();
$driver->createPage( 210, 297 );
$driver->drawImage(
dirname( __FILE__ ) . '/../files/pdf/images/logo-white.png', 'image/png',
50, 50,
ezcDocumentPcssMeasure::create( '113px' )->get(),
ezcDocumentPcssMeasure::create( '57px' )->get()
);
$pdf = $driver->save();
$this->assertPdfDocumentsSimilar( $pdf, get_class( $driver ) . '_' . __FUNCTION__ );
}
public function testRenderResizedJpegImage()
{
$driver = $this->getDriver();
$driver->createPage( 210, 297 );
$driver->drawImage(
dirname( __FILE__ ) . '/../files/pdf/images/large.jpeg', 'image/jpeg',
50, 50,
110, 100
);
$pdf = $driver->save();
$this->assertPdfDocumentsSimilar( $pdf, get_class( $driver ) . '_' . __FUNCTION__ );
}
public function testRenderColoredText()
{
$driver = $this->getDriver();
$driver->createPage( 210, 297 );
$driver->setTextFormatting( 'font-family', 'sans-serif' );
$driver->setTextFormatting( 'font-size', '4' );
$color = new ezcDocumentPcssStyleColorValue();
$color->parse( '#204a87' );
$driver->setTextFormatting( 'color', $color->value );
$driver->drawWord( 10, 10, 'The quick brown fox jumps over the lazy dog.' );
$pdf = $driver->save();
$this->assertPdfDocumentsSimilar( $pdf, get_class( $driver ) . '_' . __FUNCTION__ );
}
public function testRenderPolygon()
{
$driver = $this->getDriver();
$driver->createPage( 210, 297 );
$color = new ezcDocumentPcssStyleColorValue();
$color->parse( '#204a87' );
$driver->drawPolygon(
array(
array( 10, 10 ),
array( 200, 10 ),
array( 105, 287 ),
),
$color->value
);
$pdf = $driver->save();
$this->assertPdfDocumentsSimilar( $pdf, get_class( $driver ) . '_' . __FUNCTION__ );
}
public function testRenderPolylineClosed()
{
$driver = $this->getDriver();
$driver->createPage( 210, 297 );
$color = new ezcDocumentPcssStyleColorValue();
$color->parse( '#204a87' );
$driver->drawPolyline(
array(
array( 10, 10 ),
array( 200, 10 ),
array( 105, 287 ),
),
$color->value,
1
);
$pdf = $driver->save();
$this->assertPdfDocumentsSimilar( $pdf, get_class( $driver ) . '_' . __FUNCTION__ );
}
public function testRenderPolylineOpen()
{
$driver = $this->getDriver();
$driver->createPage( 210, 297 );
$color = new ezcDocumentPcssStyleColorValue();
$color->parse( '#204a87' );
$driver->drawPolyline(
array(
array( 200, 10 ),
array( 105, 287 ),
array( 10, 10 ),
),
$color->value,
ezcDocumentPcssMeasure::create( '1pt' )->get(),
false
);
$pdf = $driver->save();
$this->assertPdfDocumentsSimilar( $pdf, get_class( $driver ) . '_' . __FUNCTION__ );
}
public function testRenderLayeredPolygons()
{
$driver = $this->getDriver();
$driver->createPage( 210, 297 );
$color = new ezcDocumentPcssStyleColorValue();
$color->parse( '#204a87' );
$driver->drawPolygon(
array(
array( 10, 10 ),
array( 200, 10 ),
array( 105, 287 ),
),
$color->value
);
$color = new ezcDocumentPcssStyleColorValue();
$color->parse( '#2e3436' );
$driver->drawPolyline(
array(
array( 200, 287 ),
array( 105, 10 ),
array( 10, 287 ),
),
$color->value,
1,
false
);
$pdf = $driver->save();
$this->assertPdfDocumentsSimilar( $pdf, get_class( $driver ) . '_' . __FUNCTION__ );
}
public function testAddExternalLink()
{
$driver = $this->getDriver();
if ( $driver instanceof ezcDocumentPdfSvgDriver )
{
$this->markTestSkipped( 'Not supported by the SVG driver.' );
}
$driver->createPage( 100, 100 );
$driver->addExternalLink( 0, 0, 100, 100, 'http://ezcomponents.org/' );
$pdf = $driver->save();
$this->assertPdfDocumentsSimilar( $pdf, get_class( $driver ) . '_' . __FUNCTION__ );
}
public function testAddInternalLinkWithoutTarget()
{
$driver = $this->getDriver();
if ( $driver instanceof ezcDocumentPdfSvgDriver )
{
$this->markTestSkipped( 'Not supported by the SVG driver.' );
}
$driver->createPage( 100, 100 );
$driver->addInternalLink( 0, 0, 100, 50, 'my_target' );
$pdf = $driver->save();
$this->assertPdfDocumentsSimilar( $pdf, get_class( $driver ) . '_' . __FUNCTION__ );
}
public function testAddInternalLinkAndTarget()
{
$driver = $this->getDriver();
if ( $driver instanceof ezcDocumentPdfSvgDriver )
{
$this->markTestSkipped( 'Not supported by the SVG driver.' );
}
$driver->createPage( 100, 100 );
$driver->addInternalLink( 0, 0, 100, 50, 'my_target' );
$driver->addInternalLinkTarget( 'my_target' );
$pdf = $driver->save();
$this->assertPdfDocumentsSimilar( $pdf, get_class( $driver ) . '_' . __FUNCTION__ );
}
public function testAddInternalLinkAndTargetOnNextPage()
{
$driver = $this->getDriver();
if ( $driver instanceof ezcDocumentPdfSvgDriver )
{
$this->markTestSkipped( 'Not supported by the SVG driver.' );
}
$driver->createPage( 100, 100 );
$driver->addInternalLink( 0, 0, 100, 50, 'my_target' );
$driver->createPage( 100, 100 );
$driver->addInternalLinkTarget( 'my_target' );
$pdf = $driver->save();
$this->assertPdfDocumentsSimilar( $pdf, get_class( $driver ) . '_' . __FUNCTION__ );
}
public function testRenderUnknownFont()
{
$driver = $this->getDriver();
if ( $driver instanceof ezcDocumentPdfSvgDriver )
{
$this->markTestSkipped( 'Not supported by the SVG driver.' );
}
try {
$driver->createPage( 250, 100 );
$driver->setTextFormatting( 'font-family', 'my_font' );
$this->fail( 'Expected ezcDocumentInvalidFontException.' );
} catch ( ezcDocumentInvalidFontException $e )
{ /* Expected */ }
}
public function testRenderPlainTTFFont()
{
$driver = $this->getDriver();
try {
$driver->registerFont(
'my_font',
ezcDocumentPdfDriver::FONT_PLAIN,
array(
dirname( __FILE__ ) . '/../files/fonts/font.ttf',
)
);
} catch ( ezcBaseFunctionalityNotSupportedException $e )
{
$this->markTestSkipped( 'Fonts are not supported.' );
}
$driver->createPage( 250, 100 );
$driver->setTextFormatting( 'font-family', 'my_font' );
$driver->setTextFormatting( 'font-size', '10' );
$driver->drawWord( 0, 10, 'The quick brown fox jumps over the lazy dog' );
$pdf = $driver->save();
$this->assertPdfDocumentsSimilar( $pdf, get_class( $driver ) . '_' . __FUNCTION__ );
}
public function testRenderUnregisteredBoldTTFFont()
{
$driver = $this->getDriver();
try {
$driver->registerFont(
'my_font',
ezcDocumentPdfDriver::FONT_PLAIN,
array(
dirname( __FILE__ ) . '/../files/fonts/font.ttf',
)
);
} catch ( ezcBaseFunctionalityNotSupportedException $e )
{
$this->markTestSkipped( 'Fonts are not supported.' );
}
$driver->createPage( 250, 100 );
$driver->setTextFormatting( 'font-family', 'my_font' );
$driver->setTextFormatting( 'font-size', '10' );
$driver->setTextFormatting( 'font-weight', 'bold' );
$driver->drawWord( 0, 10, 'The quick brown fox jumps over the lazy dog' );
$pdf = $driver->save();
$this->assertPdfDocumentsSimilar( $pdf, get_class( $driver ) . '_' . __FUNCTION__ );
}
public function testRenderRegisteredBoldTTFFont()
{
$driver = $this->getDriver();
try {
$driver->registerFont(
'my_font',
ezcDocumentPdfDriver::FONT_PLAIN,
array(
dirname( __FILE__ ) . '/../files/fonts/font.ttf',
)
);
$driver->registerFont(
'my_font',
ezcDocumentPdfDriver::FONT_BOLD,
array(
dirname( __FILE__ ) . '/../files/fonts/font2.ttf',
)
);
} catch ( ezcBaseFunctionalityNotSupportedException $e )
{
$this->markTestSkipped( 'Fonts are not supported.' );
}
$driver->createPage( 250, 100 );
$driver->setTextFormatting( 'font-family', 'my_font' );
$driver->setTextFormatting( 'font-size', '10' );
$driver->setTextFormatting( 'font-weight', 'bold' );
$driver->drawWord( 0, 10, 'The quick brown fox jumps over the lazy dog' );
$pdf = $driver->save();
$this->assertPdfDocumentsSimilar( $pdf, get_class( $driver ) . '_' . __FUNCTION__ );
}
public function testRenderMultipleAlternativeFonts()
{
$driver = $this->getDriver();
try {
$driver->registerFont(
'my_font',
ezcDocumentPdfDriver::FONT_PLAIN,
array(
dirname( __FILE__ ) . '/../files/fonts/fdb_font.fdb',
dirname( __FILE__ ) . '/../files/fonts/ps_font.pfb',
dirname( __FILE__ ) . '/../files/fonts/font.ttf',
)
);
} catch ( ezcBaseFunctionalityNotSupportedException $e )
{
$this->markTestSkipped( 'Fonts are not supported.' );
}
$driver->createPage( 250, 100 );
$driver->setTextFormatting( 'font-family', 'my_font' );
$driver->setTextFormatting( 'font-size', '10' );
$driver->drawWord( 0, 10, 'The quick brown fox jumps over the lazy dog' );
$pdf = $driver->save();
$this->assertPdfDocumentsSimilar( $pdf, get_class( $driver ) . '_' . __FUNCTION__ );
}
public function testSetDocumentMetaDataTitle()
{
$driver = $this->getDriver();
$driver->createPage( 100, 100 );
$driver->setTextFormatting( 'font-size', '10' );
$driver->drawWord( 0, 10, 'Document metadata test.' );
$driver->setMetaData( 'title', 'Test document title' );
$pdf = $driver->save();
$this->assertPdfDocumentsSimilar( $pdf, get_class( $driver ) . '_' . __FUNCTION__ );
}
public function testSetDocumentMetaDataAuthor()
{
$driver = $this->getDriver();
$driver->createPage( 100, 100 );
$driver->setTextFormatting( 'font-size', '10' );
$driver->drawWord( 0, 10, 'Document metadata test.' );
$driver->setMetaData( 'author', 'Kore Nordmann' );
$pdf = $driver->save();
$this->assertPdfDocumentsSimilar( $pdf, get_class( $driver ) . '_' . __FUNCTION__ );
}
public function testSetDocumentMetaDataSubject()
{
$driver = $this->getDriver();
$driver->createPage( 100, 100 );
$driver->setTextFormatting( 'font-size', '10' );
$driver->drawWord( 0, 10, 'Document metadata test.' );
$driver->setMetaData( 'subject', 'Test document subject' );
$pdf = $driver->save();
$this->assertPdfDocumentsSimilar( $pdf, get_class( $driver ) . '_' . __FUNCTION__ );
}
public function testSetDocumentMetaDataCreated()
{
$driver = $this->getDriver();
$driver->createPage( 100, 100 );
$driver->setTextFormatting( 'font-size', '10' );
$driver->drawWord( 0, 10, 'Document metadata test.' );
$driver->setMetaData( 'created', date( 'r', 12345678 ) );
$pdf = $driver->save();
$this->assertPdfDocumentsSimilar( $pdf, get_class( $driver ) . '_' . __FUNCTION__ );
}
public function testSetDocumentMetaDataModified()
{
$driver = $this->getDriver();
$driver->createPage( 100, 100 );
$driver->setTextFormatting( 'font-size', '10' );
$driver->drawWord( 0, 10, 'Document metadata test.' );
$driver->setMetaData( 'modified', date( 'r', 12345678 ) );
$pdf = $driver->save();
$this->assertPdfDocumentsSimilar( $pdf, get_class( $driver ) . '_' . __FUNCTION__ );
}
public function testGenerateCompressedPdf()
{
$driver = $this->getDriver();
if ( $driver instanceof ezcDocumentPdfSvgDriver )
{
$this->markTestSkipped( 'Not supported by the SVG driver.' );
}
$options = new ezcDocumentPdfOptions();
$options->compress = true;
$driver->setOptions( $options );
$driver->createPage( 100, 100 );
$driver->setTextFormatting( 'font-size', '10' );
$driver->drawWord( 0, 10, 'Document compression test.' );
$pdf = $driver->save();
$this->assertPdfDocumentsSimilar( $pdf, get_class( $driver ) . '_' . __FUNCTION__ );
}
public function testGeneratePdfWithOwnerPassword()
{
$driver = $this->getDriver();
if ( $driver instanceof ezcDocumentPdfSvgDriver )
{
$this->markTestSkipped( 'Not supported by the SVG driver.' );
}
$options = new ezcDocumentPdfOptions();
$options->ownerPassword = 'foobar23';
$driver->setOptions( $options );
$driver->createPage( 100, 100 );
$driver->setTextFormatting( 'font-size', '10' );
$driver->drawWord( 0, 10, 'Document compression test.' );
$pdf = $driver->save();
// We cannot make any proper asserstions here, since the PDF contents
// change with each regeneration because of the encryption
$this->assertFalse( empty( $pdf ) );
}
public function testGenerateEncryptedPdf()
{
$driver = $this->getDriver();
if ( $driver instanceof ezcDocumentPdfSvgDriver )
{
$this->markTestSkipped( 'Not supported by the SVG driver.' );
}
$options = new ezcDocumentPdfOptions();
$options->ownerPassword = 'foobar23';
$options->userPassword = 'foobar';
$driver->setOptions( $options );
$driver->createPage( 100, 100 );
$driver->setTextFormatting( 'font-size', '10' );
$driver->drawWord( 0, 10, 'Document compression test.' );
$pdf = $driver->save();
// We cannot make any proper asserstions here, since the PDF contents
// change with each regeneration because of the encryption
$this->assertFalse( empty( $pdf ) );
}
public function testGenerateEncryptedProtectedPdf()
{
$driver = $this->getDriver();
if ( $driver instanceof ezcDocumentPdfSvgDriver )
{
$this->markTestSkipped( 'Not supported by the SVG driver.' );
}
$options = new ezcDocumentPdfOptions();
$options->permissions = 0;
$options->ownerPassword = 'foobar23';
$options->userPassword = 'foobar';
$driver->setOptions( $options );
$driver->createPage( 100, 100 );
$driver->setTextFormatting( 'font-size', '10' );
$driver->drawWord( 0, 10, 'Document compression test.' );
$pdf = $driver->save();
// We cannot make any proper asserstions here, since the PDF contents
// change with each regeneration because of the encryption
$this->assertFalse( empty( $pdf ) );
}
}
?>