]> granicus.if.org Git - php/commitdiff
Add PPP method tests
authorMarcus Boerger <helly@php.net>
Wed, 5 Feb 2003 23:07:24 +0000 (23:07 +0000)
committerMarcus Boerger <helly@php.net>
Wed, 5 Feb 2003 23:07:24 +0000 (23:07 +0000)
30 files changed:
tests/classes/private_001.phpt [new file with mode: 0644]
tests/classes/private_002.phpt [new file with mode: 0644]
tests/classes/private_003.phpt [new file with mode: 0644]
tests/classes/private_003b.phpt [new file with mode: 0644]
tests/classes/private_004.phpt [new file with mode: 0644]
tests/classes/private_004b.phpt [new file with mode: 0644]
tests/classes/private_005.phpt [new file with mode: 0644]
tests/classes/private_005b.phpt [new file with mode: 0644]
tests/classes/private_006.phpt [new file with mode: 0644]
tests/classes/private_006b.phpt [new file with mode: 0644]
tests/classes/private_007.phpt [new file with mode: 0644]
tests/classes/private_007b.phpt [new file with mode: 0644]
tests/classes/protected_001.phpt [new file with mode: 0644]
tests/classes/protected_001b.phpt [new file with mode: 0644]
tests/classes/protected_002.phpt [new file with mode: 0644]
tests/classes/visibility_000a.phpt [new file with mode: 0644]
tests/classes/visibility_000b.phpt [new file with mode: 0644]
tests/classes/visibility_000c.phpt [new file with mode: 0644]
tests/classes/visibility_001a.phpt [new file with mode: 0644]
tests/classes/visibility_001b.phpt [new file with mode: 0644]
tests/classes/visibility_001c.phpt [new file with mode: 0644]
tests/classes/visibility_002a.phpt [new file with mode: 0644]
tests/classes/visibility_002b.phpt [new file with mode: 0644]
tests/classes/visibility_002c.phpt [new file with mode: 0644]
tests/classes/visibility_003a.phpt [new file with mode: 0644]
tests/classes/visibility_003b.phpt [new file with mode: 0644]
tests/classes/visibility_003c.phpt [new file with mode: 0644]
tests/classes/visibility_004a.phpt [new file with mode: 0644]
tests/classes/visibility_004b.phpt [new file with mode: 0644]
tests/classes/visibility_004c.phpt [new file with mode: 0644]

diff --git a/tests/classes/private_001.phpt b/tests/classes/private_001.phpt
new file mode 100644 (file)
index 0000000..93c2eb2
--- /dev/null
@@ -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 (file)
index 0000000..03e2786
--- /dev/null
@@ -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 (file)
index 0000000..d65222d
--- /dev/null
@@ -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 (file)
index 0000000..ff64a16
--- /dev/null
@@ -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 (file)
index 0000000..2d34c19
--- /dev/null
@@ -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 (file)
index 0000000..979e1c7
--- /dev/null
@@ -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 (file)
index 0000000..482b20e
--- /dev/null
@@ -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 (file)
index 0000000..979e1c7
--- /dev/null
@@ -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 (file)
index 0000000..7055efd
--- /dev/null
@@ -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 (file)
index 0000000..329ba33
--- /dev/null
@@ -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 (file)
index 0000000..09503f0
--- /dev/null
@@ -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 (file)
index 0000000..453e250
--- /dev/null
@@ -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 (file)
index 0000000..6814a7c
--- /dev/null
@@ -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 (file)
index 0000000..2670ff8
--- /dev/null
@@ -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 (file)
index 0000000..19d3164
--- /dev/null
@@ -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 (file)
index 0000000..c7962b9
--- /dev/null
@@ -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 (file)
index 0000000..af80992
--- /dev/null
@@ -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 (file)
index 0000000..0145852
--- /dev/null
@@ -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 (file)
index 0000000..844a3ff
--- /dev/null
@@ -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 (file)
index 0000000..54d0283
--- /dev/null
@@ -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 (file)
index 0000000..1714212
--- /dev/null
@@ -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 (file)
index 0000000..9fed622
--- /dev/null
@@ -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 (file)
index 0000000..c4b7cad
--- /dev/null
@@ -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 (file)
index 0000000..c906a82
--- /dev/null
@@ -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 (file)
index 0000000..27572ec
--- /dev/null
@@ -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 (file)
index 0000000..f2de2d2
--- /dev/null
@@ -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 (file)
index 0000000..fcb9592
--- /dev/null
@@ -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 (file)
index 0000000..8aaaa0f
--- /dev/null
@@ -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 (file)
index 0000000..90d0b72
--- /dev/null
@@ -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 (file)
index 0000000..e488bfe
--- /dev/null
@@ -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