PropertiesTest.php 4.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. <?php
  2. namespace PhpOffice\PhpSpreadsheetTests\Reader\Xlsx;
  3. use DateTimeZone;
  4. use PhpOffice\PhpSpreadsheet\Document\Properties;
  5. use PhpOffice\PhpSpreadsheet\Reader\Xlsx;
  6. use PhpOffice\PhpSpreadsheet\Shared\Date;
  7. use PhpOffice\PhpSpreadsheetTests\Functional\AbstractFunctional;
  8. class PropertiesTest extends AbstractFunctional
  9. {
  10. public function testLoadXlsxWorkbookProperties(): void
  11. {
  12. $customPropertySet = [
  13. 'Publisher' => ['type' => Properties::PROPERTY_TYPE_STRING, 'value' => 'PHPOffice Suite'],
  14. 'Tested' => ['type' => Properties::PROPERTY_TYPE_BOOLEAN, 'value' => true],
  15. 'Counter' => ['type' => Properties::PROPERTY_TYPE_INTEGER, 'value' => 15],
  16. 'Rate' => ['type' => Properties::PROPERTY_TYPE_FLOAT, 'value' => 1.15],
  17. 'Refactor Date' => ['type' => Properties::PROPERTY_TYPE_DATE, 'value' => '2019-06-10'],
  18. ];
  19. $filename = 'tests/data/Reader/XLSX/propertyTest.xlsx';
  20. $reader = new Xlsx();
  21. $spreadsheet = $reader->load($filename);
  22. $properties = $spreadsheet->getProperties();
  23. // Core Properties
  24. self::assertSame('Mark Baker', $properties->getCreator());
  25. self::assertSame('Unit Testing', $properties->getTitle());
  26. self::assertSame('Property Test', $properties->getSubject());
  27. // Extended Properties
  28. self::assertSame('PHPOffice', $properties->getCompany());
  29. self::assertSame('The Big Boss', $properties->getManager());
  30. // Custom Properties
  31. $customProperties = $properties->getCustomProperties();
  32. self::assertIsArray($customProperties);
  33. $customProperties = array_flip($customProperties);
  34. self::assertArrayHasKey('Publisher', $customProperties);
  35. foreach ($customPropertySet as $propertyName => $testData) {
  36. self::assertTrue($properties->isCustomPropertySet($propertyName));
  37. self::assertSame($testData['type'], $properties->getCustomPropertyType($propertyName));
  38. $result = $properties->getCustomPropertyValue($propertyName);
  39. if ($properties->getCustomPropertyType($propertyName) == Properties::PROPERTY_TYPE_DATE) {
  40. $result = Date::formattedDateTimeFromTimestamp("$result", 'Y-m-d', new DateTimeZone('UTC'));
  41. }
  42. self::assertSame($testData['value'], $result);
  43. }
  44. }
  45. public function testReloadXlsxWorkbookProperties(): void
  46. {
  47. $customPropertySet = [
  48. 'Publisher' => ['type' => Properties::PROPERTY_TYPE_STRING, 'value' => 'PHPOffice Suite'],
  49. 'Tested' => ['type' => Properties::PROPERTY_TYPE_BOOLEAN, 'value' => true],
  50. 'Counter' => ['type' => Properties::PROPERTY_TYPE_INTEGER, 'value' => 15],
  51. 'Rate' => ['type' => Properties::PROPERTY_TYPE_FLOAT, 'value' => 1.15],
  52. 'Refactor Date' => ['type' => Properties::PROPERTY_TYPE_DATE, 'value' => '2019-06-10'],
  53. ];
  54. $filename = 'tests/data/Reader/XLSX/propertyTest.xlsx';
  55. $reader = new Xlsx();
  56. $spreadsheetOld = $reader->load($filename);
  57. $spreadsheet = $this->writeAndReload($spreadsheetOld, 'Xlsx');
  58. $properties = $spreadsheet->getProperties();
  59. // Core Properties
  60. self::assertSame('Mark Baker', $properties->getCreator());
  61. self::assertSame('Unit Testing', $properties->getTitle());
  62. self::assertSame('Property Test', $properties->getSubject());
  63. // Extended Properties
  64. self::assertSame('PHPOffice', $properties->getCompany());
  65. self::assertSame('The Big Boss', $properties->getManager());
  66. // Custom Properties
  67. $customProperties = $properties->getCustomProperties();
  68. self::assertIsArray($customProperties);
  69. $customProperties = array_flip($customProperties);
  70. self::assertArrayHasKey('Publisher', $customProperties);
  71. foreach ($customPropertySet as $propertyName => $testData) {
  72. self::assertTrue($properties->isCustomPropertySet($propertyName));
  73. self::assertSame($testData['type'], $properties->getCustomPropertyType($propertyName));
  74. $result = $properties->getCustomPropertyValue($propertyName);
  75. if ($properties->getCustomPropertyType($propertyName) == Properties::PROPERTY_TYPE_DATE) {
  76. $result = Date::formattedDateTimeFromTimestamp("$result", 'Y-m-d', new DateTimeZone('UTC'));
  77. }
  78. self::assertSame($testData['value'], $result);
  79. }
  80. }
  81. }