Skip to content

Commit d54b42c

Browse files
committed
chore: add tests for PHP 8.3 typed class constants
1 parent 5df403f commit d54b42c

File tree

2 files changed

+81
-1
lines changed

2 files changed

+81
-1
lines changed

tests/class/__snapshots__/jsfmt.spec.mjs.snap

Lines changed: 56 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// Jest Snapshot v1, https://goo.gl/fbAQLP
1+
// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing
22

33
exports[`anonymous.php 1`] = `
44
====================================options=====================================
@@ -918,6 +918,31 @@ readonly class ReadOnlyCls {
918918
919919
class FinalCost { final public const FOO = 'foo'; }
920920
921+
// PHP 8.3 typed class constants
922+
enum E {
923+
const string TEST = "Test1"; // E::TEST is a string
924+
}
925+
926+
trait T {
927+
const string TEST = E::TEST; // T::TEST is a string too
928+
}
929+
930+
interface I {
931+
const string TEST = E::TEST; // I::TEST is a string as well
932+
}
933+
934+
class Foo implements I {
935+
use T;
936+
937+
const string TEST = E::TEST; // Foo::TEST must also be a string
938+
}
939+
940+
class Bar extends Foo {
941+
const string TEST = "Test2"; // Bar::TEST must also be a string, but the value can change
942+
public const int|null I = null;
943+
public const ?int J = null;
944+
}
945+
921946
=====================================output=====================================
922947
<?php
923948
@@ -1368,5 +1393,35 @@ class FinalCost
13681393
final public const FOO = "foo";
13691394
}
13701395
1396+
// PHP 8.3 typed class constants
1397+
enum E
1398+
{
1399+
const string TEST = "Test1"; // E::TEST is a string
1400+
}
1401+
1402+
trait T
1403+
{
1404+
const string TEST = E::TEST; // T::TEST is a string too
1405+
}
1406+
1407+
interface I
1408+
{
1409+
const string TEST = E::TEST; // I::TEST is a string as well
1410+
}
1411+
1412+
class Foo implements I
1413+
{
1414+
use T;
1415+
1416+
const string TEST = E::TEST; // Foo::TEST must also be a string
1417+
}
1418+
1419+
class Bar extends Foo
1420+
{
1421+
const string TEST = "Test2"; // Bar::TEST must also be a string, but the value can change
1422+
public const int|null I = null;
1423+
public const ?int J = null;
1424+
}
1425+
13711426
================================================================================
13721427
`;

tests/class/class.php

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -314,3 +314,28 @@ public function __construct( public int $a, private float $b, protected stri
314314
}
315315

316316
class FinalCost { final public const FOO = 'foo'; }
317+
318+
// PHP 8.3 typed class constants
319+
enum E {
320+
const string TEST = "Test1"; // E::TEST is a string
321+
}
322+
323+
trait T {
324+
const string TEST = E::TEST; // T::TEST is a string too
325+
}
326+
327+
interface I {
328+
const string TEST = E::TEST; // I::TEST is a string as well
329+
}
330+
331+
class Foo implements I {
332+
use T;
333+
334+
const string TEST = E::TEST; // Foo::TEST must also be a string
335+
}
336+
337+
class Bar extends Foo {
338+
const string TEST = "Test2"; // Bar::TEST must also be a string, but the value can change
339+
public const int|null I = null;
340+
public const ?int J = null;
341+
}

0 commit comments

Comments
 (0)