61 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			PHP
		
	
	
			
		
		
	
	
			61 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			PHP
		
	
	
<?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
 | 
						|
        );
 | 
						|
    }
 | 
						|
}
 |