Font2Test.php 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  1. <?php
  2. namespace PhpOffice\PhpSpreadsheetTests\Shared;
  3. use PhpOffice\PhpSpreadsheet\Shared\Font;
  4. use PhpOffice\PhpSpreadsheet\Style\Font as StyleFont;
  5. use PHPUnit\Framework\TestCase;
  6. class Font2Test extends TestCase
  7. {
  8. /**
  9. * @dataProvider providerCharsetFromFontName
  10. */
  11. public function testCharsetFromFontName(string $fontName, int $expectedResult): void
  12. {
  13. $result = Font::getCharsetFromFontName($fontName);
  14. self::assertEquals($expectedResult, $result);
  15. }
  16. public function testCharsetFromFontNameCoverage(): void
  17. {
  18. $covered = [];
  19. $expected = Font::CHARSET_FROM_FONT_NAME;
  20. foreach (array_keys($expected) as $key) {
  21. $covered[$key] = 0;
  22. }
  23. $defaultCovered = false;
  24. $tests = $this->providerCharsetFromFontName();
  25. foreach ($tests as $test) {
  26. $thisTest = $test[0];
  27. if (array_key_exists($thisTest, $covered)) {
  28. $covered[$thisTest] = 1;
  29. } else {
  30. $defaultCovered = true;
  31. }
  32. }
  33. foreach ($covered as $key => $val) {
  34. self::assertEquals(1, $val, "FontName $key not tested");
  35. }
  36. self::assertTrue($defaultCovered, 'Default key not tested');
  37. }
  38. public function providerCharsetFromFontName(): array
  39. {
  40. return [
  41. ['EucrosiaUPC', Font::CHARSET_ANSI_THAI],
  42. ['Wingdings', Font::CHARSET_SYMBOL],
  43. ['Wingdings 2', Font::CHARSET_SYMBOL],
  44. ['Wingdings 3', Font::CHARSET_SYMBOL],
  45. ['Default', Font::CHARSET_ANSI_LATIN],
  46. ];
  47. }
  48. public function testColumnWidths(): void
  49. {
  50. $widths = Font::DEFAULT_COLUMN_WIDTHS;
  51. $fontNames = ['Arial', 'Calibri', 'Verdana'];
  52. $font = new StyleFont();
  53. foreach ($fontNames as $fontName) {
  54. $font->setName($fontName);
  55. $array = $widths[$fontName];
  56. foreach ($array as $points => $array2) {
  57. $font->setSize($points);
  58. $px = $array2['px'];
  59. $width = $array2['width'];
  60. self::assertEquals($px, Font::getDefaultColumnWidthByFont($font, true), "$fontName $points px");
  61. self::assertEquals($width, Font::getDefaultColumnWidthByFont($font, false), "$fontName $points ooxml-units");
  62. }
  63. }
  64. $pxCalibri11 = $widths['Calibri'][11]['px'];
  65. $widthCalibri11 = $widths['Calibri'][11]['width'];
  66. $fontName = 'unknown';
  67. $points = 11;
  68. $font->setName($fontName);
  69. $font->setSize($points);
  70. self::assertEquals($pxCalibri11, Font::getDefaultColumnWidthByFont($font, true), "$fontName $points px");
  71. self::assertEquals($widthCalibri11, Font::getDefaultColumnWidthByFont($font, false), "$fontName $points ooxml-units");
  72. $points = 22;
  73. $font->setSize($points);
  74. self::assertEquals(2 * $pxCalibri11, Font::getDefaultColumnWidthByFont($font, true), "$fontName $points px");
  75. self::assertEquals(2 * $widthCalibri11, Font::getDefaultColumnWidthByFont($font, false), "$fontName $points ooxml-units");
  76. $fontName = 'Arial';
  77. $points = 33;
  78. $font->setName($fontName);
  79. $font->setSize($points);
  80. self::assertEquals(3 * $pxCalibri11, Font::getDefaultColumnWidthByFont($font, true), "$fontName $points px");
  81. self::assertEquals(3 * $widthCalibri11, Font::getDefaultColumnWidthByFont($font, false), "$fontName $points ooxml-units");
  82. }
  83. public function testRowHeights(): void
  84. {
  85. $heights = Font::DEFAULT_COLUMN_WIDTHS;
  86. $fontNames = ['Arial', 'Calibri', 'Verdana'];
  87. $font = new StyleFont();
  88. foreach ($fontNames as $fontName) {
  89. $font->setName($fontName);
  90. $array = $heights[$fontName];
  91. foreach ($array as $points => $array2) {
  92. $font->setSize($points);
  93. $height = $array2['height'];
  94. self::assertEquals($height, Font::getDefaultRowHeightByFont($font), "$fontName $points points");
  95. }
  96. }
  97. $heightArial10 = $heights['Arial'][10]['height'];
  98. $fontName = 'Arial';
  99. $points = 20;
  100. $font->setName($fontName);
  101. $font->setSize($points);
  102. self::assertEquals(2 * $heightArial10, Font::getDefaultRowHeightByFont($font), "$fontName $points points");
  103. $heightVerdana10 = $heights['Verdana'][10]['height'];
  104. $fontName = 'Verdana';
  105. $points = 30;
  106. $font->setName($fontName);
  107. $font->setSize($points);
  108. self::assertEquals(3 * $heightVerdana10, Font::getDefaultRowHeightByFont($font), "$fontName $points points");
  109. $heightCalibri11 = $heights['Calibri'][11]['height'];
  110. $fontName = 'Calibri';
  111. $points = 22;
  112. $font->setName($fontName);
  113. $font->setSize($points);
  114. self::assertEquals(2 * $heightCalibri11, Font::getDefaultRowHeightByFont($font), "$fontName $points points");
  115. $fontName = 'unknown';
  116. $points = 33;
  117. $font->setName($fontName);
  118. $font->setSize($points);
  119. self::assertEquals(3 * $heightCalibri11, Font::getDefaultRowHeightByFont($font), "$fontName $points points");
  120. }
  121. public function testGetTrueTypeFontFileFromFont(): void
  122. {
  123. $fileNames = Font::FONT_FILE_NAMES;
  124. $font = new StyleFont();
  125. foreach ($fileNames as $fontName => $fontNameArray) {
  126. $font->setName($fontName);
  127. $font->setBold(false);
  128. $font->setItalic(false);
  129. self::assertSame($fileNames[$fontName]['x'], Font::getTrueTypeFontFileFromFont($font, false), "$fontName not bold not italic");
  130. $font->setBold(true);
  131. $font->setItalic(false);
  132. self::assertSame($fileNames[$fontName]['xb'], Font::getTrueTypeFontFileFromFont($font, false), "$fontName bold not italic");
  133. $font->setBold(false);
  134. $font->setItalic(true);
  135. self::assertSame($fileNames[$fontName]['xi'], Font::getTrueTypeFontFileFromFont($font, false), "$fontName not bold italic");
  136. $font->setBold(true);
  137. $font->setItalic(true);
  138. self::assertSame($fileNames[$fontName]['xbi'], Font::getTrueTypeFontFileFromFont($font, false), "$fontName bold italic");
  139. }
  140. }
  141. }