ILIAS  trunk Revision v12.0_alpha-1329-g1094ddb0c33
ILIAS\ResourceStorage\Resource\EnsurePathInZipTest Class Reference

Regression tests for Mantis 0045580 / 0047237: entries written to a ZIP container must not start with a leading slash, otherwise some extraction tools (Windows Explorer in particular) will not list them. More...

+ Inheritance diagram for ILIAS\ResourceStorage\Resource\EnsurePathInZipTest:
+ Collaboration diagram for ILIAS\ResourceStorage\Resource\EnsurePathInZipTest:

Public Member Functions

 testFilePathHasNoLeadingSlash (string $input, string $expected)
 
 testDirectoryPathHasNoLeadingSlash ()
 
 testWritingRootFileProducesRelativeEntry ()
 

Static Public Member Functions

static filePathProvider ()
 

Protected Member Functions

 setUp ()
 
 tearDown ()
 

Private Attributes

string $zip_file
 
ZipArchive $zip
 

Detailed Description

Regression tests for Mantis 0045580 / 0047237: entries written to a ZIP container must not start with a leading slash, otherwise some extraction tools (Windows Explorer in particular) will not list them.

Author
Fabian Schmid fabia.nosp@m.n@sr.nosp@m..solu.nosp@m.tion.nosp@m.s

Definition at line 34 of file EnsurePathInZipTest.php.

Member Function Documentation

◆ filePathProvider()

static ILIAS\ResourceStorage\Resource\EnsurePathInZipTest::filePathProvider ( )
static

Definition at line 68 of file EnsurePathInZipTest.php.

68 : \Iterator
69 {
70 yield 'root file, no slash' => ['index.html', 'index.html'];
71 yield 'root file, leading slash' => ['/index.html', 'index.html'];
72 yield 'subdir file, no slash' => ['assets/style.css', 'assets/style.css'];
73 yield 'subdir file, leading slash' => ['/assets/style.css', 'assets/style.css'];
74 yield 'nested file, no slash' => ['assets/css/osd.css', 'assets/css/osd.css'];
75 yield 'nested file, leading slash' => ['/assets/css/osd.css', 'assets/css/osd.css'];
76 }

◆ setUp()

ILIAS\ResourceStorage\Resource\EnsurePathInZipTest::setUp ( )
protected

Definition at line 39 of file EnsurePathInZipTest.php.

39 : void
40 {
41 parent::setUp();
42 $this->zip_file = tempnam(sys_get_temp_dir(), 'irss_zip_test_');
43 $this->zip = new ZipArchive();
44 $this->zip->open($this->zip_file, ZipArchive::OVERWRITE);
45 }

◆ tearDown()

ILIAS\ResourceStorage\Resource\EnsurePathInZipTest::tearDown ( )
protected

Definition at line 47 of file EnsurePathInZipTest.php.

47 : void
48 {
49 parent::tearDown();
50 if ($this->zip->filename !== '') {
51 @$this->zip->close();
52 }
53 @unlink($this->zip_file);
54 }

◆ testDirectoryPathHasNoLeadingSlash()

ILIAS\ResourceStorage\Resource\EnsurePathInZipTest::testDirectoryPathHasNoLeadingSlash ( )

Definition at line 78 of file EnsurePathInZipTest.php.

78 : void
79 {
80 $method = new \ReflectionMethod(ResourceBuilder::class, 'ensurePathInZIP');
81 $builder = (new \ReflectionClass(ResourceBuilder::class))->newInstanceWithoutConstructor();
82
83 $result = $method->invoke($builder, $this->zip, '/dir/sub', false);
84
85 $this->assertStringStartsNotWith('/', $result);
86 $this->assertSame('dir/sub/', $result);
87 }

◆ testFilePathHasNoLeadingSlash()

ILIAS\ResourceStorage\Resource\EnsurePathInZipTest::testFilePathHasNoLeadingSlash ( string  $input,
string  $expected 
)

Definition at line 57 of file EnsurePathInZipTest.php.

57 : void
58 {
59 $method = new \ReflectionMethod(ResourceBuilder::class, 'ensurePathInZIP');
60 $builder = (new \ReflectionClass(ResourceBuilder::class))->newInstanceWithoutConstructor();
61
62 $result = $method->invoke($builder, $this->zip, $input, true);
63
64 $this->assertSame($expected, $result);
65 $this->assertStringStartsNotWith('/', $result);
66 }

◆ testWritingRootFileProducesRelativeEntry()

ILIAS\ResourceStorage\Resource\EnsurePathInZipTest::testWritingRootFileProducesRelativeEntry ( )

Definition at line 89 of file EnsurePathInZipTest.php.

89 : void
90 {
91 $method = new \ReflectionMethod(ResourceBuilder::class, 'ensurePathInZIP');
92 $builder = (new \ReflectionClass(ResourceBuilder::class))->newInstanceWithoutConstructor();
93
94 $entry = $method->invoke($builder, $this->zip, '/index.html', true);
95 $this->zip->addFromString($entry, '<html></html>');
96 $this->zip->close();
97
98 $verify = new ZipArchive();
99 $verify->open($this->zip_file);
100 $names = [];
101 for ($i = 0; $i < $verify->numFiles; $i++) {
102 $names[] = $verify->getNameIndex($i);
103 }
104 $verify->close();
105
106 foreach ($names as $name) {
107 $this->assertStringStartsNotWith('/', $name, "ZIP entry must not start with '/': {$name}");
108 }
109 $this->assertContains('index.html', $names);
110 }

Field Documentation

◆ $zip

ZipArchive ILIAS\ResourceStorage\Resource\EnsurePathInZipTest::$zip
private

Definition at line 37 of file EnsurePathInZipTest.php.

◆ $zip_file

string ILIAS\ResourceStorage\Resource\EnsurePathInZipTest::$zip_file
private

Definition at line 36 of file EnsurePathInZipTest.php.


The documentation for this class was generated from the following file: