summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarcus Boerger <helly@php.net>2003-03-12 00:09:59 +0000
committerMarcus Boerger <helly@php.net>2003-03-12 00:09:59 +0000
commita1cafdf0c45c224336ceb5a84fd5d40c6c1fa05e (patch)
treecfd8f0731787e0a667f9401dfce9675d3aff23aa
parentd40537327046c20f1b74529419b2cbb091256b2a (diff)
downloadphp-git-a1cafdf0c45c224336ceb5a84fd5d40c6c1fa05e.tar.gz
Added some interface tests
-rw-r--r--tests/classes/interface_class.phpt14
-rw-r--r--tests/classes/interface_doubled.phpt199
-rw-r--r--tests/classes/interface_implemented.phpt103
-rw-r--r--tests/classes/interface_instantiate.phpt16
-rw-r--r--tests/classes/interface_member.phpt13
-rw-r--r--tests/classes/interface_method.phpt15
-rw-r--r--tests/classes/interface_method_final.phpt15
-rw-r--r--tests/classes/interface_method_private.phpt15
-rw-r--r--tests/classes/interface_must_be_implemented.phpt17
9 files changed, 407 insertions, 0 deletions
diff --git a/tests/classes/interface_class.phpt b/tests/classes/interface_class.phpt
new file mode 100644
index 0000000000..bdfa76daad
--- /dev/null
+++ b/tests/classes/interface_class.phpt
@@ -0,0 +1,14 @@
+--TEST--
+A class can only implement interfaces
+--SKIPIF--
+<?php if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 needed'); ?>
+--FILE--
+<?php
+class base {
+}
+
+class derived implements base {
+}
+?>
+--EXPECTF--
+Fatal error: derived cannot implement base - it is not an interface in %s on line %d
diff --git a/tests/classes/interface_doubled.phpt b/tests/classes/interface_doubled.phpt
new file mode 100644
index 0000000000..0a80097b9b
--- /dev/null
+++ b/tests/classes/interface_doubled.phpt
@@ -0,0 +1,199 @@
+--TEST--
+An interface may both inherit and implement base interfaces
+--SKIPIF--
+<?php if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 needed'); ?>
+--FILE--
+<?php
+
+interface if_a {
+ abstract function f_a();
+}
+
+interface if_b {
+ abstract function f_b();
+}
+
+interface if_c implements if_a, if_b {
+ abstract function f_c();
+}
+
+interface if_d extends if_a implements if_b {
+ abstract function f_d();
+}
+
+interface if_e {
+ abstract function f_d();
+}
+
+interface if_f extends if_e implements if_a, if_b, if_c, if_d, if_e {
+}
+
+class base {
+ function test($class) {
+ echo "is_a(" . class_name($this) . ", $class) ". (is_a($this, $class) ? "yes\n" : "no\n");
+ }
+}
+
+echo "class_a\n";
+
+class class_a extends base implements if_a {
+ function f_a() {}
+ function f_b() {}
+ function f_c() {}
+ function f_d() {}
+ function f_e() {}
+}
+
+$t = new class_a();
+echo $t->test('if_a');
+echo $t->test('if_b');
+echo $t->test('if_c');
+echo $t->test('if_d');
+echo $t->test('if_e');
+
+echo "class_b\n";
+
+class class_b extends base implements if_a, if_b {
+ function f_a() {}
+ function f_b() {}
+ function f_c() {}
+ function f_d() {}
+ function f_e() {}
+}
+
+$t = new class_b();
+echo $t->test('if_a');
+echo $t->test('if_b');
+echo $t->test('if_c');
+echo $t->test('if_d');
+echo $t->test('if_e');
+
+echo "class_c\n";
+
+class class_c extends base implements if_c {
+ function f_a() {}
+ function f_b() {}
+ function f_c() {}
+ function f_d() {}
+ function f_e() {}
+}
+
+$t = new class_c();
+echo $t->test('if_a');
+echo $t->test('if_b');
+echo $t->test('if_c');
+echo $t->test('if_d');
+echo $t->test('if_e');
+
+echo "class_d\n";
+
+class class_d extends base implements if_d{
+ function f_a() {}
+ function f_b() {}
+ function f_c() {}
+ function f_d() {}
+ function f_e() {}
+}
+
+$t = new class_d();
+echo $t->test('if_a');
+echo $t->test('if_b');
+echo $t->test('if_c');
+echo $t->test('if_d');
+echo $t->test('if_e');
+
+echo "class_e\n";
+
+class class_e extends base implements if_a, if_b, if_c, if_d {
+ function f_a() {}
+ function f_b() {}
+ function f_c() {}
+ function f_d() {}
+ function f_e() {}
+}
+
+$t = new class_e();
+echo $t->test('if_a');
+echo $t->test('if_b');
+echo $t->test('if_c');
+echo $t->test('if_d');
+echo $t->test('if_e');
+
+echo "class_f\n";
+
+class class_f extends base implements if_e {
+ function f_a() {}
+ function f_b() {}
+ function f_c() {}
+ function f_d() {}
+ function f_e() {}
+}
+
+$t = new class_f();
+echo $t->test('if_a');
+echo $t->test('if_b');
+echo $t->test('if_c');
+echo $t->test('if_d');
+echo $t->test('if_e');
+
+echo "class_g\n";
+
+class class_g extends base implements if_f {
+ function f_a() {}
+ function f_b() {}
+ function f_c() {}
+ function f_d() {}
+ function f_e() {}
+}
+
+$t = new class_g();
+echo $t->test('if_a');
+echo $t->test('if_b');
+echo $t->test('if_c');
+echo $t->test('if_d');
+echo $t->test('if_e');
+
+?>
+--EXPECTF--
+class_a
+is_a(class_a, if_a) yes
+is_a(class_a, if_b) no
+is_a(class_a, if_c) no
+is_a(class_a, if_d) no
+is_a(class_a, if_e) no
+class_b
+is_a(class_b, if_a) yes
+is_a(class_b, if_b) yes
+is_a(class_b, if_c) no
+is_a(class_b, if_d) no
+is_a(class_b, if_e) no
+class_c
+is_a(class_c, if_a) yes
+is_a(class_c, if_b) yes
+is_a(class_c, if_c) yes
+is_a(class_c, if_d) no
+is_a(class_c, if_e) no
+class_d
+is_a(class_d, if_a) yes
+is_a(class_d, if_b) yes
+is_a(class_d, if_c) no
+is_a(class_d, if_d) yes
+is_a(class_d, if_e) no
+class_e
+is_a(class_e, if_a) yes
+is_a(class_e, if_b) yes
+is_a(class_e, if_c) yes
+is_a(class_e, if_d) yes
+is_a(class_e, if_e) no
+class_f
+is_a(class_f, if_a) no
+is_a(class_f, if_b) no
+is_a(class_f, if_c) no
+is_a(class_f, if_d) no
+is_a(class_f, if_e) yes
+class_g
+is_a(class_g, if_a) yes
+is_a(class_g, if_b) yes
+is_a(class_g, if_c) yes
+is_a(class_g, if_d) yes
+is_a(class_g, if_e) yes \ No newline at end of file
diff --git a/tests/classes/interface_implemented.phpt b/tests/classes/interface_implemented.phpt
new file mode 100644
index 0000000000..9edef873ba
--- /dev/null
+++ b/tests/classes/interface_implemented.phpt
@@ -0,0 +1,103 @@
+--TEST--
+An interface is inherited
+--SKIPIF--
+<?php if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 needed'); ?>
+--FILE--
+<?php
+
+interface if_a {
+ abstract function f_a();
+}
+
+interface if_b extends if_a {
+ abstract function f_b();
+}
+
+class base {
+ function _is_a($sub) {
+ echo 'is_a('.get_class($this).', '.$sub.') = '.(is_a($this, $sub) ? 'yes' : 'no')."\n";
+ }
+ function test() {
+ echo $this->_is_a('base');
+ echo $this->_is_a('derived_a');
+ echo $this->_is_a('derived_b');
+ echo $this->_is_a('derived_c');
+ echo $this->_is_a('derived_d');
+ echo $this->_is_a('if_a');
+ echo $this->_is_a('if_b');
+ echo "\n";
+ }
+}
+
+class derived_a extends base implements if_a {
+ function f_a() {}
+}
+
+class derived_b extends base implements if_a, if_b {
+ function f_a() {}
+ function f_b() {}
+}
+
+class derived_c extends derived_a implements if_b {
+ function f_b() {}
+}
+
+class derived_d extends derived_c {
+}
+
+$t = new base();
+$t->test();
+
+$t = new derived_a();
+$t->test();
+
+$t = new derived_b();
+$t->test();
+
+$t = new derived_c();
+$t->test();
+
+$t = new derived_d();
+$t->test();
+
+?>
+--EXPECTF--
+is_a(base, base) = yes
+is_a(base, derived_a) = no
+is_a(base, derived_b) = no
+is_a(base, derived_c) = no
+is_a(base, derived_d) = no
+is_a(base, if_a) = no
+is_a(base, if_b) = no
+
+is_a(derived_a, base) = yes
+is_a(derived_a, derived_a) = yes
+is_a(derived_a, derived_b) = no
+is_a(derived_a, derived_c) = no
+is_a(derived_a, derived_d) = no
+is_a(derived_a, if_a) = yes
+is_a(derived_a, if_b) = no
+
+is_a(derived_b, base) = yes
+is_a(derived_b, derived_a) = no
+is_a(derived_b, derived_b) = yes
+is_a(derived_b, derived_c) = no
+is_a(derived_b, derived_d) = no
+is_a(derived_b, if_a) = yes
+is_a(derived_b, if_b) = yes
+
+is_a(derived_c, base) = yes
+is_a(derived_c, derived_a) = yes
+is_a(derived_c, derived_b) = no
+is_a(derived_c, derived_c) = yes
+is_a(derived_c, derived_d) = no
+is_a(derived_c, if_a) = yes
+is_a(derived_c, if_b) = yes
+
+is_a(derived_d, base) = yes
+is_a(derived_d, derived_a) = yes
+is_a(derived_d, derived_b) = no
+is_a(derived_d, derived_c) = yes
+is_a(derived_d, derived_d) = yes
+is_a(derived_d, if_a) = yes
+is_a(derived_d, if_b) = yes
diff --git a/tests/classes/interface_instantiate.phpt b/tests/classes/interface_instantiate.phpt
new file mode 100644
index 0000000000..c568bbe855
--- /dev/null
+++ b/tests/classes/interface_instantiate.phpt
@@ -0,0 +1,16 @@
+--TEST--
+An interface cannot be instantiated
+--SKIPIF--
+<?php if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 needed'); ?>
+--FILE--
+<?php
+
+interface if_a {
+ abstract function f_a();
+}
+
+$t = new if_a();
+
+?>
+--EXPECTF--
+Fatal error: Cannot instantiate interface if_a in %s on line %d
diff --git a/tests/classes/interface_member.phpt b/tests/classes/interface_member.phpt
new file mode 100644
index 0000000000..f47b758e4c
--- /dev/null
+++ b/tests/classes/interface_member.phpt
@@ -0,0 +1,13 @@
+--TEST--
+An interface cannot have properties
+--SKIPIF--
+<?php if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 needed'); ?>
+--FILE--
+<?php
+
+interface if_a {
+ var $member;
+}
+?>
+--EXPECTF--
+Fatal error: Interfaces may not include member variables in %s on line %d
diff --git a/tests/classes/interface_method.phpt b/tests/classes/interface_method.phpt
new file mode 100644
index 0000000000..08d38229a3
--- /dev/null
+++ b/tests/classes/interface_method.phpt
@@ -0,0 +1,15 @@
+--TEST--
+An interface method must be abstract
+--SKIPIF--
+<?php if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 needed'); ?>
+--FILE--
+<?php
+
+interface if_a {
+ function err() {};
+}
+
+?>
+--EXPECTF--
+
+Fatal error: Interface function if_a::err() cannot contain body %s on line %d
diff --git a/tests/classes/interface_method_final.phpt b/tests/classes/interface_method_final.phpt
new file mode 100644
index 0000000000..6d06dccc3d
--- /dev/null
+++ b/tests/classes/interface_method_final.phpt
@@ -0,0 +1,15 @@
+--TEST--
+An interface method cannot be final
+--SKIPIF--
+<?php if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 needed'); ?>
+--FILE--
+<?php
+
+class if_a {
+ abstract final function err();
+}
+
+?>
+--EXPECTF--
+
+Fatal error: Cannot use the final modifier on an abstract class member in %s on line %d
diff --git a/tests/classes/interface_method_private.phpt b/tests/classes/interface_method_private.phpt
new file mode 100644
index 0000000000..822e2b87dd
--- /dev/null
+++ b/tests/classes/interface_method_private.phpt
@@ -0,0 +1,15 @@
+--TEST--
+An interface method cannot be private
+--SKIPIF--
+<?php if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 needed'); ?>
+--FILE--
+<?php
+
+interface if_a {
+ abstract private function err();
+}
+
+?>
+--EXPECTF--
+
+Fatal error: Access type for interface method if_a::err() must be omitted or declared public in %s on line %d
diff --git a/tests/classes/interface_must_be_implemented.phpt b/tests/classes/interface_must_be_implemented.phpt
new file mode 100644
index 0000000000..517a65bea7
--- /dev/null
+++ b/tests/classes/interface_must_be_implemented.phpt
@@ -0,0 +1,17 @@
+--TEST--
+An interface must be implemented
+--SKIPIF--
+<?php if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 needed'); ?>
+--FILE--
+<?php
+
+interface if_a {
+ abstract function f_a();
+}
+
+class derived_a implements if_a {
+}
+
+?>
+--EXPECTF--
+Fatal error: Class derived_a contains abstract methods and must be declared abstract in %s on line %d