OldUnixExtraFieldTest.php 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156
  1. <?php
  2. namespace PhpZip\Tests\Extra\Fields;
  3. use PHPUnit\Framework\TestCase;
  4. use PhpZip\Model\Extra\Fields\OldUnixExtraField;
  5. /**
  6. * Class OldUnixExtraFieldTest.
  7. *
  8. * @internal
  9. *
  10. * @small
  11. */
  12. final class OldUnixExtraFieldTest extends TestCase
  13. {
  14. /**
  15. * @dataProvider provideExtraField
  16. *
  17. * @param int|null $accessTime
  18. * @param int|null $modifyTime
  19. * @param int|null $uid
  20. * @param int|null $gid
  21. * @param string $localBinaryData
  22. * @param string $cdBinaryData
  23. *
  24. * @noinspection PhpTooManyParametersInspection
  25. *
  26. * @throws \Exception
  27. */
  28. public function testExtraField(
  29. $accessTime,
  30. $modifyTime,
  31. $uid,
  32. $gid,
  33. $localBinaryData,
  34. $cdBinaryData
  35. ) {
  36. $extraField = new OldUnixExtraField($accessTime, $modifyTime, $uid, $gid);
  37. self::assertSame($extraField->getHeaderId(), OldUnixExtraField::HEADER_ID);
  38. self::assertSame($extraField->getAccessTime(), $accessTime);
  39. self::assertSame($extraField->getModifyTime(), $modifyTime);
  40. self::assertSame($extraField->getUid(), $uid);
  41. self::assertSame($extraField->getGid(), $gid);
  42. if ($extraField->getModifyTime() !== null) {
  43. self::assertEquals(
  44. new \DateTimeImmutable('@' . $extraField->getModifyTime()),
  45. $extraField->getModifyDateTime()
  46. );
  47. }
  48. if ($extraField->getAccessTime() !== null) {
  49. self::assertEquals(
  50. new \DateTimeImmutable('@' . $extraField->getAccessTime()),
  51. $extraField->getAccessDateTime()
  52. );
  53. }
  54. self::assertEquals(OldUnixExtraField::unpackLocalFileData($localBinaryData), $extraField);
  55. self::assertSame($extraField->packLocalFileData(), $localBinaryData);
  56. $uid = null;
  57. $gid = null;
  58. $extraField = new OldUnixExtraField($accessTime, $modifyTime, $uid, $gid);
  59. self::assertSame($extraField->getHeaderId(), OldUnixExtraField::HEADER_ID);
  60. self::assertSame($extraField->getAccessTime(), $accessTime);
  61. self::assertSame($extraField->getModifyTime(), $modifyTime);
  62. self::assertNull($extraField->getUid());
  63. self::assertNull($extraField->getGid());
  64. if ($extraField->getModifyTime() !== null) {
  65. self::assertEquals(
  66. new \DateTimeImmutable('@' . $extraField->getModifyTime()),
  67. $extraField->getModifyDateTime()
  68. );
  69. }
  70. if ($extraField->getAccessTime() !== null) {
  71. self::assertEquals(
  72. new \DateTimeImmutable('@' . $extraField->getAccessTime()),
  73. $extraField->getAccessDateTime()
  74. );
  75. }
  76. self::assertEquals(OldUnixExtraField::unpackCentralDirData($cdBinaryData), $extraField);
  77. self::assertSame($extraField->packCentralDirData(), $cdBinaryData);
  78. }
  79. /**
  80. * @return array
  81. */
  82. public function provideExtraField()
  83. {
  84. return [
  85. [
  86. 1213373265,
  87. 1213365834,
  88. 502,
  89. 502,
  90. "Q\x9BRHJ~RH\xF6\x01\xF6\x01",
  91. "Q\x9BRHJ~RH",
  92. ],
  93. [
  94. 935520420,
  95. 935520401,
  96. 501,
  97. 100,
  98. "\xA4\xE8\xC27\x91\xE8\xC27\xF5\x01d\x00",
  99. "\xA4\xE8\xC27\x91\xE8\xC27",
  100. ],
  101. [
  102. 1402666135,
  103. 1402666135,
  104. 501,
  105. 20,
  106. "\x97\xFC\x9AS\x97\xFC\x9AS\xF5\x01\x14\x00",
  107. "\x97\xFC\x9AS\x97\xFC\x9AS",
  108. ],
  109. [
  110. null,
  111. null,
  112. null,
  113. null,
  114. '',
  115. '',
  116. ],
  117. ];
  118. }
  119. public function testSetter()
  120. {
  121. $extraField = new OldUnixExtraField(null, null, null, null);
  122. self::assertNull($extraField->getAccessTime());
  123. self::assertNull($extraField->getAccessDateTime());
  124. self::assertNull($extraField->getModifyTime());
  125. self::assertNull($extraField->getModifyDateTime());
  126. self::assertNull($extraField->getUid());
  127. self::assertNull($extraField->getGid());
  128. $extraField->setModifyTime(1402666135);
  129. self::assertSame($extraField->getModifyTime(), 1402666135);
  130. $extraField->setAccessTime(1213365834);
  131. self::assertSame($extraField->getAccessTime(), 1213365834);
  132. $extraField->setUid(500);
  133. self::assertSame($extraField->getUid(), 500);
  134. $extraField->setGid(100);
  135. self::assertSame($extraField->getGid(), 100);
  136. }
  137. }