summaryrefslogtreecommitdiff
path: root/Zend/tests/enum/json_encode.phpt
diff options
context:
space:
mode:
Diffstat (limited to 'Zend/tests/enum/json_encode.phpt')
-rw-r--r--Zend/tests/enum/json_encode.phpt59
1 files changed, 59 insertions, 0 deletions
diff --git a/Zend/tests/enum/json_encode.phpt b/Zend/tests/enum/json_encode.phpt
new file mode 100644
index 0000000000..016ca6107f
--- /dev/null
+++ b/Zend/tests/enum/json_encode.phpt
@@ -0,0 +1,59 @@
+--TEST--
+Enum in json_encode
+--FILE--
+<?php
+
+enum Foo {
+ case Bar;
+}
+
+enum IntFoo: int {
+ case Bar = 0;
+}
+
+enum StringFoo: string {
+ case Bar = 'Bar';
+}
+
+enum CustomFoo implements JsonSerializable {
+ case Bar;
+
+ public function jsonSerialize() {
+ return 'Custom ' . $this->name;
+ }
+}
+
+function test($value) {
+ var_dump(json_encode($value));
+ echo json_last_error_msg() . "\n";
+
+ try {
+ var_dump(json_encode($value, JSON_THROW_ON_ERROR));
+ echo json_last_error_msg() . "\n";
+ } catch (Exception $e) {
+ echo get_class($e) . ': ' . $e->getMessage() . "\n";
+ }
+}
+
+test(Foo::Bar);
+test(IntFoo::Bar);
+test(StringFoo::Bar);
+test(CustomFoo::Bar);
+
+?>
+--EXPECT--
+bool(false)
+Non-backed enums have no default serialization
+JsonException: Non-backed enums have no default serialization
+string(1) "0"
+No error
+string(1) "0"
+No error
+string(5) ""Bar""
+No error
+string(5) ""Bar""
+No error
+string(12) ""Custom Bar""
+No error
+string(12) ""Custom Bar""
+No error