p2 project
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

150 lines
6.2 KiB

2 months ago
<?php
namespace PhpOffice\PhpSpreadsheetTests\Shared;
use PhpOffice\PhpSpreadsheet\Shared\Font;
use PhpOffice\PhpSpreadsheet\Style\Font as StyleFont;
use PHPUnit\Framework\TestCase;
class Font2Test extends TestCase
{
/**
* @dataProvider providerCharsetFromFontName
*/
public function testCharsetFromFontName(string $fontName, int $expectedResult): void
{
$result = Font::getCharsetFromFontName($fontName);
self::assertEquals($expectedResult, $result);
}
public function testCharsetFromFontNameCoverage(): void
{
$covered = [];
$expected = Font::CHARSET_FROM_FONT_NAME;
foreach (array_keys($expected) as $key) {
$covered[$key] = 0;
}
$defaultCovered = false;
$tests = $this->providerCharsetFromFontName();
foreach ($tests as $test) {
$thisTest = $test[0];
if (array_key_exists($thisTest, $covered)) {
$covered[$thisTest] = 1;
} else {
$defaultCovered = true;
}
}
foreach ($covered as $key => $val) {
self::assertEquals(1, $val, "FontName $key not tested");
}
self::assertTrue($defaultCovered, 'Default key not tested');
}
public static function providerCharsetFromFontName(): array
{
return [
['EucrosiaUPC', Font::CHARSET_ANSI_THAI],
['Wingdings', Font::CHARSET_SYMBOL],
['Wingdings 2', Font::CHARSET_SYMBOL],
['Wingdings 3', Font::CHARSET_SYMBOL],
['Default', Font::CHARSET_ANSI_LATIN],
];
}
public function testColumnWidths(): void
{
$widths = Font::DEFAULT_COLUMN_WIDTHS;
$fontNames = ['Arial', 'Calibri', 'Verdana'];
$font = new StyleFont();
foreach ($fontNames as $fontName) {
$font->setName($fontName);
$array = $widths[$fontName];
foreach ($array as $points => $array2) {
$font->setSize($points);
$px = $array2['px'];
$width = $array2['width'];
self::assertEquals($px, Font::getDefaultColumnWidthByFont($font, true), "$fontName $points px");
self::assertEquals($width, Font::getDefaultColumnWidthByFont($font, false), "$fontName $points ooxml-units");
}
}
$pxCalibri11 = $widths['Calibri'][11]['px'];
$widthCalibri11 = $widths['Calibri'][11]['width'];
$fontName = 'unknown';
$points = 11;
$font->setName($fontName);
$font->setSize($points);
self::assertEquals($pxCalibri11, Font::getDefaultColumnWidthByFont($font, true), "$fontName $points px");
self::assertEquals($widthCalibri11, Font::getDefaultColumnWidthByFont($font, false), "$fontName $points ooxml-units");
$points = 22;
$font->setSize($points);
self::assertEquals(2 * $pxCalibri11, Font::getDefaultColumnWidthByFont($font, true), "$fontName $points px");
self::assertEquals(2 * $widthCalibri11, Font::getDefaultColumnWidthByFont($font, false), "$fontName $points ooxml-units");
$fontName = 'Arial';
$points = 33;
$font->setName($fontName);
$font->setSize($points);
self::assertEquals(3 * $pxCalibri11, Font::getDefaultColumnWidthByFont($font, true), "$fontName $points px");
self::assertEquals(3 * $widthCalibri11, Font::getDefaultColumnWidthByFont($font, false), "$fontName $points ooxml-units");
}
public function testRowHeights(): void
{
$heights = Font::DEFAULT_COLUMN_WIDTHS;
$fontNames = ['Arial', 'Calibri', 'Verdana'];
$font = new StyleFont();
foreach ($fontNames as $fontName) {
$font->setName($fontName);
$array = $heights[$fontName];
foreach ($array as $points => $array2) {
$font->setSize($points);
$height = $array2['height'];
self::assertEquals($height, Font::getDefaultRowHeightByFont($font), "$fontName $points points");
}
}
$heightArial10 = $heights['Arial'][10]['height'];
$fontName = 'Arial';
$points = 20;
$font->setName($fontName);
$font->setSize($points);
self::assertEquals(2 * $heightArial10, Font::getDefaultRowHeightByFont($font), "$fontName $points points");
$heightVerdana10 = $heights['Verdana'][10]['height'];
$fontName = 'Verdana';
$points = 30;
$font->setName($fontName);
$font->setSize($points);
self::assertEquals(3 * $heightVerdana10, Font::getDefaultRowHeightByFont($font), "$fontName $points points");
$heightCalibri11 = $heights['Calibri'][11]['height'];
$fontName = 'Calibri';
$points = 22;
$font->setName($fontName);
$font->setSize($points);
self::assertEquals(2 * $heightCalibri11, Font::getDefaultRowHeightByFont($font), "$fontName $points points");
$fontName = 'unknown';
$points = 33;
$font->setName($fontName);
$font->setSize($points);
self::assertEquals(3 * $heightCalibri11, Font::getDefaultRowHeightByFont($font), "$fontName $points points");
}
public function testGetTrueTypeFontFileFromFont(): void
{
$fileNames = Font::FONT_FILE_NAMES;
$font = new StyleFont();
foreach ($fileNames as $fontName => $fontNameArray) {
$font->setName($fontName);
$font->setBold(false);
$font->setItalic(false);
self::assertSame($fileNames[$fontName]['x'], Font::getTrueTypeFontFileFromFont($font, false), "$fontName not bold not italic");
$font->setBold(true);
$font->setItalic(false);
self::assertSame($fileNames[$fontName]['xb'], Font::getTrueTypeFontFileFromFont($font, false), "$fontName bold not italic");
$font->setBold(false);
$font->setItalic(true);
self::assertSame($fileNames[$fontName]['xi'], Font::getTrueTypeFontFileFromFont($font, false), "$fontName not bold italic");
$font->setBold(true);
$font->setItalic(true);
self::assertSame($fileNames[$fontName]['xbi'], Font::getTrueTypeFontFileFromFont($font, false), "$fontName bold italic");
}
}
}