Skip to content

Commit a011466

Browse files
committed
1 parent 89bbaf5 commit a011466

40 files changed

+809
-18
lines changed

Zend/tests/enum/001.phpt

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
--TEST--
2+
Enum comparison
3+
--FILE--
4+
<?php
5+
6+
enum Foo {
7+
case Bar;
8+
case Baz;
9+
}
10+
11+
$bar = Foo::Bar;
12+
$baz = Foo::Baz;
13+
14+
var_dump($bar === $bar);
15+
var_dump($bar == $bar);
16+
17+
var_dump($bar === $baz);
18+
var_dump($bar == $baz);
19+
20+
var_dump($baz === $bar);
21+
var_dump($baz == $bar);
22+
23+
?>
24+
--EXPECT--
25+
bool(true)
26+
bool(true)
27+
bool(false)
28+
bool(false)
29+
bool(false)
30+
bool(false)

Zend/tests/enum/002.phpt

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
--TEST--
2+
Enum methods
3+
--FILE--
4+
<?php
5+
6+
enum Foo {
7+
case Bar;
8+
case Baz;
9+
10+
public function dump() {
11+
var_dump($this);
12+
}
13+
}
14+
15+
Foo::Bar->dump();
16+
Foo::Baz->dump();
17+
18+
?>
19+
--EXPECT--
20+
enum(Foo::Bar)
21+
enum(Foo::Baz)

Zend/tests/enum/003.phpt

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
--TEST--
2+
Enum type hints
3+
--FILE--
4+
<?php
5+
6+
enum Foo {
7+
case Bar;
8+
}
9+
10+
enum Baz {
11+
case Qux;
12+
}
13+
14+
function takesFoo(Foo $foo) {}
15+
function takesBaz(Baz $baz) {}
16+
17+
takesFoo(Foo::Bar);
18+
takesBaz(Baz::Qux);
19+
20+
try {
21+
takesBaz(Foo::Bar);
22+
} catch (Error $e) {
23+
echo $e->getMessage() . "\n";
24+
}
25+
26+
try {
27+
takesFoo(Baz::Qux);
28+
} catch (Error $e) {
29+
echo $e->getMessage() . "\n";
30+
}
31+
32+
?>
33+
--EXPECTF--
34+
takesBaz(): Argument #1 ($baz) must be of type Baz, Foo given, called in %s on line %d
35+
takesFoo(): Argument #1 ($foo) must be of type Foo, Baz given, called in %s on line %d

Zend/tests/enum/004.phpt

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
--TEST--
2+
Enum instanceof
3+
--FILE--
4+
<?php
5+
6+
enum Foo {
7+
case Bar;
8+
}
9+
10+
enum Baz {
11+
case Qux;
12+
}
13+
14+
var_dump(Foo::Bar instanceof Foo);
15+
var_dump(Baz::Qux instanceof Baz);
16+
17+
var_dump(Foo::Bar instanceof Baz);
18+
var_dump(Baz::Qux instanceof Foo);
19+
20+
?>
21+
--EXPECT--
22+
bool(true)
23+
bool(true)
24+
bool(false)
25+
bool(false)

Zend/tests/enum/005.phpt

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
--TEST--
2+
Enum implements implemented in enum
3+
--FILE--
4+
<?php
5+
6+
interface Colorful {
7+
public function color(): string;
8+
}
9+
10+
enum Suit implements Colorful {
11+
case Hearts;
12+
case Diamonds;
13+
case Clubs;
14+
case Spades;
15+
16+
public function color(): string {
17+
return match ($this) {
18+
self::Hearts, self::Diamonds => 'Red',
19+
self::Clubs, self::Spades => 'Black',
20+
};
21+
}
22+
}
23+
24+
echo Suit::Hearts->color() . "\n";
25+
echo Suit::Diamonds->color() . "\n";
26+
echo Suit::Clubs->color() . "\n";
27+
echo Suit::Spades->color() . "\n";
28+
29+
?>
30+
--EXPECT--
31+
Red
32+
Red
33+
Black
34+
Black

Zend/tests/enum/007.phpt

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
--TEST--
2+
Enum is final
3+
--FILE--
4+
<?php
5+
6+
enum Foo {}
7+
8+
class Bar extends Foo {}
9+
10+
?>
11+
--EXPECTF--
12+
Fatal error: Class Bar may not inherit from final class (Foo) in %s on line %d

Zend/tests/enum/009.phpt

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
--TEST--
2+
Enum disallows properties
3+
--FILE--
4+
<?php
5+
6+
enum Foo {
7+
public $bar;
8+
}
9+
10+
?>
11+
--EXPECTF--
12+
Fatal error: Enums may not include member variables in %s on line %d

Zend/tests/enum/011.phpt

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
--TEST--
2+
Enum is abstract
3+
--SKIPIF--
4+
<?php
5+
die("skip doesn't work yet");
6+
?>
7+
--FILE--
8+
<?php
9+
10+
enum Foo {}
11+
12+
try {
13+
new Foo();
14+
} catch (\Error $e) {
15+
echo $e->getMessage();
16+
}
17+
18+
?>
19+
--EXPECT--
20+
Cannot instantiate abstract class Foo

Zend/tests/enum/012.phpt

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
--TEST--
2+
Enum case disallows dynamic properties
3+
--FILE--
4+
<?php
5+
6+
enum Foo {
7+
case Bar;
8+
}
9+
10+
$bar = Foo::Bar;
11+
12+
try {
13+
$bar->baz = 'Baz';
14+
} catch (\Error $e) {
15+
echo $e->getMessage();
16+
}
17+
18+
?>
19+
--EXPECT--
20+
Cannot create dynamic property Foo::$baz

Zend/tests/enum/013.phpt

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
--TEST--
2+
Enum disallows constants
3+
--FILE--
4+
<?php
5+
6+
enum Foo {
7+
const BAR = 'Bar';
8+
}
9+
10+
?>
11+
--EXPECTF--
12+
Fatal error: Enums cannot have constants in %s on line %d

Zend/tests/enum/015.phpt

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
--TEST--
2+
Enum reflection getConstants()
3+
--FILE--
4+
<?php
5+
6+
enum Foo {
7+
case Bar;
8+
case Baz;
9+
}
10+
11+
var_dump((new \ReflectionClass(Foo::class))->getConstants());
12+
13+
?>
14+
--EXPECT--
15+
array(2) {
16+
["Bar"]=>
17+
enum(Foo::Bar)
18+
["Baz"]=>
19+
enum(Foo::Baz)
20+
}

Zend/tests/enum/016.phpt

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
--TEST--
2+
Enum disallows constructor
3+
--FILE--
4+
<?php
5+
6+
enum Foo {
7+
public function __construct() {}
8+
}
9+
10+
?>
11+
--EXPECTF--
12+
Fatal error: Enums cannot contain constructors in %s on line %d

Zend/tests/enum/018.phpt

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
--TEST--
2+
Enum disallows static properties
3+
--FILE--
4+
<?php
5+
6+
enum Foo {
7+
public static $bar;
8+
}
9+
10+
?>
11+
--EXPECTF--
12+
Fatal error: Enums may not include member variables in %s on line %d

Zend/tests/enum/019.phpt

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
--TEST--
2+
Enum serialize
3+
--FILE--
4+
<?php
5+
6+
enum Foo {
7+
case Bar;
8+
}
9+
10+
echo serialize(Foo::Bar);
11+
12+
?>
13+
--EXPECT--
14+
E:8:"Foo::Bar";

Zend/tests/enum/020.phpt

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
--TEST--
2+
Enum attributes
3+
--FILE--
4+
<?php
5+
6+
#[Attribute]
7+
class EnumAttribute {
8+
public function __construct(
9+
public string $value,
10+
) {}
11+
}
12+
13+
#[EnumAttribute('Foo')]
14+
enum Foo {}
15+
16+
var_dump((new \ReflectionClass(Foo::class))->getAttributes(EnumAttribute::class)[0]->newInstance());
17+
18+
?>
19+
--EXPECT--
20+
object(EnumAttribute)#1 (1) {
21+
["value"]=>
22+
string(3) "Foo"
23+
}

Zend/tests/enum/021.phpt

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
--TEST--
2+
is_enum
3+
--FILE--
4+
<?php
5+
6+
enum Foo {
7+
case Bar;
8+
}
9+
10+
class Baz {}
11+
12+
var_dump(is_enum(Foo::class));
13+
var_dump(is_enum(Foo::Bar::class));
14+
var_dump(is_enum(Baz::class));
15+
16+
?>
17+
--EXPECT--
18+
bool(true)
19+
bool(true)
20+
bool(false)

Zend/tests/enum/022.phpt

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
--TEST--
2+
Enum in default parameter
3+
--FILE--
4+
<?php
5+
6+
enum Foo {
7+
case Bar;
8+
}
9+
10+
function baz(Foo $foo = Foo::Bar) {
11+
var_dump($foo);
12+
}
13+
14+
baz();
15+
16+
?>
17+
--EXPECT--
18+
enum(Foo::Bar)

Zend/tests/enum/023.phpt

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
--TEST--
2+
Enum in constant
3+
--FILE--
4+
<?php
5+
6+
enum Foo {
7+
case Bar;
8+
}
9+
10+
class Baz {
11+
const BAR = Foo::Bar;
12+
}
13+
14+
var_dump(Foo::Bar);
15+
var_dump(Baz::BAR);
16+
var_dump(Foo::Bar === Baz::BAR);
17+
18+
?>
19+
--EXPECT--
20+
enum(Foo::Bar)
21+
enum(Foo::Bar)
22+
bool(true)

Zend/tests/enum/024.phpt

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
--TEST--
2+
Enum var_export
3+
--FILE--
4+
<?php
5+
6+
enum Foo {
7+
case Bar;
8+
}
9+
10+
var_export(Foo::Bar);
11+
12+
?>
13+
--EXPECT--
14+
Foo::Bar

0 commit comments

Comments
 (0)