Zip64ExtraFieldTest.php 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. <?php
  2. namespace PhpZip\Tests\Extra\Fields;
  3. use PHPUnit\Framework\TestCase;
  4. use PhpZip\Constants\ZipConstants;
  5. use PhpZip\Exception\ZipException;
  6. use PhpZip\Model\Extra\Fields\Zip64ExtraField;
  7. use PhpZip\Model\ZipEntry;
  8. /**
  9. * @internal
  10. *
  11. * @small
  12. */
  13. final class Zip64ExtraFieldTest extends TestCase
  14. {
  15. protected function setUp(): void
  16. {
  17. parent::setUp();
  18. if (\PHP_INT_SIZE === 4) {
  19. self::markTestSkipped('only 64 bit test');
  20. }
  21. }
  22. /**
  23. * @dataProvider provideExtraField
  24. *
  25. * @param int|null $uncompressedSize
  26. * @param int|null $compressedSize
  27. * @param int|null $localHeaderOffset
  28. * @param int|null $diskStart
  29. * @param string|null $localBinaryData
  30. * @param string|null $cdBinaryData
  31. *
  32. * @throws ZipException
  33. *
  34. * @noinspection PhpTooManyParametersInspection
  35. */
  36. public function testExtraField(
  37. $uncompressedSize,
  38. $compressedSize,
  39. $localHeaderOffset,
  40. $diskStart,
  41. $localBinaryData,
  42. $cdBinaryData
  43. ) {
  44. $extraField = new Zip64ExtraField(
  45. $uncompressedSize,
  46. $compressedSize,
  47. $localHeaderOffset,
  48. $diskStart
  49. );
  50. self::assertSame($extraField->getHeaderId(), Zip64ExtraField::HEADER_ID);
  51. self::assertSame($extraField->getUncompressedSize(), $uncompressedSize);
  52. self::assertSame($extraField->getCompressedSize(), $compressedSize);
  53. self::assertSame($extraField->getLocalHeaderOffset(), $localHeaderOffset);
  54. self::assertSame($extraField->getDiskStart(), $diskStart);
  55. $zipEntry = new ZipEntry('entry');
  56. $zipEntry->setUncompressedSize($uncompressedSize !== null ? ZipConstants::ZIP64_MAGIC : 0xfffff);
  57. $zipEntry->setCompressedSize($compressedSize !== null ? ZipConstants::ZIP64_MAGIC : 0xffff);
  58. $zipEntry->setLocalHeaderOffset($localHeaderOffset !== null ? ZipConstants::ZIP64_MAGIC : 0xfff);
  59. if ($localBinaryData !== null) {
  60. self::assertSame($localBinaryData, $extraField->packLocalFileData());
  61. self::assertEquals(Zip64ExtraField::unpackLocalFileData($localBinaryData, $zipEntry), $extraField);
  62. }
  63. if ($cdBinaryData !== null) {
  64. self::assertSame($cdBinaryData, $extraField->packCentralDirData());
  65. self::assertEquals(Zip64ExtraField::unpackCentralDirData($cdBinaryData, $zipEntry), $extraField);
  66. }
  67. }
  68. /**
  69. * @return array
  70. */
  71. public function provideExtraField()
  72. {
  73. return [
  74. [
  75. 0,
  76. 2,
  77. null,
  78. null,
  79. "\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00",
  80. null,
  81. ],
  82. [
  83. 5368709120,
  84. 5369580144,
  85. null,
  86. null,
  87. null,
  88. "\x00\x00\x00@\x01\x00\x00\x00pJ\x0D@\x01\x00\x00\x00",
  89. ],
  90. [
  91. null,
  92. null,
  93. 4945378839,
  94. null,
  95. null,
  96. "\x17~\xC4&\x01\x00\x00\x00",
  97. ],
  98. ];
  99. }
  100. public function testSetter()
  101. {
  102. $extraField = new Zip64ExtraField();
  103. self::assertNull($extraField->getUncompressedSize());
  104. self::assertNull($extraField->getCompressedSize());
  105. self::assertNull($extraField->getLocalHeaderOffset());
  106. self::assertNull($extraField->getDiskStart());
  107. $uncompressedSize = 12222;
  108. $extraField->setUncompressedSize($uncompressedSize);
  109. self::assertSame($extraField->getUncompressedSize(), $uncompressedSize);
  110. $compressedSize = 12222;
  111. $extraField->setCompressedSize($uncompressedSize);
  112. self::assertSame($extraField->getCompressedSize(), $compressedSize);
  113. $localHeaderOffset = 12222;
  114. $extraField->setLocalHeaderOffset($localHeaderOffset);
  115. self::assertSame($extraField->getLocalHeaderOffset(), $localHeaderOffset);
  116. $diskStart = 2;
  117. $extraField->setDiskStart($diskStart);
  118. self::assertSame($extraField->getDiskStart(), $diskStart);
  119. }
  120. }