Skip to content

Commit d00d4b7

Browse files
committed
Zend: Add tests for exit/die
1 parent 3c97152 commit d00d4b7

28 files changed

+535
-6
lines changed

Zend/tests/bug77339.phpt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ class Foo
99
if (!isset($arguments[0])) {
1010
var_dump(['getSomeWhat']);
1111
var_dump($arguments);
12-
exit;
12+
exit();
1313
}
1414
}
1515
echo "OK\n";
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
--TEST--
2+
Printing AST of die "constant" via assert
3+
--INI--
4+
zend.assertions=1
5+
--FILE--
6+
<?php
7+
8+
try {
9+
assert(0 && die);
10+
} catch (Throwable $e) {
11+
echo $e::class, ': ', $e->getMessage(), PHP_EOL;
12+
}
13+
14+
?>
15+
--EXPECT--
16+
AssertionError: assert(0 && exit)
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
--TEST--
2+
Printing AST of die function via assert
3+
--INI--
4+
zend.assertions=1
5+
--FILE--
6+
<?php
7+
8+
try {
9+
assert(0 && die());
10+
} catch (Throwable $e) {
11+
echo $e::class, ': ', $e->getMessage(), PHP_EOL;
12+
}
13+
14+
?>
15+
--EXPECT--
16+
AssertionError: assert(0 && exit)
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
--TEST--
2+
Printing AST of exit "constant" via assert
3+
--INI--
4+
zend.assertions=1
5+
--FILE--
6+
<?php
7+
8+
try {
9+
assert(0 && exit);
10+
} catch (Throwable $e) {
11+
echo $e::class, ': ', $e->getMessage(), PHP_EOL;
12+
}
13+
14+
?>
15+
--EXPECT--
16+
AssertionError: assert(0 && exit)
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
--TEST--
2+
Printing AST of exit function via assert
3+
--INI--
4+
zend.assertions=1
5+
--FILE--
6+
<?php
7+
8+
try {
9+
assert(0 && exit());
10+
} catch (Throwable $e) {
11+
echo $e::class, ': ', $e->getMessage(), PHP_EOL;
12+
}
13+
14+
?>
15+
--EXPECT--
16+
AssertionError: assert(0 && exit)
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
--TEST--
2+
Can define die and exit as class methods, constants and property
3+
--FILE--
4+
<?php
5+
6+
class Foo {
7+
public $exit;
8+
public $die;
9+
10+
const die = 5;
11+
const exit = 10;
12+
13+
public function exit() {
14+
return 20;
15+
}
16+
17+
public function die() {
18+
return 15;
19+
}
20+
}
21+
22+
var_dump(Foo::die);
23+
var_dump(Foo::exit);
24+
$o = new Foo();
25+
var_dump($o->exit);
26+
var_dump($o->die);
27+
var_dump($o->exit());
28+
var_dump($o->die());
29+
30+
?>
31+
--EXPECT--
32+
int(5)
33+
int(10)
34+
NULL
35+
NULL
36+
int(20)
37+
int(15)
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
--TEST--
2+
Attempting to define die constant
3+
--FILE--
4+
<?php
5+
6+
const die = 5;
7+
8+
var_dump(die);
9+
10+
?>
11+
--EXPECTF--
12+
Parse error: syntax error, unexpected token "exit", expecting identifier in %s on line %d
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
--TEST--
2+
Attempting to define die constant in a namespace
3+
--FILE--
4+
<?php
5+
6+
namespace Foo;
7+
8+
const die = 5;
9+
10+
var_dump(die);
11+
12+
?>
13+
--EXPECTF--
14+
Parse error: syntax error, unexpected token "exit", expecting identifier in %s on line %d
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
--TEST--
2+
Attempting to define die() function
3+
--FILE--
4+
<?php
5+
6+
function die() { }
7+
8+
?>
9+
--EXPECTF--
10+
Parse error: syntax error, unexpected token "exit", expecting "(" in %s on line %d
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
--TEST--
2+
Attempting to define die() function in a namespace
3+
--FILE--
4+
<?php
5+
6+
namespace Foo;
7+
8+
function die() { }
9+
10+
var_dump(die());
11+
12+
?>
13+
--EXPECTF--
14+
Parse error: syntax error, unexpected token "exit", expecting "(" in %s on line %d
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
--TEST--
2+
Attempting to define exit constant
3+
--FILE--
4+
<?php
5+
6+
const exit = 5;
7+
8+
var_dump(exit);
9+
10+
?>
11+
--EXPECTF--
12+
Parse error: syntax error, unexpected token "exit", expecting identifier in %s on line %d
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
--TEST--
2+
Attempting to define exit constant in a namespace
3+
--FILE--
4+
<?php
5+
6+
namespace Foo;
7+
8+
const exit = 5;
9+
10+
var_dump(exit);
11+
12+
?>
13+
--EXPECTF--
14+
Parse error: syntax error, unexpected token "exit", expecting identifier in %s on line %d
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
--TEST--
2+
Attempting to define exit() function
3+
--FILE--
4+
<?php
5+
6+
function exit() { }
7+
8+
?>
9+
--EXPECTF--
10+
Parse error: syntax error, unexpected token "exit", expecting "(" in %s on line %d
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
--TEST--
2+
Attempting to define exit() function in a namespace
3+
--FILE--
4+
<?php
5+
6+
namespace Foo;
7+
8+
function exit() { }
9+
10+
?>
11+
--EXPECTF--
12+
Parse error: syntax error, unexpected token "exit", expecting "(" in %s on line %d
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
--TEST--
2+
Attempting to define a goto label called die
3+
--FILE--
4+
<?php
5+
6+
echo "Before\n";
7+
8+
echo "In between\n";
9+
die:
10+
echo "After\n";
11+
12+
?>
13+
--EXPECTF--
14+
Parse error: syntax error, unexpected token ":" in %s on line %d
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
--TEST--
2+
Attempting to define a goto label called die and jump to it
3+
--FILE--
4+
<?php
5+
6+
echo "Before\n";
7+
goto die;
8+
echo "In between\n";
9+
die:
10+
echo "After\n";
11+
12+
?>
13+
--EXPECTF--
14+
Parse error: syntax error, unexpected token "exit", expecting identifier in %s on line %d
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
--TEST--
2+
Attempting to define a goto label called exit
3+
--FILE--
4+
<?php
5+
6+
echo "Before\n";
7+
8+
echo "In between\n";
9+
exit:
10+
echo "After\n";
11+
12+
?>
13+
--EXPECTF--
14+
Parse error: syntax error, unexpected token ":" in %s on line %d
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
--TEST--
2+
Attempting to define a goto label called exit and jump to it
3+
--FILE--
4+
<?php
5+
6+
echo "Before\n";
7+
goto exit;
8+
echo "In between\n";
9+
exit:
10+
echo "After\n";
11+
12+
?>
13+
--EXPECTF--
14+
Parse error: syntax error, unexpected token "exit", expecting identifier in %s on line %d

Zend/tests/exit/disabling_die.phpt

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
--TEST--
2+
Using disable_functions INI to remove die
3+
--INI--
4+
disable_functions=die
5+
--FILE--
6+
<?php
7+
8+
die();
9+
10+
?>
11+
--EXPECT--

Zend/tests/exit/disabling_exit.phpt

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
--TEST--
2+
Using disable_functions INI to remove exit
3+
--INI--
4+
disable_functions=exit
5+
--FILE--
6+
<?php
7+
8+
exit();
9+
10+
?>
11+
--EXPECT--

Zend/tests/exit/exit_as_function.phpt

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
--TEST--
2+
exit() as function
3+
--FILE--
4+
<?php
5+
6+
function foo(callable $fn) {
7+
var_dump($fn);
8+
}
9+
10+
$values = [
11+
'exit',
12+
'die',
13+
exit(...),
14+
die(...),
15+
];
16+
17+
foreach ($values as $value) {
18+
foo($value);
19+
}
20+
21+
?>
22+
--EXPECTF--
23+
Parse error: syntax error, unexpected token "...", expecting ")" in %s on line %d

Zend/tests/exit/exit_statements.phpt

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
--TEST--
2+
Using exit/die as a statement/constant
3+
--FILE--
4+
<?php
5+
6+
const FILE_PATH = __DIR__ . '/exit_statements.inc';
7+
const FILE_CONTENT = <<<'TEMPLATE'
8+
<?php
9+
echo "Before FUNCTION";
10+
try {
11+
FUNCTION;
12+
} catch (\Throwable $e) {
13+
echo $e::class, ': ', $e->getMessage(), PHP_EOL;
14+
}
15+
16+
TEMPLATE;
17+
18+
19+
$php = getenv('TEST_PHP_EXECUTABLE_ESCAPED');
20+
$command = $php . ' ' . escapeshellarg(FILE_PATH);
21+
22+
foreach (['exit', 'die'] as $value) {
23+
echo 'Using ', $value, ' as value:', PHP_EOL;
24+
$output = [];
25+
$content = str_replace('FUNCTION', $value, FILE_CONTENT);
26+
file_put_contents(FILE_PATH, $content);
27+
exec($command, $output, $exit_status);
28+
echo 'Exit status is: ', $exit_status, PHP_EOL,
29+
'Output is:', PHP_EOL, join($output), PHP_EOL;
30+
}
31+
32+
?>
33+
--CLEAN--
34+
<?php
35+
const FILE_PATH = __DIR__ . '/exit_statements.inc';
36+
@unlink(FILE_PATH);
37+
?>
38+
--EXPECT--
39+
Using exit as value:
40+
Exit status is: 0
41+
Output is:
42+
Before exit
43+
Using die as value:
44+
Exit status is: 0
45+
Output is:
46+
Before die

0 commit comments

Comments
 (0)