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.
137 lines
4.6 KiB
137 lines
4.6 KiB
<?php
|
|
|
|
namespace PhpOffice\PhpSpreadsheetTests\Shared;
|
|
|
|
use PhpOffice\PhpSpreadsheet\Shared\Font;
|
|
use PhpOffice\PhpSpreadsheet\Style\Font as StyleFont;
|
|
use PHPUnit\Framework\TestCase;
|
|
|
|
class FontTest extends TestCase
|
|
{
|
|
const FONT_PRECISION = 1.0E-12;
|
|
|
|
public function testGetAutoSizeMethod(): void
|
|
{
|
|
$expectedResult = Font::AUTOSIZE_METHOD_APPROX;
|
|
|
|
$result = Font::getAutoSizeMethod();
|
|
self::assertEquals($expectedResult, $result);
|
|
}
|
|
|
|
public function testSetAutoSizeMethod(): void
|
|
{
|
|
$autosizeMethodValues = [
|
|
Font::AUTOSIZE_METHOD_EXACT,
|
|
Font::AUTOSIZE_METHOD_APPROX,
|
|
];
|
|
|
|
foreach ($autosizeMethodValues as $autosizeMethodValue) {
|
|
$result = Font::setAutoSizeMethod($autosizeMethodValue);
|
|
self::assertTrue($result);
|
|
}
|
|
}
|
|
|
|
public function testSetAutoSizeMethodWithInvalidValue(): void
|
|
{
|
|
$unsupportedAutosizeMethod = 'guess';
|
|
|
|
$result = Font::setAutoSizeMethod($unsupportedAutosizeMethod);
|
|
self::assertFalse($result);
|
|
}
|
|
|
|
/**
|
|
* @dataProvider providerFontSizeToPixels
|
|
*
|
|
* @param mixed $expectedResult
|
|
* @param mixed $size
|
|
*/
|
|
public function testFontSizeToPixels($expectedResult, $size): void
|
|
{
|
|
$result = Font::fontSizeToPixels($size);
|
|
self::assertEquals($expectedResult, $result);
|
|
}
|
|
|
|
public static function providerFontSizeToPixels(): array
|
|
{
|
|
return require 'tests/data/Shared/FontSizeToPixels.php';
|
|
}
|
|
|
|
/**
|
|
* @dataProvider providerInchSizeToPixels
|
|
*
|
|
* @param mixed $expectedResult
|
|
* @param mixed $size
|
|
*/
|
|
public function testInchSizeToPixels($expectedResult, $size): void
|
|
{
|
|
$result = Font::inchSizeToPixels($size);
|
|
self::assertEqualsWithDelta($expectedResult, $result, self::FONT_PRECISION);
|
|
}
|
|
|
|
public static function providerInchSizeToPixels(): array
|
|
{
|
|
return require 'tests/data/Shared/InchSizeToPixels.php';
|
|
}
|
|
|
|
/**
|
|
* @dataProvider providerCentimeterSizeToPixels
|
|
*
|
|
* @param mixed $expectedResult
|
|
* @param mixed $size
|
|
*/
|
|
public function testCentimeterSizeToPixels($expectedResult, $size): void
|
|
{
|
|
$result = Font::centimeterSizeToPixels($size);
|
|
self::assertEqualsWithDelta($expectedResult, $result, self::FONT_PRECISION);
|
|
}
|
|
|
|
public static function providerCentimeterSizeToPixels(): array
|
|
{
|
|
return require 'tests/data/Shared/CentimeterSizeToPixels.php';
|
|
}
|
|
|
|
public function testVerdanaRotation(): void
|
|
{
|
|
$font = new StyleFont();
|
|
$font->setName('Verdana')->setSize(10);
|
|
$width = Font::getTextWidthPixelsApprox('n', $font, 0);
|
|
self::assertEquals(8, $width);
|
|
$width = Font::getTextWidthPixelsApprox('n', $font, 45);
|
|
self::assertEquals(7, $width);
|
|
$width = Font::getTextWidthPixelsApprox('n', $font, -165);
|
|
self::assertEquals(4, $width);
|
|
}
|
|
|
|
/**
|
|
* @dataProvider providerCalculateApproximateColumnWidth
|
|
*/
|
|
public function testCalculateApproximateColumnWidth(
|
|
float $expectedWidth,
|
|
StyleFont $font,
|
|
string $text,
|
|
int $rotation,
|
|
StyleFont $defaultFont,
|
|
bool $filter,
|
|
int $indent
|
|
): void {
|
|
$columnWidth = Font::calculateColumnWidth($font, $text, $rotation, $defaultFont, $filter, $indent);
|
|
self::assertEquals($expectedWidth, $columnWidth);
|
|
}
|
|
|
|
public static function providerCalculateApproximateColumnWidth(): array
|
|
{
|
|
return [
|
|
[13.9966, new StyleFont(), 'Hello World', 0, new StyleFont(), false, 0],
|
|
[16.2817, new StyleFont(), 'Hello World', 0, new StyleFont(), true, 0],
|
|
[16.2817, new StyleFont(), 'Hello World', 0, new StyleFont(), false, 1],
|
|
[18.7097, new StyleFont(), 'Hello World', 0, new StyleFont(), false, 2],
|
|
[20.9949, new StyleFont(), 'Hello World', 0, new StyleFont(), false, 3],
|
|
[6.9983, new StyleFont(), "Hello\nWorld", 0, new StyleFont(), false, 0],
|
|
[9.2834, new StyleFont(), "Hello\nWorld", 0, new StyleFont(), true, 0],
|
|
[17.5671, new StyleFont(), 'PhpSpreadsheet', 0, new StyleFont(), false, 0],
|
|
[19.8523, new StyleFont(), 'PhpSpreadsheet', 0, new StyleFont(), false, 1],
|
|
'CJK characters width must be >= 43.00' => [55.2722, new StyleFont(), '如果某一列是CJK 其中的一种,这样的设置方式无效', 0, new StyleFont(), false, 0],
|
|
'non-CJK characters width must be >= 24.73' => [31.7065, new StyleFont(), 'abcdefghijklmnopqrstuvwxyz', 0, new StyleFont(), false, 0],
|
|
];
|
|
}
|
|
}
|
|
|