From a1cafdf0c45c224336ceb5a84fd5d40c6c1fa05e Mon Sep 17 00:00:00 2001 From: Marcus Boerger Date: Wed, 12 Mar 2003 00:09:59 +0000 Subject: Added some interface tests --- tests/classes/interface_class.phpt | 14 ++ tests/classes/interface_doubled.phpt | 199 +++++++++++++++++++++++ tests/classes/interface_implemented.phpt | 103 ++++++++++++ tests/classes/interface_instantiate.phpt | 16 ++ tests/classes/interface_member.phpt | 13 ++ tests/classes/interface_method.phpt | 15 ++ tests/classes/interface_method_final.phpt | 15 ++ tests/classes/interface_method_private.phpt | 15 ++ tests/classes/interface_must_be_implemented.phpt | 17 ++ 9 files changed, 407 insertions(+) create mode 100644 tests/classes/interface_class.phpt create mode 100644 tests/classes/interface_doubled.phpt create mode 100644 tests/classes/interface_implemented.phpt create mode 100644 tests/classes/interface_instantiate.phpt create mode 100644 tests/classes/interface_member.phpt create mode 100644 tests/classes/interface_method.phpt create mode 100644 tests/classes/interface_method_final.phpt create mode 100644 tests/classes/interface_method_private.phpt create mode 100644 tests/classes/interface_must_be_implemented.phpt 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-- + +--FILE-- + +--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-- + +--FILE-- +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-- + +--FILE-- +_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-- + +--FILE-- + +--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-- + +--FILE-- + +--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-- + +--FILE-- + +--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-- + +--FILE-- + +--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-- + +--FILE-- + +--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-- + +--FILE-- + +--EXPECTF-- +Fatal error: Class derived_a contains abstract methods and must be declared abstract in %s on line %d -- cgit v1.2.1