Files
electionvue/vendor/tecnickcom/tc-lib-pdf-font/test/ImportInternalsTest.php
T
2026-08-30 22:02:02 +00:00

163 lines
5.9 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?php
/**
* ImportInternalsTest.php
*
* @since 2026-05-05
* @category Library
* @package PdfFont
* @author Nicola Asuni <info@tecnick.com>
* @copyright 2011-2026 Nicola Asuni - Tecnick.com LTD
* @license https://www.gnu.org/copyleft/lesser.html GNU-LGPL v3 (see LICENSE)
* @link https://github.com/tecnickcom/tc-lib-pdf-font
*
* This file is part of tc-lib-pdf-font software library.
*/
namespace Test;
use Com\Tecnick\Pdf\Font\Import;
/**
* Tests for protected methods of Import that cannot be reached through the
* normal public constructor path in isolation.
*
* @since 2026-05-05
* @category Library
* @package PdfFont
* @author Nicola Asuni <info@tecnick.com>
* @copyright 2011-2026 Nicola Asuni - Tecnick.com LTD
* @license https://www.gnu.org/copyleft/lesser.html GNU-LGPL v3 (see LICENSE)
* @link https://github.com/tecnickcom/tc-lib-pdf-font
*/
class ImportInternalsTest extends TestUtil
{
private function buildImport(): Import
{
$class = new \ReflectionClass(Import::class);
return $class->newInstanceWithoutConstructor();
}
/**
* @param array<int, mixed> $args
*/
private function callStringMethod(object $obj, string $method, array $args = []): string
{
$ref = new \ReflectionMethod($obj, $method);
if (!\is_string($ref->invokeArgs($obj, $args))) {
$this->fail('Expected string return value.');
}
return (string) $ref->invokeArgs($obj, $args);
}
private function setFdt(object $obj, mixed $fdt): void
{
$prop = new \ReflectionProperty($obj, 'fdt');
$prop->setValue($obj, $fdt);
}
// -------------------------------------------------------------------------
// updateCIDtoGIDmap
// -------------------------------------------------------------------------
public function testUpdateCIDtoGIDmapSetsGlyphPairBytes(): void
{
$instance = $this->buildImport();
// 65536 CID slots × 2 bytes = 131072 bytes
$map = str_repeat("\x00", 131072);
$result = $this->callStringMethod($instance, 'updateCIDtoGIDmap', [$map, 65, 42]);
// gid 42 = 0x002A → high byte = 0x00, low byte = 0x2A
$this->assertSame(0, ord($result[65 * 2]));
$this->assertSame(42, ord($result[(65 * 2) + 1]));
}
public function testUpdateCIDtoGIDmapIgnoresCidOutOfRange(): void
{
$instance = $this->buildImport();
$map = str_repeat("\x00", 131072);
$result = $this->callStringMethod($instance, 'updateCIDtoGIDmap', [$map, 0x10000, 5]);
// CID 0x10000 is out of the 0..0xFFFF range → map unchanged
$this->assertSame($map, $result);
}
public function testUpdateCIDtoGIDmapIgnoresGidAbove0xffff(): void
{
$instance = $this->buildImport();
$map = str_repeat("\x00", 131072);
// gid = 0x1002A is outside the representable 16-bit range → entry left as 0 (notdef)
$result = $this->callStringMethod($instance, 'updateCIDtoGIDmap', [$map, 0, 0x1002A]);
$this->assertSame(0, ord($result[0]));
$this->assertSame(0, ord($result[1]));
}
public function testUpdateCIDtoGIDmapIgnoresNegativeGid(): void
{
$instance = $this->buildImport();
$map = str_repeat("\x00", 131072);
// gid < 0 → condition ($gid >= 0) is false → map unchanged
$result = $this->callStringMethod($instance, 'updateCIDtoGIDmap', [$map, 10, -1]);
$this->assertSame($map, $result);
}
// -------------------------------------------------------------------------
// getEncodingTable
// -------------------------------------------------------------------------
public function testGetEncodingTableReturnsCp1252ForType1NonSymbolic(): void
{
$instance = $this->buildImport();
$this->setFdt($instance, ['type' => 'Type1', 'Flags' => 32]);
// Flags & 4 == 0 → non-symbolic Type1 → cp1252
$result = $this->callStringMethod($instance, 'getEncodingTable', ['']);
$this->assertSame('cp1252', $result);
}
public function testGetEncodingTableReturnsEmptyForType1Symbolic(): void
{
$instance = $this->buildImport();
$this->setFdt($instance, ['type' => 'Type1', 'Flags' => 4]);
// Flags & 4 != 0 → symbolic → empty string
$result = $this->callStringMethod($instance, 'getEncodingTable', ['']);
$this->assertSame('', $result);
}
public function testGetEncodingTableReturnsEmptyForTrueTypeUnicode(): void
{
$instance = $this->buildImport();
$this->setFdt($instance, ['type' => 'TrueTypeUnicode', 'Flags' => 0]);
$result = $this->callStringMethod($instance, 'getEncodingTable', ['']);
$this->assertSame('', $result);
}
public function testGetEncodingTablePassesThroughExplicitEncoding(): void
{
$instance = $this->buildImport();
$this->setFdt($instance, ['type' => 'TrueType', 'Flags' => 0]);
$result = $this->callStringMethod($instance, 'getEncodingTable', ['iso-8859-1']);
$this->assertSame('iso-8859-1', $result);
}
// -------------------------------------------------------------------------
// findOutputPath
// -------------------------------------------------------------------------
public function testFindOutputPathReturnsKPathFontsWhenDefined(): void
{
$this->setupTest();
$instance = $this->buildImport();
$result = $this->callStringMethod($instance, 'findOutputPath', ['']);
$this->assertSame(constant('K_PATH_FONTS'), $result);
}
public function testFindOutputPathReturnsProvidedWritablePath(): void
{
$outdir = dirname(__DIR__) . '/target/tmptest/internals/';
system('mkdir -p ' . $outdir);
$instance = $this->buildImport();
$result = $this->callStringMethod($instance, 'findOutputPath', [$outdir]);
$this->assertSame($outdir, $result);
}
}