ExtendedTimestampExtraFieldTest.php 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158
  1. <?php
  2. namespace PhpZip\Tests\Extra\Fields;
  3. use PHPUnit\Framework\TestCase;
  4. use PhpZip\Model\Extra\Fields\ExtendedTimestampExtraField;
  5. /**
  6. * Class ExtendedTimestampExtraFieldTest.
  7. *
  8. * @internal
  9. *
  10. * @small
  11. */
  12. final class ExtendedTimestampExtraFieldTest extends TestCase
  13. {
  14. /**
  15. * @dataProvider provideExtraField
  16. *
  17. * @param int $flags
  18. * @param int|null $modifyTime
  19. * @param int|null $accessTime
  20. * @param int|null $createTime
  21. * @param string $localData
  22. * @param string $cdData
  23. *
  24. * @noinspection PhpTooManyParametersInspection
  25. */
  26. public function testExtraField(
  27. $flags,
  28. $modifyTime,
  29. $accessTime,
  30. $createTime,
  31. $localData,
  32. $cdData
  33. ) {
  34. $localExtraField = new ExtendedTimestampExtraField($flags, $modifyTime, $accessTime, $createTime);
  35. self::assertSame($localExtraField->getHeaderId(), ExtendedTimestampExtraField::HEADER_ID);
  36. self::assertSame($localExtraField->getFlags(), $flags);
  37. self::assertSame($localExtraField->getModifyTime(), $modifyTime);
  38. self::assertSame($localExtraField->getAccessTime(), $accessTime);
  39. self::assertSame($localExtraField->getCreateTime(), $createTime);
  40. self::assertSame($localExtraField->packLocalFileData(), $localData);
  41. self::assertEquals(ExtendedTimestampExtraField::unpackLocalFileData($localData), $localExtraField);
  42. $extTimeField = ExtendedTimestampExtraField::create($modifyTime, $accessTime, $createTime);
  43. self::assertEquals($extTimeField, $localExtraField);
  44. $accessTime = null;
  45. $createTime = null;
  46. $cdExtraField = new ExtendedTimestampExtraField($flags, $modifyTime, $accessTime, $createTime);
  47. self::assertSame($cdExtraField->getHeaderId(), ExtendedTimestampExtraField::HEADER_ID);
  48. self::assertSame($cdExtraField->getFlags(), $flags);
  49. self::assertSame($cdExtraField->getModifyTime(), $modifyTime);
  50. self::assertSame($cdExtraField->getAccessTime(), $accessTime);
  51. self::assertSame($cdExtraField->getCreateTime(), $createTime);
  52. self::assertSame($cdExtraField->packCentralDirData(), $cdData);
  53. self::assertEquals(ExtendedTimestampExtraField::unpackCentralDirData($cdData), $cdExtraField);
  54. self::assertSame($localExtraField->packCentralDirData(), $cdData);
  55. }
  56. /**
  57. * @return array
  58. */
  59. public function provideExtraField()
  60. {
  61. return [
  62. [
  63. ExtendedTimestampExtraField::MODIFY_TIME_BIT
  64. | ExtendedTimestampExtraField::ACCESS_TIME_BIT
  65. | ExtendedTimestampExtraField::CREATE_TIME_BIT,
  66. 911512006,
  67. 911430000,
  68. 893709400,
  69. "\x07\xC6\x91T6pQS6X\xECD5",
  70. "\x07\xC6\x91T6",
  71. ],
  72. [
  73. ExtendedTimestampExtraField::MODIFY_TIME_BIT
  74. | ExtendedTimestampExtraField::ACCESS_TIME_BIT,
  75. 1492955702,
  76. 1492955638,
  77. null,
  78. "\x036\xB2\xFCX\xF6\xB1\xFCX",
  79. "\x036\xB2\xFCX",
  80. ],
  81. [
  82. ExtendedTimestampExtraField::MODIFY_TIME_BIT,
  83. 1470494391,
  84. null,
  85. null,
  86. "\x01\xB7\xF6\xA5W",
  87. "\x01\xB7\xF6\xA5W",
  88. ],
  89. ];
  90. }
  91. /**
  92. * @throws \Exception
  93. */
  94. public function testSetter()
  95. {
  96. $mtime = time();
  97. $atime = null;
  98. $ctime = null;
  99. $field = ExtendedTimestampExtraField::create($mtime, $atime, $ctime);
  100. self::assertSame($field->getFlags(), ExtendedTimestampExtraField::MODIFY_TIME_BIT);
  101. self::assertSame($field->getModifyTime(), $mtime);
  102. self::assertEquals($field->getModifyDateTime(), new \DateTimeImmutable('@' . $mtime));
  103. self::assertSame($field->getAccessTime(), $atime);
  104. self::assertSame($field->getCreateTime(), $ctime);
  105. $atime = strtotime('-1 min');
  106. $field->setAccessTime($atime);
  107. self::assertSame(
  108. $field->getFlags(),
  109. ExtendedTimestampExtraField::MODIFY_TIME_BIT
  110. | ExtendedTimestampExtraField::ACCESS_TIME_BIT
  111. );
  112. self::assertSame($field->getModifyTime(), $mtime);
  113. self::assertSame($field->getAccessTime(), $atime);
  114. self::assertEquals($field->getAccessDateTime(), new \DateTimeImmutable('@' . $atime));
  115. self::assertSame($field->getCreateTime(), $ctime);
  116. $ctime = strtotime('-1 hour');
  117. $field->setCreateTime($ctime);
  118. self::assertSame(
  119. $field->getFlags(),
  120. ExtendedTimestampExtraField::MODIFY_TIME_BIT
  121. | ExtendedTimestampExtraField::ACCESS_TIME_BIT
  122. | ExtendedTimestampExtraField::CREATE_TIME_BIT
  123. );
  124. self::assertSame($field->getModifyTime(), $mtime);
  125. self::assertSame($field->getAccessTime(), $atime);
  126. self::assertSame($field->getCreateTime(), $ctime);
  127. self::assertEquals($field->getCreateDateTime(), new \DateTimeImmutable('@' . $ctime));
  128. $field->setCreateTime(null);
  129. self::assertNull($field->getCreateTime());
  130. self::assertNull($field->getCreateDateTime());
  131. self::assertSame(
  132. $field->getFlags(),
  133. ExtendedTimestampExtraField::MODIFY_TIME_BIT
  134. | ExtendedTimestampExtraField::ACCESS_TIME_BIT
  135. );
  136. $field->setAccessTime(null);
  137. self::assertNull($field->getAccessTime());
  138. self::assertNull($field->getAccessDateTime());
  139. self::assertSame($field->getFlags(), ExtendedTimestampExtraField::MODIFY_TIME_BIT);
  140. $field->setModifyTime(null);
  141. self::assertNull($field->getModifyTime());
  142. self::assertNull($field->getModifyDateTime());
  143. self::assertSame($field->getFlags(), 0);
  144. }
  145. }