Zip64ExtraFieldTest.php 4.1 KB

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