aboutsummaryrefslogtreecommitdiffstats
path: root/vendor/maennchen/zipstream-php/test/CentralDirectoryFileHeaderTest.php
blob: 5457b4f4429a4575946b7e65ff23858451a39b1d (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
<?php

declare(strict_types=1);

namespace ZipStream\Test;

use DateTimeImmutable;
use PHPUnit\Framework\TestCase;
use ZipStream\CentralDirectoryFileHeader;
use ZipStream\CompressionMethod;

class CentralDirectoryFileHeaderTest extends TestCase
{
    public function testSerializesCorrectly(): void
    {
        $dateTime = new DateTimeImmutable('2022-01-01 01:01:01Z');

        $header = CentralDirectoryFileHeader::generate(
            versionMadeBy: 0x603,
            versionNeededToExtract: 0x002D,
            generalPurposeBitFlag: 0x2222,
            compressionMethod: CompressionMethod::DEFLATE,
            lastModificationDateTime: $dateTime,
            crc32: 0x11111111,
            compressedSize: 0x77777777,
            uncompressedSize: 0x99999999,
            fileName: 'test.png',
            extraField: 'some content',
            fileComment: 'some comment',
            diskNumberStart: 0,
            internalFileAttributes: 0,
            externalFileAttributes: 32,
            relativeOffsetOfLocalHeader: 0x1234,
        );

        $this->assertSame(
            bin2hex($header),
            '504b0102' . // 4 bytes; central file header signature
            '0306' . // 2 bytes; version made by
            '2d00' . // 2 bytes; version needed to extract
            '2222' . // 2 bytes; general purpose bit flag
            '0800' . // 2 bytes; compression method
            '2008' . // 2 bytes; last mod file time
            '2154' . // 2 bytes; last mod file date
            '11111111' . // 4 bytes; crc-32
            '77777777' . // 4 bytes; compressed size
            '99999999' . // 4 bytes; uncompressed size
            '0800' . // 2 bytes; file name length (n)
            '0c00' . // 2 bytes; extra field length (m)
            '0c00' . // 2 bytes; file comment length (o)
            '0000' . // 2 bytes; disk number start
            '0000' . // 2 bytes; internal file attributes
            '20000000' . // 4 bytes; external file attributes
            '34120000' . // 4 bytes; relative offset of local header
            '746573742e706e67' . // n bytes; file name
            '736f6d6520636f6e74656e74' . // m bytes; extra field
            '736f6d6520636f6d6d656e74' // o bytes; file comment
        );
    }
}