Skip to content

Commit 08784ed

Browse files
committed
ext/zip: Add some tests for methods taking callbakcs
1 parent 72708f2 commit 08784ed

File tree

5 files changed

+257
-6
lines changed

5 files changed

+257
-6
lines changed

ext/zip/tests/oo_cancel.phpt

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
--TEST--
2-
registerCancelCallback
2+
ZipArchive::registerCancelCallback() with a normal callback
33
--EXTENSIONS--
44
zip
55
--SKIPIF--
@@ -14,8 +14,6 @@ date.timezone=UTC
1414
$dirname = dirname(__FILE__) . '/';
1515
$file = $dirname . '__tmp_oo_cancel.zip';
1616

17-
@unlink($file);
18-
1917
$zip = new ZipArchive;
2018
if (!$zip->open($file, ZIPARCHIVE::CREATE)) {
2119
exit('failed');
@@ -33,6 +31,13 @@ var_dump($zip->getStatusString());
3331
@unlink($file);
3432
?>
3533
Done
34+
--CLEAN--
35+
<?php
36+
$dirname = dirname(__FILE__) . '/';
37+
$file = $dirname . '__tmp_oo_cancel.zip';
38+
39+
@unlink($file);
40+
?>
3641
--EXPECTF--
3742
bool(true)
3843
bool(true)
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
--TEST--
2+
ZipArchive::registerCancelCallback() with a callback returning an incorrect type
3+
--EXTENSIONS--
4+
zip
5+
--SKIPIF--
6+
<?php
7+
/* $Id$ */
8+
if (!method_exists('ZipArchive', 'registerCancelCallback')) die('skip libzip too old');
9+
?>
10+
--INI--
11+
date.timezone=UTC
12+
--FILE--
13+
<?php
14+
$dirname = dirname(__FILE__) . '/';
15+
$file = $dirname . '__tmp_oo_cancel_incorrect_return.zip';
16+
17+
$zip = new ZipArchive;
18+
if (!$zip->open($file, ZIPARCHIVE::CREATE)) {
19+
exit('failed');
20+
}
21+
22+
/* Register a bogus callback */
23+
var_dump($zip->registerCancelCallback(function () {
24+
return [];
25+
}));
26+
var_dump($zip->addFromString(PHP_BINARY, 'entry #1'));
27+
28+
var_dump($zip->close());
29+
var_dump($zip->status == ZipArchive::ER_CANCELLED);
30+
var_dump($zip->getStatusString());
31+
@unlink($file);
32+
?>
33+
Done
34+
--CLEAN--
35+
<?php
36+
$dirname = dirname(__FILE__) . '/';
37+
$file = $dirname . '__tmp_oo_cancel_incorrect_return.zip';
38+
39+
@unlink($file);
40+
?>
41+
--EXPECT--
42+
bool(true)
43+
bool(true)
44+
bool(true)
45+
bool(false)
46+
string(8) "No error"
47+
Done
Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,97 @@
1+
--TEST--
2+
ZipArchive::registerCancelCallback() with a trampoline
3+
--EXTENSIONS--
4+
zip
5+
--SKIPIF--
6+
<?php
7+
/* $Id$ */
8+
if (!method_exists('ZipArchive', 'registerCancelCallback')) die('skip libzip too old');
9+
?>
10+
--INI--
11+
date.timezone=UTC
12+
--FILE--
13+
<?php
14+
$dirname = dirname(__FILE__) . '/';
15+
$file = $dirname . '__tmp_oo_cancel_trampoline.zip';
16+
17+
class TrampolineTest {
18+
public function __call(string $name, array $arguments): int {
19+
echo 'Trampoline for ', $name, PHP_EOL;
20+
if ($name === 'trampolineThrow') {
21+
throw new Exception('boo');
22+
}
23+
var_dump($arguments);
24+
return -1;
25+
}
26+
}
27+
28+
$o = new TrampolineTest();
29+
$callback = [$o, 'trampoline'];
30+
$callbackThrow = [$o, 'trampolineThrow'];
31+
32+
$zip = new ZipArchive;
33+
if (!$zip->open($file, ZIPARCHIVE::CREATE)) {
34+
exit('failed');
35+
}
36+
37+
var_dump($zip->registerCancelCallback($callback));
38+
var_dump($zip->addFromString(PHP_BINARY, 'entry #1'));
39+
var_dump($zip->close());
40+
var_dump($zip->status == ZipArchive::ER_CANCELLED);
41+
var_dump($zip->getStatusString());
42+
43+
echo "Set trampoline after closed Archive:\n";
44+
try {
45+
var_dump($zip->registerCancelCallback($callback));
46+
} catch (Throwable $e) {
47+
echo $e::class, ': ', $e->getMessage(), PHP_EOL;
48+
}
49+
50+
@unlink($file);
51+
unset($zip);
52+
53+
$zip = new ZipArchive;
54+
if (!$zip->open($file, ZIPARCHIVE::CREATE)) {
55+
exit('failed');
56+
}
57+
58+
var_dump($zip->registerCancelCallback($callbackThrow));
59+
var_dump($zip->addFromString(PHP_BINARY, 'entry #1'));
60+
try {
61+
var_dump($zip->close());
62+
} catch (Throwable $e) {
63+
echo $e::class, ': ', $e->getMessage(), PHP_EOL;
64+
}
65+
var_dump($zip->status == ZipArchive::ER_CANCELLED);
66+
var_dump($zip->getStatusString());
67+
@unlink($file);
68+
69+
?>
70+
Done
71+
--CLEAN--
72+
<?php
73+
$dirname = dirname(__FILE__) . '/';
74+
$file = $dirname . '__tmp_oo_cancel_trampoline.zip';
75+
76+
@unlink($file);
77+
?>
78+
--EXPECTF--
79+
bool(true)
80+
bool(true)
81+
Trampoline for trampoline
82+
array(0) {
83+
}
84+
85+
Warning: ZipArchive::close(): Operation cancelled in %s on line %d
86+
bool(false)
87+
bool(true)
88+
string(19) "Operation cancelled"
89+
Set trampoline after closed Archive:
90+
ValueError: Invalid or uninitialized Zip object
91+
bool(true)
92+
bool(true)
93+
Trampoline for trampolineThrow
94+
Exception: boo
95+
bool(false)
96+
string(8) "No error"
97+
Done

ext/zip/tests/oo_progress.phpt

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
--TEST--
2-
registerProgressCallback
2+
ZipArchive::registerProgressCallback() with a normal callback
33
--EXTENSIONS--
44
zip
55
--SKIPIF--
@@ -14,8 +14,6 @@ date.timezone=UTC
1414
$dirname = dirname(__FILE__) . '/';
1515
$file = $dirname . '__tmp_oo_progress.zip';
1616

17-
@unlink($file);
18-
1917
$zip = new ZipArchive;
2018
if (!$zip->open($file, ZIPARCHIVE::CREATE)) {
2119
exit('failed');
@@ -32,6 +30,13 @@ var_dump($zip->close());
3230
unlink($file);
3331
?>
3432
Done
33+
--CLEAN--
34+
<?php
35+
$dirname = dirname(__FILE__) . '/';
36+
$file = $dirname . '__tmp_oo_progress.zip';
37+
38+
@unlink($file);
39+
?>
3540
--EXPECT--
3641
bool(true)
3742
bool(true)
Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,97 @@
1+
--TEST--
2+
ZipArchive::registerProgressCallback() with a trampoline
3+
--EXTENSIONS--
4+
zip
5+
--SKIPIF--
6+
<?php
7+
/* $Id$ */
8+
if (!method_exists('ZipArchive', 'registerProgressCallback')) die('skip libzip too old');
9+
?>
10+
--INI--
11+
date.timezone=UTC
12+
--FILE--
13+
<?php
14+
$dirname = dirname(__FILE__) . '/';
15+
$file = $dirname . '__tmp_oo_progress_trampoline.zip';
16+
17+
class TrampolineTest {
18+
public function __call(string $name, array $arguments): void {
19+
echo 'Trampoline for ', $name, PHP_EOL;
20+
if ($name === 'trampolineThrow') {
21+
throw new Exception('boo');
22+
}
23+
var_dump($arguments);
24+
$r = $arguments[0];
25+
if ($r == 0.0) echo "start\n";
26+
if ($r == 1.0) echo "end\n";
27+
}
28+
}
29+
$o = new TrampolineTest();
30+
$callback = [$o, 'trampoline'];
31+
$callbackThrow = [$o, 'trampolineThrow'];
32+
33+
34+
$zip = new ZipArchive;
35+
if (!$zip->open($file, ZIPARCHIVE::CREATE)) {
36+
exit('failed');
37+
}
38+
var_dump($zip->registerProgressCallback(0.5, $callback));
39+
var_dump($zip->addFromString('foo', 'entry #1'));
40+
var_dump($zip->close());
41+
42+
echo "Set trampoline after closed Archive:\n";
43+
try {
44+
var_dump($zip->registerProgressCallback(0.5, $callback));
45+
} catch (Throwable $e) {
46+
echo $e::class, ': ', $e->getMessage(), PHP_EOL;
47+
}
48+
49+
unlink($file);
50+
unset($zip);
51+
52+
$zip = new ZipArchive;
53+
if (!$zip->open($file, ZIPARCHIVE::CREATE)) {
54+
exit('failed');
55+
}
56+
57+
var_dump($zip->registerProgressCallback(0.5, $callbackThrow));
58+
var_dump($zip->addFromString('foo', 'entry #1'));
59+
try {
60+
var_dump($zip->close());
61+
} catch (Throwable $e) {
62+
echo $e::class, ': ', $e->getMessage(), PHP_EOL;
63+
}
64+
unlink($file);
65+
unset($zip);
66+
?>
67+
Done
68+
--CLEAN--
69+
<?php
70+
$dirname = dirname(__FILE__) . '/';
71+
$file = $dirname . '__tmp_oo_progress_trampoline.zip';
72+
73+
@unlink($file);
74+
?>
75+
--EXPECT--
76+
bool(true)
77+
bool(true)
78+
Trampoline for trampoline
79+
array(1) {
80+
[0]=>
81+
float(0)
82+
}
83+
start
84+
Trampoline for trampoline
85+
array(1) {
86+
[0]=>
87+
float(1)
88+
}
89+
end
90+
bool(true)
91+
Set trampoline after closed Archive:
92+
ValueError: Invalid or uninitialized Zip object
93+
bool(true)
94+
bool(true)
95+
Trampoline for trampolineThrow
96+
Exception: boo
97+
Done

0 commit comments

Comments
 (0)