Skip to content

Commit ad8fee3

Browse files
committed
Add more tests
1 parent 07275d5 commit ad8fee3

File tree

7 files changed

+189
-9
lines changed

7 files changed

+189
-9
lines changed
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
--TEST--
2+
Allow fetching properties in attributes
3+
--EXTENSIONS--
4+
reflection
5+
--FILE--
6+
<?php
7+
8+
enum A: string {
9+
case B = 'C';
10+
}
11+
12+
#[Attribute(Attribute::TARGET_CLASS | Attribute::IS_REPEATABLE)]
13+
class Attr {
14+
public function __construct(public $value) {}
15+
}
16+
17+
#[Attr(A::B->name)]
18+
#[Attr(A::B->value)]
19+
#[Attr(A::B?->name)]
20+
#[Attr(A::B?->value)]
21+
class C {}
22+
23+
foreach ((new ReflectionClass(C::class))->getAttributes() as $reflectionAttribute) {
24+
var_dump($reflectionAttribute->newInstance());
25+
}
26+
27+
?>
28+
--EXPECT--
29+
object(Attr)#1 (1) {
30+
["value"]=>
31+
string(1) "B"
32+
}
33+
object(Attr)#1 (1) {
34+
["value"]=>
35+
string(1) "C"
36+
}
37+
object(Attr)#1 (1) {
38+
["value"]=>
39+
string(1) "B"
40+
}
41+
object(Attr)#1 (1) {
42+
["value"]=>
43+
string(1) "C"
44+
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
--TEST--
2+
Allow fetching properties in class constants
3+
--FILE--
4+
<?php
5+
6+
enum A: string {
7+
case Case = 'A::Case';
8+
}
9+
10+
class C {
11+
const A_name = A::Case->name;
12+
const A_value = A::Case->value;
13+
const A_name_nullsafe = A::Case?->name;
14+
const A_value_nullsafe = A::Case?->value;
15+
}
16+
17+
var_dump(C::A_name);
18+
var_dump(C::A_value);
19+
var_dump(C::A_name_nullsafe);
20+
var_dump(C::A_value_nullsafe);
21+
22+
?>
23+
--EXPECT--
24+
string(4) "Case"
25+
string(7) "A::Case"
26+
string(4) "Case"
27+
string(7) "A::Case"
Lines changed: 22 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,34 @@
11
--TEST--
2-
Property fetch in default arg
2+
Property fetch in default argument
33
--FILE--
44
<?php
55

6-
enum A {
7-
case B;
6+
enum A: string {
7+
case B = 'C';
88
}
99

10-
function test($bName = A::B->name) {
11-
echo $bName, "\n";
10+
function test(
11+
$name = A::B->name,
12+
$value = A::B->value,
13+
$nameNullsafe = A::B?->name,
14+
$valueNullsafe = A::B?->value,
15+
) {
16+
var_dump($name);
17+
var_dump($value);
18+
var_dump($nameNullsafe);
19+
var_dump($valueNullsafe);
1220
}
1321

1422
test();
15-
test('C');
23+
test('D', 'E', 'F', 'G');
1624

1725
?>
1826
--EXPECT--
19-
B
20-
C
27+
string(1) "B"
28+
string(1) "C"
29+
string(1) "B"
30+
string(1) "C"
31+
string(1) "D"
32+
string(1) "E"
33+
string(1) "F"
34+
string(1) "G"
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
--TEST--
2+
Property fetch in enum initializers
3+
--FILE--
4+
<?php
5+
6+
enum A: string {
7+
case B = 'C';
8+
}
9+
10+
enum D: string {
11+
case E = A::B->name;
12+
case F = A::B->value;
13+
}
14+
15+
enum G: string {
16+
case H = A::B?->name;
17+
case I = A::B?->value;
18+
}
19+
20+
var_dump(D::E->value);
21+
var_dump(D::F->value);
22+
var_dump(G::H->value);
23+
var_dump(G::I->value);
24+
25+
?>
26+
--EXPECT--
27+
string(1) "B"
28+
string(1) "C"
29+
string(1) "B"
30+
string(1) "C"

Zend/tests/prop_const_expr/property_initializer.phpt

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,21 @@ enum A: int {
88
}
99

1010
class C {
11-
public int $d = A::B->value;
11+
public string $d = A::B->name;
12+
public int $e = A::B->value;
13+
public string $f = A::B?->name;
14+
public int $g = A::B?->value;
1215
}
1316

1417
$c = new C();
1518
var_dump($c->d);
19+
var_dump($c->e);
20+
var_dump($c->f);
21+
var_dump($c->g);
1622

1723
?>
1824
--EXPECT--
25+
string(1) "B"
26+
int(42)
27+
string(1) "B"
1928
int(42)
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
--TEST--
2+
Allow fetching properties in static initializer
3+
--FILE--
4+
<?php
5+
6+
enum A: string {
7+
case Case = 'A::Case';
8+
}
9+
10+
function foo() {
11+
static $name = A::Case->name;
12+
static $value = A::Case->value;
13+
static $nameNullsafe = A::Case?->name;
14+
static $valueNullsafe = A::Case?->value;
15+
16+
var_dump($name);
17+
var_dump($value);
18+
var_dump($nameNullsafe);
19+
var_dump($valueNullsafe);
20+
}
21+
22+
foo();
23+
24+
?>
25+
--EXPECT--
26+
string(4) "Case"
27+
string(7) "A::Case"
28+
string(4) "Case"
29+
string(7) "A::Case"
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
--TEST--
2+
Property fetch in static property initializer
3+
--FILE--
4+
<?php
5+
6+
enum A: int {
7+
case B = 42;
8+
}
9+
10+
class C {
11+
public static string $d = A::B->name;
12+
public static int $e = A::B->value;
13+
public static string $f = A::B?->name;
14+
public static int $g = A::B?->value;
15+
}
16+
17+
var_dump(C::$d);
18+
var_dump(C::$e);
19+
var_dump(C::$f);
20+
var_dump(C::$g);
21+
22+
?>
23+
--EXPECT--
24+
string(1) "B"
25+
int(42)
26+
string(1) "B"
27+
int(42)

0 commit comments

Comments
 (0)