Skip to content

Commit 5ad4de6

Browse files
committed
Improve and consolidate test cases
1 parent 5655409 commit 5ad4de6

File tree

9 files changed

+102
-115
lines changed

9 files changed

+102
-115
lines changed

Zend/tests/arrow_functions/001.phpt

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,34 @@ var_dump($foo(2));
1212
$foo = fn($x, $y) => $x + $y;
1313
var_dump($foo(1, 2));
1414

15+
// Closing over $var
16+
$var = 4;
17+
$foo = fn() => $var;
18+
var_dump($foo());
19+
20+
// Not closing over $var, it's a parameter
21+
$foo = fn($var) => $var;
22+
var_dump($foo(5));
23+
24+
// Close over $var by-value, not by-reference
25+
$var = 5;
26+
$foo = fn() => ++$var;
27+
var_dump($foo());
28+
var_dump($var);
29+
30+
// Nested arrow functions closing over variable
31+
$var = 6;
32+
var_dump((fn() => fn() => $var)()());
33+
var_dump((fn() => function() use($var) { return $var; })()());
34+
1535
?>
1636
--EXPECT--
1737
int(1)
1838
int(2)
1939
int(3)
40+
int(4)
41+
int(5)
42+
int(6)
43+
int(5)
44+
int(6)
45+
int(6)
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
--TEST--
2+
Arrow functions implicit use must be throwing notices only upon actual use
3+
--FILE--
4+
<?php
5+
6+
$b = 1;
7+
8+
var_dump((fn() => $b + $c)());
9+
10+
?>
11+
--EXPECTF--
12+
Notice: Undefined variable: c in %s on line %d
13+
int(1)
Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,21 @@
11
--TEST--
2-
Arrow function closing over variable
2+
Variable-variables inside arrow functions
33
--FILE--
44
<?php
55

6-
$b = 1;
6+
$a = 1;
7+
$var = "a";
8+
$fn = fn() => $$var;
9+
var_dump($fn());
710

8-
var_dump((fn() => $b)());
11+
${5} = 2;
12+
$fn = fn() => ${5};
13+
var_dump($fn());
914

1015
?>
11-
--EXPECT--
12-
int(1)
16+
--EXPECTF--
17+
Notice: Undefined variable: a in %s on line %d
18+
NULL
19+
20+
Notice: Undefined variable: 5 in %s on line %d
21+
NULL
Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
--TEST--
2-
Arrow functions implicit use must be throwing notices only upon actual use
2+
Auto-globals in arrow functions
33
--FILE--
44
<?php
55

6-
$b = 1;
7-
8-
var_dump((fn() => $b + $c)());
6+
// This should work, but *not* generate a binding for $GLOBALS
7+
$a = 123;
8+
$fn = fn() => $GLOBALS['a'];
9+
var_dump($fn());
910

1011
?>
11-
--EXPECTF--
12-
Notice: Undefined variable: c in %s on line %d
13-
int(1)
12+
--EXPECT--
13+
int(123)
Lines changed: 42 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,49 @@
11
--TEST--
2-
Arrow function closing over variable by value
2+
Arrow function $this binding
33
--FILE--
44
<?php
55

6-
$b = 2;
6+
class Test {
7+
public function method() {
8+
// It would be okay if this is NULL, but the rest should work
9+
$fn = fn() => 42;
10+
$r = new ReflectionFunction($fn);
11+
var_dump($r->getClosureThis());
12+
13+
$fn = fn() => $this;
14+
var_dump($fn());
15+
16+
$fn = fn() => Test::method2();
17+
$fn();
18+
19+
$fn = fn() => call_user_func('Test::method2');
20+
$fn();
21+
22+
$thisName = "this";
23+
$fn = fn() => $$thisName;
24+
var_dump($fn());
25+
26+
$fn = fn() => self::class;
27+
var_dump($fn());
28+
}
29+
30+
public function method2() {
31+
var_dump($this);
32+
}
33+
}
34+
35+
(new Test)->method();
736

8-
var_dump((fn() => ++$b)());
9-
var_dump($b);
1037
?>
1138
--EXPECT--
12-
int(3)
13-
int(2)
39+
object(Test)#1 (0) {
40+
}
41+
object(Test)#1 (0) {
42+
}
43+
object(Test)#1 (0) {
44+
}
45+
object(Test)#1 (0) {
46+
}
47+
object(Test)#1 (0) {
48+
}
49+
string(4) "Test"

Zend/tests/arrow_functions/006.phpt

Lines changed: 0 additions & 14 deletions
This file was deleted.

Zend/tests/arrow_functions/007.phpt

Lines changed: 0 additions & 21 deletions
This file was deleted.

Zend/tests/arrow_functions/008.phpt

Lines changed: 0 additions & 13 deletions
This file was deleted.

Zend/tests/arrow_functions/009.phpt

Lines changed: 0 additions & 49 deletions
This file was deleted.

0 commit comments

Comments
 (0)