summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorMarcus Boerger <helly@php.net>2003-02-05 23:07:24 +0000
committerMarcus Boerger <helly@php.net>2003-02-05 23:07:24 +0000
commit984cde31238e45dfc28ba21553802d297e3eb121 (patch)
treea94c462f7da726813f35a71edb301d0c2ccc5919 /tests
parentedde957038c1dc1514eda868326fd7b70e492389 (diff)
downloadphp-git-984cde31238e45dfc28ba21553802d297e3eb121.tar.gz
Add PPP method tests
Diffstat (limited to 'tests')
-rw-r--r--tests/classes/private_001.phpt26
-rw-r--r--tests/classes/private_002.phpt35
-rw-r--r--tests/classes/private_003.phpt36
-rw-r--r--tests/classes/private_003b.phpt37
-rw-r--r--tests/classes/private_004.phpt32
-rw-r--r--tests/classes/private_004b.phpt35
-rw-r--r--tests/classes/private_005.phpt32
-rw-r--r--tests/classes/private_005b.phpt35
-rw-r--r--tests/classes/private_006.phpt41
-rw-r--r--tests/classes/private_006b.phpt41
-rw-r--r--tests/classes/private_007.phpt30
-rw-r--r--tests/classes/private_007b.phpt31
-rw-r--r--tests/classes/protected_001.phpt26
-rw-r--r--tests/classes/protected_001b.phpt27
-rw-r--r--tests/classes/protected_002.phpt35
-rw-r--r--tests/classes/visibility_000a.phpt33
-rw-r--r--tests/classes/visibility_000b.phpt33
-rw-r--r--tests/classes/visibility_000c.phpt33
-rw-r--r--tests/classes/visibility_001a.phpt33
-rw-r--r--tests/classes/visibility_001b.phpt33
-rw-r--r--tests/classes/visibility_001c.phpt33
-rw-r--r--tests/classes/visibility_002a.phpt33
-rw-r--r--tests/classes/visibility_002b.phpt33
-rw-r--r--tests/classes/visibility_002c.phpt33
-rw-r--r--tests/classes/visibility_003a.phpt33
-rw-r--r--tests/classes/visibility_003b.phpt33
-rw-r--r--tests/classes/visibility_003c.phpt33
-rw-r--r--tests/classes/visibility_004a.phpt33
-rw-r--r--tests/classes/visibility_004b.phpt33
-rw-r--r--tests/classes/visibility_004c.phpt33
30 files changed, 994 insertions, 0 deletions
diff --git a/tests/classes/private_001.phpt b/tests/classes/private_001.phpt
new file mode 100644
index 0000000000..93c2eb20ed
--- /dev/null
+++ b/tests/classes/private_001.phpt
@@ -0,0 +1,26 @@
+--TEST--
+A private method can only be called inside the class
+--SKIPIF--
+<?php if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 needed'); ?>
+--FILE--
+<?php
+
+class pass {
+ private static function show() {
+ echo "Call show()\n";
+ }
+
+ public static function do_show() {
+ pass::show();
+ }
+}
+
+pass::do_show();
+pass::show();
+
+echo "Done\n"; // shouldn't be displayed
+?>
+--EXPECTF--
+Call show()
+
+Fatal error: Call to private method pass::show() from context '' in %s on line %d
diff --git a/tests/classes/private_002.phpt b/tests/classes/private_002.phpt
new file mode 100644
index 0000000000..03e27864d5
--- /dev/null
+++ b/tests/classes/private_002.phpt
@@ -0,0 +1,35 @@
+--TEST--
+A private method cannot be called in another class
+--SKIPIF--
+<?php if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 needed'); ?>
+--FILE--
+<?php
+
+class pass {
+ private static function show() {
+ echo "Call pass::show()\n";
+ }
+
+ public static function do_show() {
+ pass::show();
+ }
+}
+
+pass::do_show();
+
+class fail {
+ public static function show() {
+ echo "Call fail::show()\n";
+ pass::show();
+ }
+}
+
+fail::show();
+
+echo "Done\n"; // shouldn't be displayed
+?>
+--EXPECTF--
+Call pass::show()
+Call fail::show()
+
+Fatal error: Call to private method pass::show() from context 'fail' in %s on line %d
diff --git a/tests/classes/private_003.phpt b/tests/classes/private_003.phpt
new file mode 100644
index 0000000000..d65222de94
--- /dev/null
+++ b/tests/classes/private_003.phpt
@@ -0,0 +1,36 @@
+--TEST--
+A private method cannot be called in a derived class
+--SKIPIF--
+<?php if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 needed'); ?>
+--FILE--
+<?php
+ini_set("error_reporting",2039);
+class pass {
+ private static function show() {
+ echo "Call show()\n";
+ }
+
+ protected static function good() {
+ pass::show();
+ }
+}
+
+class fail extends pass {
+ static function ok() {
+ pass::good();
+ }
+
+ static function not_ok() {
+ pass::show();
+ }
+}
+
+fail::ok();
+fail::not_ok(); // calling a private function
+
+echo "Done\n"; // shouldn't be displayed
+?>
+--EXPECTF--
+Call show()
+
+Fatal error: Call to private method pass::show() from context 'fail' in %s on line %d
diff --git a/tests/classes/private_003b.phpt b/tests/classes/private_003b.phpt
new file mode 100644
index 0000000000..ff64a16de8
--- /dev/null
+++ b/tests/classes/private_003b.phpt
@@ -0,0 +1,37 @@
+--TEST--
+A private method cannot be called in a derived class
+--SKIPIF--
+<?php if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 needed'); ?>
+--FILE--
+<?php
+
+class pass {
+ private function show() {
+ echo "Call show()\n";
+ }
+
+ protected function good() {
+ $this->show();
+ }
+}
+
+class fail extends pass {
+ public function ok() {
+ $this->good();
+ }
+
+ public function not_ok() {
+ $this->show();
+ }
+}
+
+$t = new fail();
+$t->ok();
+$t->not_ok(); // calling a private function
+
+echo "Done\n"; // shouldn't be displayed
+?>
+--EXPECTF--
+Call show()
+
+Fatal error: Call to private method pass::show() from context 'fail' in %s on line %d
diff --git a/tests/classes/private_004.phpt b/tests/classes/private_004.phpt
new file mode 100644
index 0000000000..2d34c191cd
--- /dev/null
+++ b/tests/classes/private_004.phpt
@@ -0,0 +1,32 @@
+--TEST--
+A private method cannot be called in a derived class
+--SKIPIF--
+<?php if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 needed'); ?>
+--FILE--
+<?php
+
+class pass {
+ private static function show() {
+ echo "Call show()\n";
+ }
+
+ public static function do_show() {
+ pass::show();
+ }
+}
+
+class fail extends pass {
+ static function do_show() {
+ fail::show();
+ }
+}
+
+pass::do_show();
+fail::do_show();
+
+echo "Done\n"; // shouldn't be displayed
+?>
+--EXPECTF--
+Call show()
+
+Fatal error: Call to private method pass::show() from context 'fail' in %s on line %d
diff --git a/tests/classes/private_004b.phpt b/tests/classes/private_004b.phpt
new file mode 100644
index 0000000000..979e1c700a
--- /dev/null
+++ b/tests/classes/private_004b.phpt
@@ -0,0 +1,35 @@
+--TEST--
+A private method cannot be called in a derived class
+--SKIPIF--
+<?php if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 needed'); ?>
+--FILE--
+<?php
+
+class pass {
+ private function show() {
+ echo "Call show()\n";
+ }
+
+ public function do_show() {
+ $this->show();
+ }
+}
+
+class fail extends pass {
+ function do_show() {
+ $this->show();
+ }
+}
+
+$t = new pass();
+$t->do_show();
+
+$t2 = new fail();
+$t2->do_show();
+
+echo "Done\n"; // shouldn't be displayed
+?>
+--EXPECTF--
+Call show()
+
+Fatal error: Call to private method pass::show() from context 'fail' in %s on line %d \ No newline at end of file
diff --git a/tests/classes/private_005.phpt b/tests/classes/private_005.phpt
new file mode 100644
index 0000000000..482b20ef35
--- /dev/null
+++ b/tests/classes/private_005.phpt
@@ -0,0 +1,32 @@
+--TEST--
+A private method cannot be called in a derived class
+--SKIPIF--
+<?php if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 needed'); ?>
+--FILE--
+<?php
+
+class pass {
+ private static function show() {
+ echo "Call show()\n";
+ }
+
+ public static function do_show() {
+ pass::show();
+ }
+}
+
+class fail extends pass {
+ static function do_show() {
+ pass::show();
+ }
+}
+
+pass::do_show();
+fail::do_show();
+
+echo "Done\n"; // shouldn't be displayed
+?>
+--EXPECTF--
+Call show()
+
+Fatal error: Call to private method pass::show() from context 'fail' in %s on line %d
diff --git a/tests/classes/private_005b.phpt b/tests/classes/private_005b.phpt
new file mode 100644
index 0000000000..979e1c700a
--- /dev/null
+++ b/tests/classes/private_005b.phpt
@@ -0,0 +1,35 @@
+--TEST--
+A private method cannot be called in a derived class
+--SKIPIF--
+<?php if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 needed'); ?>
+--FILE--
+<?php
+
+class pass {
+ private function show() {
+ echo "Call show()\n";
+ }
+
+ public function do_show() {
+ $this->show();
+ }
+}
+
+class fail extends pass {
+ function do_show() {
+ $this->show();
+ }
+}
+
+$t = new pass();
+$t->do_show();
+
+$t2 = new fail();
+$t2->do_show();
+
+echo "Done\n"; // shouldn't be displayed
+?>
+--EXPECTF--
+Call show()
+
+Fatal error: Call to private method pass::show() from context 'fail' in %s on line %d \ No newline at end of file
diff --git a/tests/classes/private_006.phpt b/tests/classes/private_006.phpt
new file mode 100644
index 0000000000..7055efd255
--- /dev/null
+++ b/tests/classes/private_006.phpt
@@ -0,0 +1,41 @@
+--TEST--
+A private method can be overwritten in a second derived class
+--SKIPIF--
+<?php if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 needed'); ?>
+--FILE--
+<?php
+class first {
+ private static function show() {
+ echo "Call show()\n";
+ }
+
+ public static function do_show() {
+ first::show();
+ }
+}
+
+first::do_show();
+
+class second extends first {
+}
+
+second::do_show();
+
+class third extends second {
+}
+
+third::do_show();
+
+class fail extends third {
+ static function show() { // cannot be redeclared
+ echo "Call show()\n";
+ }
+}
+
+echo "Done\n";
+?>
+--EXPECTF--
+Call show()
+Call show()
+Call show()
+Done
diff --git a/tests/classes/private_006b.phpt b/tests/classes/private_006b.phpt
new file mode 100644
index 0000000000..329ba33b37
--- /dev/null
+++ b/tests/classes/private_006b.phpt
@@ -0,0 +1,41 @@
+--TEST--
+A private method can be overwritten in a second derived class
+--SKIPIF--
+<?php if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 needed'); ?>
+--FILE--
+<?php
+
+class first {
+ private function show() {
+ echo "Call show()\n";
+ }
+
+ public function do_show() {
+ $this->show();
+ }
+}
+
+$t1 = new first();
+$t1->do_show();
+
+class second extends first {
+}
+
+//$t2 = new second();
+//$t2->do_show();
+
+class third extends second {
+ private function show() {
+ echo "Call show()\n";
+ }
+}
+
+$t3 = new third();
+$t3->do_show();
+
+echo "Done\n";
+?>
+--EXPECTF--
+Call show()
+Call show()
+Done \ No newline at end of file
diff --git a/tests/classes/private_007.phpt b/tests/classes/private_007.phpt
new file mode 100644
index 0000000000..09503f0b96
--- /dev/null
+++ b/tests/classes/private_007.phpt
@@ -0,0 +1,30 @@
+--TEST--
+A derived class does not know about privates of ancestors
+--SKIPIF--
+<?php if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 needed'); ?>
+--FILE--
+<?php
+
+class Bar {
+ public static function pub() {
+ Bar::priv();
+ }
+ private static function priv() {
+ echo "Bar::priv()\n";
+ }
+}
+class Foo extends Bar {
+ public static function priv() {
+ echo "Foo::priv()\n";
+ }
+}
+
+Foo::pub();
+Foo::priv();
+
+echo "Done\n";
+?>
+--EXPECTF--
+Bar::priv()
+Foo::priv()
+Done
diff --git a/tests/classes/private_007b.phpt b/tests/classes/private_007b.phpt
new file mode 100644
index 0000000000..453e250b61
--- /dev/null
+++ b/tests/classes/private_007b.phpt
@@ -0,0 +1,31 @@
+--TEST--
+A derived class does not know about privates of ancestors
+--SKIPIF--
+<?php if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 needed'); ?>
+--FILE--
+<?php
+
+class Bar {
+ public function pub() {
+ $this->priv();
+ }
+ private function priv() {
+ echo "Bar::priv()\n";
+ }
+}
+class Foo extends Bar {
+ public function priv() {
+ echo "Foo::priv()\n";
+ }
+}
+
+$obj = new Foo();
+$obj->pub();
+$obj->priv();
+
+echo "Done\n";
+?>
+--EXPECTF--
+Bar::priv()
+Foo::priv()
+Done
diff --git a/tests/classes/protected_001.phpt b/tests/classes/protected_001.phpt
new file mode 100644
index 0000000000..6814a7cdbe
--- /dev/null
+++ b/tests/classes/protected_001.phpt
@@ -0,0 +1,26 @@
+--TEST--
+A protected method can only be called inside the class
+--SKIPIF--
+<?php if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 needed'); ?>
+--FILE--
+<?php
+
+class pass {
+ protected static function fail() {
+ echo "Call fail()\n";
+ }
+
+ public static function good() {
+ pass::fail();
+ }
+}
+
+pass::good();
+pass::fail();// must fail because we are calling from outside of class pass
+
+echo "Done\n"; // shouldn't be displayed
+?>
+--EXPECTF--
+Call fail()
+
+Fatal error: Call to protected method pass::fail() from context '' in %s on line %d
diff --git a/tests/classes/protected_001b.phpt b/tests/classes/protected_001b.phpt
new file mode 100644
index 0000000000..2670ff8ebc
--- /dev/null
+++ b/tests/classes/protected_001b.phpt
@@ -0,0 +1,27 @@
+--TEST--
+A protected method can only be called inside the class
+--SKIPIF--
+<?php if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 needed'); ?>
+--FILE--
+<?php
+
+class pass {
+ protected function fail() {
+ echo "Call fail()\n";
+ }
+
+ public function good() {
+ $this->fail();
+ }
+}
+
+$t = new pass();
+$t->good();
+$t->fail();// must fail because we are calling from outside of class pass
+
+echo "Done\n"; // shouldn't be displayed
+?>
+--EXPECTF--
+Call fail()
+
+Fatal error: Call to protected method pass::fail() from context '' in %s on line %d
diff --git a/tests/classes/protected_002.phpt b/tests/classes/protected_002.phpt
new file mode 100644
index 0000000000..19d31645b9
--- /dev/null
+++ b/tests/classes/protected_002.phpt
@@ -0,0 +1,35 @@
+--TEST--
+A protected method cannot be called in another class
+--SKIPIF--
+<?php if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 needed'); ?>
+--FILE--
+<?php
+
+class pass {
+ protected static function show() {
+ echo "Call pass::show()\n";
+ }
+
+ public static function do_show() {
+ pass::show();
+ }
+}
+
+pass::do_show();
+
+class fail {
+ public static function show() {
+ echo "Call fail::show()\n";
+ pass::show();
+ }
+}
+
+fail::show();
+
+echo "Done\n"; // shouldn't be displayed
+?>
+--EXPECTF--
+Call pass::show()
+Call fail::show()
+
+Fatal error: Call to protected method pass::show() from context 'fail' in %s on line %d
diff --git a/tests/classes/visibility_000a.phpt b/tests/classes/visibility_000a.phpt
new file mode 100644
index 0000000000..c7962b9ac5
--- /dev/null
+++ b/tests/classes/visibility_000a.phpt
@@ -0,0 +1,33 @@
+--TEST--
+A redeclared method must have the same or higher visibility
+--SKIPIF--
+<?php if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 needed'); ?>
+--FILE--
+<?php
+
+class father {
+ function f0() {}
+ function f1() {}
+ public function f2() {}
+ protected function f3() {}
+ private function f4() {}
+}
+
+class same extends father {
+
+ // overload fn with same visibility
+ function f0() {}
+ public function f1() {}
+ public function f2() {}
+ protected function f3() {}
+ private function f4() {}
+}
+
+class fail extends same {
+ protected function f0() {}
+}
+
+echo "Done\n"; // shouldn't be displayed
+?>
+--EXPECTF--
+Fatal error: Access level to fail::f0() must be public (as in class same) in %s on line %d
diff --git a/tests/classes/visibility_000b.phpt b/tests/classes/visibility_000b.phpt
new file mode 100644
index 0000000000..af80992dea
--- /dev/null
+++ b/tests/classes/visibility_000b.phpt
@@ -0,0 +1,33 @@
+--TEST--
+A redeclared method must have the same or higher visibility
+--SKIPIF--
+<?php if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 needed'); ?>
+--FILE--
+<?php
+
+class father {
+ function f0() {}
+ function f1() {}
+ public function f2() {}
+ protected function f3() {}
+ private function f4() {}
+}
+
+class same extends father {
+
+ // overload fn with same visibility
+ function f0() {}
+ public function f1() {}
+ public function f2() {}
+ protected function f3() {}
+ private function f4() {}
+}
+
+class fail extends same {
+ private function f0() {}
+}
+
+echo "Done\n"; // shouldn't be displayed
+?>
+--EXPECTF--
+Fatal error: Access level to fail::f0() must be public (as in class same) in %s on line %d
diff --git a/tests/classes/visibility_000c.phpt b/tests/classes/visibility_000c.phpt
new file mode 100644
index 0000000000..014585229b
--- /dev/null
+++ b/tests/classes/visibility_000c.phpt
@@ -0,0 +1,33 @@
+--TEST--
+A redeclared method must have the same or higher visibility
+--SKIPIF--
+<?php if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 needed'); ?>
+--FILE--
+<?php
+
+class father {
+ function f0() {}
+ function f1() {}
+ public function f2() {}
+ protected function f3() {}
+ private function f4() {}
+}
+
+class same extends father {
+
+ // overload fn with same visibility
+ function f0() {}
+ public function f1() {}
+ public function f2() {}
+ protected function f3() {}
+ private function f4() {}
+}
+
+class fail extends same {
+ function f0() {}
+}
+
+echo "Done\n"; // shouldn't be displayed
+?>
+--EXPECTF--
+Done
diff --git a/tests/classes/visibility_001a.phpt b/tests/classes/visibility_001a.phpt
new file mode 100644
index 0000000000..844a3ffe4f
--- /dev/null
+++ b/tests/classes/visibility_001a.phpt
@@ -0,0 +1,33 @@
+--TEST--
+A redeclared method must have the same or higher visibility
+--SKIPIF--
+<?php if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 needed'); ?>
+--FILE--
+<?php
+
+class father {
+ function f0() {}
+ function f1() {}
+ public function f2() {}
+ protected function f3() {}
+ private function f4() {}
+}
+
+class same extends father {
+
+ // overload fn with same visibility
+ function f0() {}
+ public function f1() {}
+ public function f2() {}
+ protected function f3() {}
+ private function f4() {}
+}
+
+class fail extends same {
+ protected function f1() {}
+}
+
+echo "Done\n"; // shouldn't be displayed
+?>
+--EXPECTF--
+Fatal error: Access level to fail::f1() must be public (as in class same) in %s on line %d
diff --git a/tests/classes/visibility_001b.phpt b/tests/classes/visibility_001b.phpt
new file mode 100644
index 0000000000..54d0283a5f
--- /dev/null
+++ b/tests/classes/visibility_001b.phpt
@@ -0,0 +1,33 @@
+--TEST--
+A redeclared method must have the same or higher visibility
+--SKIPIF--
+<?php if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 needed'); ?>
+--FILE--
+<?php
+
+class father {
+ function f0() {}
+ function f1() {}
+ public function f2() {}
+ protected function f3() {}
+ private function f4() {}
+}
+
+class same extends father {
+
+ // overload fn with same visibility
+ function f0() {}
+ public function f1() {}
+ public function f2() {}
+ protected function f3() {}
+ private function f4() {}
+}
+
+class fail extends same {
+ private function f1() {}
+}
+
+echo "Done\n"; // shouldn't be displayed
+?>
+--EXPECTF--
+Fatal error: Access level to fail::f1() must be public (as in class same) in %s on line %d
diff --git a/tests/classes/visibility_001c.phpt b/tests/classes/visibility_001c.phpt
new file mode 100644
index 0000000000..171421251b
--- /dev/null
+++ b/tests/classes/visibility_001c.phpt
@@ -0,0 +1,33 @@
+--TEST--
+A redeclared method must have the same or higher visibility
+--SKIPIF--
+<?php if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 needed'); ?>
+--FILE--
+<?php
+
+class father {
+ function f0() {}
+ function f1() {}
+ public function f2() {}
+ protected function f3() {}
+ private function f4() {}
+}
+
+class same extends father {
+
+ // overload fn with same visibility
+ function f0() {}
+ public function f1() {}
+ public function f2() {}
+ protected function f3() {}
+ private function f4() {}
+}
+
+class fail extends same {
+ function f1() {}
+}
+
+echo "Done\n"; // shouldn't be displayed
+?>
+--EXPECTF--
+Done
diff --git a/tests/classes/visibility_002a.phpt b/tests/classes/visibility_002a.phpt
new file mode 100644
index 0000000000..9fed6225c8
--- /dev/null
+++ b/tests/classes/visibility_002a.phpt
@@ -0,0 +1,33 @@
+--TEST--
+A redeclared method must have the same or higher visibility
+--SKIPIF--
+<?php if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 needed'); ?>
+--FILE--
+<?php
+
+class father {
+ function f0() {}
+ function f1() {}
+ public function f2() {}
+ protected function f3() {}
+ private function f4() {}
+}
+
+class same extends father {
+
+ // overload fn with same visibility
+ function f0() {}
+ public function f1() {}
+ public function f2() {}
+ protected function f3() {}
+ private function f4() {}
+}
+
+class fail extends same {
+ protected function f2() {}
+}
+
+echo "Done\n"; // shouldn't be displayed
+?>
+--EXPECTF--
+Fatal error: Access level to fail::f2() must be public (as in class same) in %s on line %d
diff --git a/tests/classes/visibility_002b.phpt b/tests/classes/visibility_002b.phpt
new file mode 100644
index 0000000000..c4b7cadab4
--- /dev/null
+++ b/tests/classes/visibility_002b.phpt
@@ -0,0 +1,33 @@
+--TEST--
+A redeclared method must have the same or higher visibility
+--SKIPIF--
+<?php if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 needed'); ?>
+--FILE--
+<?php
+
+class father {
+ function f0() {}
+ function f1() {}
+ public function f2() {}
+ protected function f3() {}
+ private function f4() {}
+}
+
+class same extends father {
+
+ // overload fn with same visibility
+ function f0() {}
+ public function f1() {}
+ public function f2() {}
+ protected function f3() {}
+ private function f4() {}
+}
+
+class fail extends same {
+ private function f2() {}
+}
+
+echo "Done\n"; // shouldn't be displayed
+?>
+--EXPECTF--
+Fatal error: Access level to fail::f2() must be public (as in class same) in %s on line %d
diff --git a/tests/classes/visibility_002c.phpt b/tests/classes/visibility_002c.phpt
new file mode 100644
index 0000000000..c906a823e9
--- /dev/null
+++ b/tests/classes/visibility_002c.phpt
@@ -0,0 +1,33 @@
+--TEST--
+A redeclared method must have the same or higher visibility
+--SKIPIF--
+<?php if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 needed'); ?>
+--FILE--
+<?php
+
+class father {
+ function f0() {}
+ function f1() {}
+ public function f2() {}
+ protected function f3() {}
+ private function f4() {}
+}
+
+class same extends father {
+
+ // overload fn with same visibility
+ function f0() {}
+ public function f1() {}
+ public function f2() {}
+ protected function f3() {}
+ private function f4() {}
+}
+
+class fail extends same {
+ function f2() {}
+}
+
+echo "Done\n"; // shouldn't be displayed
+?>
+--EXPECTF--
+Done
diff --git a/tests/classes/visibility_003a.phpt b/tests/classes/visibility_003a.phpt
new file mode 100644
index 0000000000..27572ececa
--- /dev/null
+++ b/tests/classes/visibility_003a.phpt
@@ -0,0 +1,33 @@
+--TEST--
+A redeclared method must have the same or higher visibility
+--SKIPIF--
+<?php if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 needed'); ?>
+--FILE--
+<?php
+
+class father {
+ function f0() {}
+ function f1() {}
+ public function f2() {}
+ protected function f3() {}
+ private function f4() {}
+}
+
+class same extends father {
+
+ // overload fn with same visibility
+ function f0() {}
+ public function f1() {}
+ public function f2() {}
+ protected function f3() {}
+ private function f4() {}
+}
+
+class fail extends same {
+ public function f3() {}
+}
+
+echo "Done\n";
+?>
+--EXPECTF--
+Done
diff --git a/tests/classes/visibility_003b.phpt b/tests/classes/visibility_003b.phpt
new file mode 100644
index 0000000000..f2de2d2ff6
--- /dev/null
+++ b/tests/classes/visibility_003b.phpt
@@ -0,0 +1,33 @@
+--TEST--
+A redeclared method must have the same or higher visibility
+--SKIPIF--
+<?php if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 needed'); ?>
+--FILE--
+<?php
+
+class father {
+ function f0() {}
+ function f1() {}
+ public function f2() {}
+ protected function f3() {}
+ private function f4() {}
+}
+
+class same extends father {
+
+ // overload fn with same visibility
+ function f0() {}
+ public function f1() {}
+ public function f2() {}
+ protected function f3() {}
+ private function f4() {}
+}
+
+class fail extends same {
+ private function f3() {}
+}
+
+echo "Done\n"; // shouldn't be displayed
+?>
+--EXPECTF--
+Fatal error: Access level to fail::f3() must be protected (as in class same) or weaker in %s on line %d
diff --git a/tests/classes/visibility_003c.phpt b/tests/classes/visibility_003c.phpt
new file mode 100644
index 0000000000..fcb9592ff7
--- /dev/null
+++ b/tests/classes/visibility_003c.phpt
@@ -0,0 +1,33 @@
+--TEST--
+A redeclared method must have the same or higher visibility
+--SKIPIF--
+<?php if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 needed'); ?>
+--FILE--
+<?php
+
+class father {
+ function f0() {}
+ function f1() {}
+ public function f2() {}
+ protected function f3() {}
+ private function f4() {}
+}
+
+class same extends father {
+
+ // overload fn with same visibility
+ function f0() {}
+ public function f1() {}
+ public function f2() {}
+ protected function f3() {}
+ private function f4() {}
+}
+
+class fail extends same {
+ function f3() {}
+}
+
+echo "Done\n";
+?>
+--EXPECTF--
+Done
diff --git a/tests/classes/visibility_004a.phpt b/tests/classes/visibility_004a.phpt
new file mode 100644
index 0000000000..8aaaa0f3f5
--- /dev/null
+++ b/tests/classes/visibility_004a.phpt
@@ -0,0 +1,33 @@
+--TEST--
+A redeclared method must have the same or higher visibility
+--SKIPIF--
+<?php if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 needed'); ?>
+--FILE--
+<?php
+
+class father {
+ function f0() {}
+ function f1() {}
+ public function f2() {}
+ protected function f3() {}
+ private function f4() {}
+}
+
+class same extends father {
+
+ // overload fn with same visibility
+ function f0() {}
+ public function f1() {}
+ public function f2() {}
+ protected function f3() {}
+ private function f4() {}
+}
+
+class fail extends same {
+ public function f4() {}
+}
+
+echo "Done\n";
+?>
+--EXPECTF--
+Done
diff --git a/tests/classes/visibility_004b.phpt b/tests/classes/visibility_004b.phpt
new file mode 100644
index 0000000000..90d0b72f62
--- /dev/null
+++ b/tests/classes/visibility_004b.phpt
@@ -0,0 +1,33 @@
+--TEST--
+A redeclared method must have the same or higher visibility
+--SKIPIF--
+<?php if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 needed'); ?>
+--FILE--
+<?php
+
+class father {
+ function f0() {}
+ function f1() {}
+ public function f2() {}
+ protected function f3() {}
+ private function f4() {}
+}
+
+class same extends father {
+
+ // overload fn with same visibility
+ function f0() {}
+ public function f1() {}
+ public function f2() {}
+ protected function f3() {}
+ private function f4() {}
+}
+
+class fail extends same {
+ protected function f4() {}
+}
+
+echo "Done\n"; // shouldn't be displayed
+?>
+--EXPECTF--
+Done
diff --git a/tests/classes/visibility_004c.phpt b/tests/classes/visibility_004c.phpt
new file mode 100644
index 0000000000..e488bfeae8
--- /dev/null
+++ b/tests/classes/visibility_004c.phpt
@@ -0,0 +1,33 @@
+--TEST--
+A redeclared method must have the same or higher visibility
+--SKIPIF--
+<?php if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 needed'); ?>
+--FILE--
+<?php
+
+class father {
+ function f0() {}
+ function f1() {}
+ public function f2() {}
+ protected function f3() {}
+ private function f4() {}
+}
+
+class same extends father {
+
+ // overload fn with same visibility
+ function f0() {}
+ public function f1() {}
+ public function f2() {}
+ protected function f3() {}
+ private function f4() {}
+}
+
+class fail extends same {
+ function f4() {}
+}
+
+echo "Done\n";
+?>
+--EXPECTF--
+Done