GnumericLoadTest.php 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175
  1. <?php
  2. namespace PhpOffice\PhpSpreadsheetTests\Reader\Gnumeric;
  3. use DateTimeZone;
  4. use PhpOffice\PhpSpreadsheet\Reader\Gnumeric;
  5. use PhpOffice\PhpSpreadsheet\Shared\Date;
  6. use PhpOffice\PhpSpreadsheet\Style\Border;
  7. use PhpOffice\PhpSpreadsheet\Style\Borders;
  8. use PhpOffice\PhpSpreadsheet\Style\Color;
  9. use PhpOffice\PhpSpreadsheet\Style\Fill;
  10. use PhpOffice\PhpSpreadsheet\Style\Font;
  11. use PHPUnit\Framework\TestCase;
  12. class GnumericLoadTest extends TestCase
  13. {
  14. public function testLoad(): void
  15. {
  16. $filename = __DIR__
  17. . '/../../../..'
  18. . '/samples/templates/GnumericTest.gnumeric';
  19. $reader = new Gnumeric();
  20. $spreadsheet = $reader->load($filename);
  21. self::assertEquals(2, $spreadsheet->getSheetCount());
  22. $sheet = $spreadsheet->getSheet(1);
  23. self::assertEquals('Report Data', $sheet->getTitle());
  24. self::assertEquals('BCD', $sheet->getCell('A4')->getValue());
  25. $props = $spreadsheet->getProperties();
  26. self::assertEquals('Mark Baker', $props->getCreator());
  27. $creationDate = $props->getCreated();
  28. $result = Date::formattedDateTimeFromTimestamp("$creationDate", 'Y-m-d\\TH:i:s\\Z', new DateTimeZone('UTC'));
  29. self::assertEquals('2010-09-02T20:48:39Z', $result);
  30. $creationDate = $props->getModified();
  31. $result = Date::formattedDateTimeFromTimestamp("$creationDate", 'Y-m-d\\TH:i:s\\Z', new DateTimeZone('UTC'));
  32. self::assertEquals('2020-06-05T05:15:21Z', $result);
  33. $sheet = $spreadsheet->getSheet(0);
  34. self::assertEquals('Sample Data', $sheet->getTitle());
  35. self::assertEquals('Test String 1', $sheet->getCell('A1')->getValue());
  36. self::assertEquals('FFFF0000', $sheet->getCell('A1')->getStyle()->getFont()->getColor()->getARGB());
  37. self::assertEquals(Font::UNDERLINE_SINGLE, $sheet->getCell('A3')->getStyle()->getFont()->getUnderline());
  38. self::assertEquals('Test with (") in string', $sheet->getCell('A4')->getValue());
  39. self::assertEquals(22269, $sheet->getCell('A10')->getValue());
  40. self::assertEquals('dd/mm/yyyy', $sheet->getCell('A10')->getStyle()->getNumberFormat()->getFormatCode());
  41. self::assertEquals('19/12/1960', $sheet->getCell('A10')->getFormattedValue());
  42. self::assertEquals(1.5, $sheet->getCell('A11')->getValue());
  43. self::assertEquals('# ?0/??0', $sheet->getCell('A11')->getStyle()->getNumberFormat()->getFormatCode());
  44. // Same pattern, same value, different display in Gnumeric vs Excel
  45. //self::assertEquals('1 1/2', $sheet->getCell('A11')->getFormattedValue());
  46. self::assertEquals('=B1+C1', $sheet->getCell('H1')->getValue());
  47. self::assertEquals('=E2&F2', $sheet->getCell('J2')->getValue());
  48. self::assertEquals('=sum(C1:C4)', $sheet->getCell('I5')->getValue());
  49. self::assertTrue($sheet->getCell('E1')->getStyle()->getFont()->getBold());
  50. self::assertTrue($sheet->getCell('E1')->getStyle()->getFont()->getItalic());
  51. self::assertFalse($sheet->getCell('E2')->getStyle()->getFont()->getBold());
  52. self::assertFalse($sheet->getCell('E2')->getStyle()->getFont()->getItalic());
  53. self::assertEquals(Font::UNDERLINE_NONE, $sheet->getCell('E2')->getStyle()->getFont()->getUnderline());
  54. self::assertTrue($sheet->getCell('E3')->getStyle()->getFont()->getBold());
  55. self::assertFalse($sheet->getCell('E3')->getStyle()->getFont()->getItalic());
  56. self::assertEquals(Font::UNDERLINE_NONE, $sheet->getCell('E3')->getStyle()->getFont()->getUnderline());
  57. self::assertFalse($sheet->getCell('E4')->getStyle()->getFont()->getBold());
  58. self::assertTrue($sheet->getCell('E4')->getStyle()->getFont()->getItalic());
  59. self::assertEquals(Font::UNDERLINE_NONE, $sheet->getCell('E4')->getStyle()->getFont()->getUnderline());
  60. self::assertTrue($sheet->getCell('F1')->getStyle()->getFont()->getBold());
  61. self::assertFalse($sheet->getCell('F1')->getStyle()->getFont()->getItalic());
  62. self::assertEquals(Font::UNDERLINE_NONE, $sheet->getCell('F1')->getStyle()->getFont()->getUnderline());
  63. self::assertFalse($sheet->getCell('F2')->getStyle()->getFont()->getBold());
  64. self::assertFalse($sheet->getCell('F2')->getStyle()->getFont()->getItalic());
  65. self::assertEquals(Font::UNDERLINE_NONE, $sheet->getCell('F2')->getStyle()->getFont()->getUnderline());
  66. self::assertTrue($sheet->getCell('F3')->getStyle()->getFont()->getBold());
  67. self::assertTrue($sheet->getCell('F3')->getStyle()->getFont()->getItalic());
  68. self::assertEquals(Font::UNDERLINE_NONE, $sheet->getCell('F3')->getStyle()->getFont()->getUnderline());
  69. self::assertFalse($sheet->getCell('F4')->getStyle()->getFont()->getBold());
  70. self::assertFalse($sheet->getCell('F4')->getStyle()->getFont()->getItalic());
  71. self::assertEquals(Font::UNDERLINE_NONE, $sheet->getCell('F4')->getStyle()->getFont()->getUnderline());
  72. self::assertEquals(Border::BORDER_MEDIUM, $sheet->getCell('C10')->getStyle()->getBorders()->getTop()->getBorderStyle());
  73. self::assertEquals(Border::BORDER_NONE, $sheet->getCell('C10')->getStyle()->getBorders()->getRight()->getBorderStyle());
  74. self::assertEquals(Border::BORDER_NONE, $sheet->getCell('C10')->getStyle()->getBorders()->getBottom()->getBorderStyle());
  75. self::assertEquals(Border::BORDER_NONE, $sheet->getCell('C10')->getStyle()->getBorders()->getLeft()->getBorderStyle());
  76. self::assertEquals(Border::BORDER_NONE, $sheet->getCell('C12')->getStyle()->getBorders()->getTop()->getBorderStyle());
  77. self::assertEquals(Border::BORDER_NONE, $sheet->getCell('C12')->getStyle()->getBorders()->getRight()->getBorderStyle());
  78. self::assertEquals(Border::BORDER_MEDIUM, $sheet->getCell('C12')->getStyle()->getBorders()->getBottom()->getBorderStyle());
  79. self::assertEquals(Border::BORDER_NONE, $sheet->getCell('C12')->getStyle()->getBorders()->getLeft()->getBorderStyle());
  80. self::assertEquals(Border::BORDER_NONE, $sheet->getCell('C14')->getStyle()->getBorders()->getTop()->getBorderStyle());
  81. self::assertEquals(Border::BORDER_NONE, $sheet->getCell('C14')->getStyle()->getBorders()->getRight()->getBorderStyle());
  82. self::assertEquals(Border::BORDER_NONE, $sheet->getCell('C14')->getStyle()->getBorders()->getBottom()->getBorderStyle());
  83. self::assertEquals(Border::BORDER_MEDIUM, $sheet->getCell('C14')->getStyle()->getBorders()->getLeft()->getBorderStyle());
  84. self::assertEquals(Border::BORDER_NONE, $sheet->getCell('C16')->getStyle()->getBorders()->getTop()->getBorderStyle());
  85. self::assertEquals(Border::BORDER_MEDIUM, $sheet->getCell('C16')->getStyle()->getBorders()->getRight()->getBorderStyle());
  86. self::assertEquals(Border::BORDER_NONE, $sheet->getCell('C16')->getStyle()->getBorders()->getBottom()->getBorderStyle());
  87. self::assertEquals(Border::BORDER_NONE, $sheet->getCell('C16')->getStyle()->getBorders()->getLeft()->getBorderStyle());
  88. self::assertEquals(Border::BORDER_THICK, $sheet->getCell('C18')->getStyle()->getBorders()->getTop()->getBorderStyle());
  89. self::assertEquals(Color::COLOR_RED, $sheet->getCell('C18')->getStyle()->getBorders()->getTop()->getColor()->getARGB());
  90. self::assertEquals(Border::BORDER_THICK, $sheet->getCell('C18')->getStyle()->getBorders()->getRight()->getBorderStyle());
  91. self::assertEquals(Color::COLOR_YELLOW, $sheet->getCell('C18')->getStyle()->getBorders()->getRight()->getColor()->getARGB());
  92. self::assertEquals(Border::BORDER_THICK, $sheet->getCell('C18')->getStyle()->getBorders()->getRight()->getBorderStyle());
  93. self::assertEquals(Border::BORDER_NONE, $sheet->getCell('C18')->getStyle()->getBorders()->getBottom()->getBorderStyle());
  94. self::assertEquals(Border::BORDER_NONE, $sheet->getCell('C18')->getStyle()->getBorders()->getLeft()->getBorderStyle());
  95. self::assertEquals(Fill::FILL_PATTERN_DARKHORIZONTAL, $sheet->getCell('K19')->getStyle()->getFill()->getFillType());
  96. self::assertEquals('FF00CCFF', $sheet->getCell('K19')->getStyle()->getFill()->getEndColor()->getARGB());
  97. self::assertEquals(Color::COLOR_BLUE, $sheet->getCell('K19')->getStyle()->getFill()->getStartColor()->getARGB());
  98. self::assertEquals(Fill::FILL_PATTERN_GRAY0625, $sheet->getCell('L19')->getStyle()->getFill()->getFillType());
  99. self::assertEquals(Color::COLOR_RED, $sheet->getCell('L19')->getStyle()->getFill()->getEndColor()->getARGB());
  100. self::assertEquals(Color::COLOR_YELLOW, $sheet->getCell('L19')->getStyle()->getFill()->getStartColor()->getARGB());
  101. self::assertEquals(Fill::FILL_SOLID, $sheet->getCell('K3')->getStyle()->getFill()->getFillType());
  102. self::assertEquals(Color::COLOR_RED, $sheet->getCell('K3')->getStyle()->getFill()->getStartColor()->getARGB());
  103. self::assertEquals(45, $sheet->getCell('E22')->getStyle()->getAlignment()->getTextRotation());
  104. self::assertEquals(-90, $sheet->getCell('G22')->getStyle()->getAlignment()->getTextRotation());
  105. self::assertEquals(Border::BORDER_DOUBLE, $sheet->getCell('N13')->getStyle()->getBorders()->getBottom()->getBorderStyle());
  106. self::assertEquals(Borders::DIAGONAL_BOTH, $sheet->getCell('E18')->getStyle()->getBorders()->getDiagonalDirection());
  107. self::assertEquals(Borders::DIAGONAL_DOWN, $sheet->getCell('I18')->getStyle()->getBorders()->getDiagonalDirection());
  108. self::assertEquals(Borders::DIAGONAL_UP, $sheet->getCell('J18')->getStyle()->getBorders()->getDiagonalDirection());
  109. self::assertEquals(Font::UNDERLINE_DOUBLE, $sheet->getCell('A24')->getStyle()->getFont()->getUnderline());
  110. self::assertTrue($sheet->getCell('B23')->getStyle()->getFont()->getSubScript());
  111. self::assertTrue($sheet->getCell('B24')->getStyle()->getFont()->getSuperScript());
  112. $rowDimension = $sheet->getRowDimension(30);
  113. self::assertFalse($rowDimension->getVisible());
  114. self::assertSame('B24', $sheet->getSelectedCells());
  115. }
  116. public function testLoadFilter(): void
  117. {
  118. $filename = __DIR__
  119. . '/../../../..'
  120. . '/samples/templates/GnumericTest.gnumeric';
  121. $reader = new Gnumeric();
  122. $filter = new GnumericFilter();
  123. $reader->setReadFilter($filter);
  124. $spreadsheet = $reader->load($filename);
  125. self::assertEquals(2, $spreadsheet->getSheetCount());
  126. $sheet = $spreadsheet->getSheet(1);
  127. self::assertEquals('Report Data', $sheet->getTitle());
  128. self::assertEquals('', $sheet->getCell('A4')->getValue());
  129. $props = $spreadsheet->getProperties();
  130. self::assertEquals('Mark Baker', $props->getCreator());
  131. }
  132. public function testLoadOld(): void
  133. {
  134. $filename = __DIR__
  135. . '/../../../..'
  136. . '/samples/templates/old.gnumeric';
  137. $reader = new Gnumeric();
  138. $spreadsheet = $reader->load($filename);
  139. $props = $spreadsheet->getProperties();
  140. self::assertEquals('David Gilbert', $props->getCreator());
  141. }
  142. public function testLoadSelectedSheets(): void
  143. {
  144. $filename = __DIR__
  145. . '/../../../..'
  146. . '/samples/templates/GnumericTest.gnumeric';
  147. $reader = new Gnumeric();
  148. $reader->setLoadSheetsOnly(['Unknown Sheet', 'Report Data']);
  149. $spreadsheet = $reader->load($filename);
  150. self::assertEquals(1, $spreadsheet->getSheetCount());
  151. $sheet = $spreadsheet->getSheet(0);
  152. self::assertEquals('Report Data', $sheet->getTitle());
  153. self::assertEquals('Third Heading', $sheet->getCell('C2')->getValue());
  154. self::assertSame('A1', $sheet->getSelectedCells());
  155. }
  156. }