summaryrefslogtreecommitdiff
path: root/ext/opcache/tests
diff options
context:
space:
mode:
Diffstat (limited to 'ext/opcache/tests')
-rw-r--r--ext/opcache/tests/preload_004.phpt5
-rw-r--r--ext/opcache/tests/preload_009.phpt4
-rw-r--r--ext/opcache/tests/preload_loadable_classes_1.inc18
-rw-r--r--ext/opcache/tests/preload_loadable_classes_1.phpt19
-rw-r--r--ext/opcache/tests/preload_loadable_classes_2.inc6
-rw-r--r--ext/opcache/tests/preload_loadable_classes_2.phpt17
-rw-r--r--ext/opcache/tests/preload_loadable_classes_3.inc5
-rw-r--r--ext/opcache/tests/preload_loadable_classes_3.phpt13
-rw-r--r--ext/opcache/tests/preload_loadable_classes_4.inc3
-rw-r--r--ext/opcache/tests/preload_loadable_classes_4.phpt16
-rw-r--r--ext/opcache/tests/preload_unresolved_prop_type.inc2
-rw-r--r--ext/opcache/tests/preload_unresolved_prop_type.phpt14
-rw-r--r--ext/opcache/tests/preload_unresolved_prop_type_2.inc5
13 files changed, 123 insertions, 4 deletions
diff --git a/ext/opcache/tests/preload_004.phpt b/ext/opcache/tests/preload_004.phpt
index 0441c78883..df92abdc28 100644
--- a/ext/opcache/tests/preload_004.phpt
+++ b/ext/opcache/tests/preload_004.phpt
@@ -12,5 +12,6 @@ opcache.preload={PWD}/preload_undef_const.inc
var_dump(class_exists('Foo'));
?>
--EXPECTF--
-Warning: Can't preload class Foo with unresolved initializer for constant A in %spreload_undef_const.inc on line 2
-bool(false)
+Fatal error: Undefined class constant 'self::DOES_NOT_EXIST' in Unknown on line 0
+
+Fatal error: Error generated while resolving initializers of class Foo during preloading in Unknown on line 0
diff --git a/ext/opcache/tests/preload_009.phpt b/ext/opcache/tests/preload_009.phpt
index 84f444768c..1adbf5b006 100644
--- a/ext/opcache/tests/preload_009.phpt
+++ b/ext/opcache/tests/preload_009.phpt
@@ -13,6 +13,6 @@ var_dump(trait_exists('T'));
var_dump(class_exists('Foo'));
?>
--EXPECTF--
-Warning: Can't preload class Foo with unresolved initializer for constant C in %spreload_undef_const_2.inc on line 8
+Warning: Use of undefined constant UNDEF - assumed 'UNDEF' (this will throw an Error in a future version of PHP) in Unknown on line 0
+bool(true)
bool(true)
-bool(false)
diff --git a/ext/opcache/tests/preload_loadable_classes_1.inc b/ext/opcache/tests/preload_loadable_classes_1.inc
new file mode 100644
index 0000000000..b2bdabae1b
--- /dev/null
+++ b/ext/opcache/tests/preload_loadable_classes_1.inc
@@ -0,0 +1,18 @@
+<?php
+
+spl_autoload_register(function($class) {
+ if ($class == 'Bar') {
+ class Bar {
+ const BAZ = 42;
+
+ public self $x;
+ public Foo $y;
+ }
+ } else if ($class == 'Foo') {
+ class Foo {}
+ }
+});
+
+class Test {
+ const FOO = Bar::BAZ;
+}
diff --git a/ext/opcache/tests/preload_loadable_classes_1.phpt b/ext/opcache/tests/preload_loadable_classes_1.phpt
new file mode 100644
index 0000000000..8673814403
--- /dev/null
+++ b/ext/opcache/tests/preload_loadable_classes_1.phpt
@@ -0,0 +1,19 @@
+--TEST--
+Preloading: Loadable class checking (1)
+--INI--
+opcache.enable=1
+opcache.enable_cli=1
+opcache.optimization_level=-1
+opcache.preload={PWD}/preload_loadable_classes_1.inc
+--SKIPIF--
+<?php require_once('skipif.inc'); ?>
+--FILE--
+<?php
+var_dump(class_exists('Test'));
+var_dump(class_exists('Bar'));
+var_dump(class_exists('Foo'));
+?>
+--EXPECT--
+bool(true)
+bool(true)
+bool(true)
diff --git a/ext/opcache/tests/preload_loadable_classes_2.inc b/ext/opcache/tests/preload_loadable_classes_2.inc
new file mode 100644
index 0000000000..d21384dcd4
--- /dev/null
+++ b/ext/opcache/tests/preload_loadable_classes_2.inc
@@ -0,0 +1,6 @@
+<?php
+
+class Test {
+ const X = UNDEF;
+ const Y = Foo::UNDEF;
+}
diff --git a/ext/opcache/tests/preload_loadable_classes_2.phpt b/ext/opcache/tests/preload_loadable_classes_2.phpt
new file mode 100644
index 0000000000..4a5d2b8a66
--- /dev/null
+++ b/ext/opcache/tests/preload_loadable_classes_2.phpt
@@ -0,0 +1,17 @@
+--TEST--
+Preloading: Loadable class checking (2)
+--INI--
+opcache.enable=1
+opcache.enable_cli=1
+opcache.optimization_level=-1
+opcache.preload={PWD}/preload_loadable_classes_2.inc
+--SKIPIF--
+<?php require_once('skipif.inc'); ?>
+--FILE--
+Unreachable
+--EXPECTF--
+Warning: Use of undefined constant UNDEF - assumed 'UNDEF' (this will throw an Error in a future version of PHP) in Unknown on line 0
+
+Fatal error: Class 'Foo' not found in Unknown on line 0
+
+Fatal error: Error generated while resolving initializers of class Test during preloading in Unknown on line 0
diff --git a/ext/opcache/tests/preload_loadable_classes_3.inc b/ext/opcache/tests/preload_loadable_classes_3.inc
new file mode 100644
index 0000000000..d5c550f8c4
--- /dev/null
+++ b/ext/opcache/tests/preload_loadable_classes_3.inc
@@ -0,0 +1,5 @@
+<?php
+
+class Test {
+ protected Foo $prop;
+}
diff --git a/ext/opcache/tests/preload_loadable_classes_3.phpt b/ext/opcache/tests/preload_loadable_classes_3.phpt
new file mode 100644
index 0000000000..a48692960a
--- /dev/null
+++ b/ext/opcache/tests/preload_loadable_classes_3.phpt
@@ -0,0 +1,13 @@
+--TEST--
+Preloading: Loadable class checking (3)
+--INI--
+opcache.enable=1
+opcache.enable_cli=1
+opcache.optimization_level=-1
+opcache.preload={PWD}/preload_loadable_classes_3.inc
+--SKIPIF--
+<?php require_once('skipif.inc'); ?>
+--FILE--
+Unreachable
+--EXPECTF--
+Fatal error: Failed to load class Foo used by typed property Test::$prop during preloading in Unknown on line 0
diff --git a/ext/opcache/tests/preload_loadable_classes_4.inc b/ext/opcache/tests/preload_loadable_classes_4.inc
new file mode 100644
index 0000000000..162de6eab2
--- /dev/null
+++ b/ext/opcache/tests/preload_loadable_classes_4.inc
@@ -0,0 +1,3 @@
+<?php
+
+class Test extends Exception {}
diff --git a/ext/opcache/tests/preload_loadable_classes_4.phpt b/ext/opcache/tests/preload_loadable_classes_4.phpt
new file mode 100644
index 0000000000..07f0d094ce
--- /dev/null
+++ b/ext/opcache/tests/preload_loadable_classes_4.phpt
@@ -0,0 +1,16 @@
+--TEST--
+Preloading: Loadable class checking (4)
+--INI--
+opcache.enable=1
+opcache.enable_cli=1
+opcache.optimization_level=-1
+opcache.preload={PWD}/preload_loadable_classes_4.inc
+--SKIPIF--
+<?php
+require_once('skipif.inc');
+if (PHP_OS_FAMILY != 'Windows') die('skip Windows only');
+?>
+--FILE--
+Unreachable
+--EXPECTF--
+Fatal error: Class Test uses internal class Exception during preloading, which is not supported on Windows in Unknown on line 0
diff --git a/ext/opcache/tests/preload_unresolved_prop_type.inc b/ext/opcache/tests/preload_unresolved_prop_type.inc
new file mode 100644
index 0000000000..05f4ee06a3
--- /dev/null
+++ b/ext/opcache/tests/preload_unresolved_prop_type.inc
@@ -0,0 +1,2 @@
+<?php
+opcache_compile_file(__DIR__ . "/preload_unresolved_prop_type_2.inc");
diff --git a/ext/opcache/tests/preload_unresolved_prop_type.phpt b/ext/opcache/tests/preload_unresolved_prop_type.phpt
new file mode 100644
index 0000000000..117f36692a
--- /dev/null
+++ b/ext/opcache/tests/preload_unresolved_prop_type.phpt
@@ -0,0 +1,14 @@
+--TEST--
+Preload: Unresolved property type
+--INI--
+opcache.enable=1
+opcache.enable_cli=1
+opcache.optimization_level=-1
+opcache.preload={PWD}/preload_unresolved_prop_type.inc
+--SKIPIF--
+<?php require_once('skipif.inc'); ?>
+--FILE--
+===DONE===
+--EXPECTF--
+Warning: Can't preload class Test with unresolved property types in %s on line %d
+===DONE===
diff --git a/ext/opcache/tests/preload_unresolved_prop_type_2.inc b/ext/opcache/tests/preload_unresolved_prop_type_2.inc
new file mode 100644
index 0000000000..c5557d1117
--- /dev/null
+++ b/ext/opcache/tests/preload_unresolved_prop_type_2.inc
@@ -0,0 +1,5 @@
+<?php
+
+class Test {
+ public Unknown $prop;
+}