diff options
Diffstat (limited to 'Zend/tests/traits/bugs')
-rw-r--r-- | Zend/tests/traits/bugs/abstract-methods01.phpt | 19 | ||||
-rw-r--r-- | Zend/tests/traits/bugs/abstract-methods02.phpt | 26 | ||||
-rw-r--r-- | Zend/tests/traits/bugs/abstract-methods03.phpt | 22 | ||||
-rw-r--r-- | Zend/tests/traits/bugs/abstract-methods04.phpt | 36 | ||||
-rw-r--r-- | Zend/tests/traits/bugs/abstract-methods05.phpt | 25 | ||||
-rw-r--r-- | Zend/tests/traits/bugs/abstract-methods06.phpt | 26 | ||||
-rw-r--r-- | Zend/tests/traits/bugs/alias-semantics.phpt | 23 | ||||
-rw-r--r-- | Zend/tests/traits/bugs/alias-semantics02.phpt | 25 | ||||
-rw-r--r-- | Zend/tests/traits/bugs/alias01.phpt | 26 | ||||
-rw-r--r-- | Zend/tests/traits/bugs/case-sensitive.phpt | 23 | ||||
-rw-r--r-- | Zend/tests/traits/bugs/interfaces.phpt | 19 | ||||
-rw-r--r-- | Zend/tests/traits/bugs/missing-trait.phpt | 15 | ||||
-rw-r--r-- | Zend/tests/traits/bugs/overridding-conflicting-methods.phpt | 31 | ||||
-rw-r--r-- | Zend/tests/traits/bugs/overridding-conflicting-property-initializer.phpt | 23 |
14 files changed, 339 insertions, 0 deletions
diff --git a/Zend/tests/traits/bugs/abstract-methods01.phpt b/Zend/tests/traits/bugs/abstract-methods01.phpt new file mode 100644 index 0000000..6275caa --- /dev/null +++ b/Zend/tests/traits/bugs/abstract-methods01.phpt @@ -0,0 +1,19 @@ +--TEST-- +Abstract Trait Methods should behave like common abstract methods. +--FILE-- +<?php +error_reporting(E_ALL); + +trait THello { + public abstract function hello(); +} + +class TraitsTest { + use THello; +} + +$test = new TraitsTest(); +$test->hello(); +?> +--EXPECTF-- +Fatal error: Class %s contains %d abstract method and must therefore be declared abstract or implement the remaining methods (%s) in %s on line %d
\ No newline at end of file diff --git a/Zend/tests/traits/bugs/abstract-methods02.phpt b/Zend/tests/traits/bugs/abstract-methods02.phpt new file mode 100644 index 0000000..78abe7d --- /dev/null +++ b/Zend/tests/traits/bugs/abstract-methods02.phpt @@ -0,0 +1,26 @@ +--TEST-- +Abstract Trait Methods should behave like common abstract methods. +--FILE-- +<?php +error_reporting(E_ALL); + +trait THello { + public abstract function hello(); +} + +trait THelloImpl { + public function hello() { + echo 'Hello'; + } +} + +class TraitsTest { + use THello; + use THelloImpl; +} + +$test = new TraitsTest(); +$test->hello(); +?> +--EXPECTF-- +Hello
\ No newline at end of file diff --git a/Zend/tests/traits/bugs/abstract-methods03.phpt b/Zend/tests/traits/bugs/abstract-methods03.phpt new file mode 100644 index 0000000..605b1d8 --- /dev/null +++ b/Zend/tests/traits/bugs/abstract-methods03.phpt @@ -0,0 +1,22 @@ +--TEST-- +Abstract Trait Methods should behave like common abstract methods. +--FILE-- +<?php +error_reporting(E_ALL); + +trait THello { + public abstract function hello(); +} + +class TraitsTest { + use THello; + public function hello() { + echo 'Hello'; + } +} + +$test = new TraitsTest(); +$test->hello(); +?> +--EXPECTF-- +Hello
\ No newline at end of file diff --git a/Zend/tests/traits/bugs/abstract-methods04.phpt b/Zend/tests/traits/bugs/abstract-methods04.phpt new file mode 100644 index 0000000..56a3464 --- /dev/null +++ b/Zend/tests/traits/bugs/abstract-methods04.phpt @@ -0,0 +1,36 @@ +--TEST-- +Abstract Trait Methods should behave like common abstract methods and +implementstion may be provided by other traits. Sorting order shouldn't influence result. +--FILE-- +<?php +error_reporting(E_ALL); + +trait THello { + public abstract function hello(); +} + +trait THelloImpl { + public function hello() { + echo 'Hello'; + } +} + +class TraitsTest1 { + use THello; + use THelloImpl; +} + +$test = new TraitsTest1(); +$test->hello(); + +class TraitsTest2 { + use THelloImpl; + use THello; +} + +$test = new TraitsTest2(); +$test->hello(); + +?> +--EXPECTF-- +HelloHello
\ No newline at end of file diff --git a/Zend/tests/traits/bugs/abstract-methods05.phpt b/Zend/tests/traits/bugs/abstract-methods05.phpt new file mode 100644 index 0000000..9a1315f --- /dev/null +++ b/Zend/tests/traits/bugs/abstract-methods05.phpt @@ -0,0 +1,25 @@ +--TEST-- +The compatibility with the signature of abstract methods should be checked. +--FILE-- +<?php +error_reporting(E_ALL); + +trait THelloB { + public function hello() { + echo 'Hello'; + } +} + +trait THelloA { + public abstract function hello($a); +} + +class TraitsTest1 { + use THelloB; + use THelloA; +} + + +?> +--EXPECTF-- +Fatal error: Declaration of THelloA::hello($a) must be compatible with THelloB::hello() in %s on line %d diff --git a/Zend/tests/traits/bugs/abstract-methods06.phpt b/Zend/tests/traits/bugs/abstract-methods06.phpt new file mode 100644 index 0000000..8569aef --- /dev/null +++ b/Zend/tests/traits/bugs/abstract-methods06.phpt @@ -0,0 +1,26 @@ +--TEST-- +The compatibility with the signature of abstract methods should be checked. (also checking the second possible implementation branch) +--FILE-- +<?php +error_reporting(E_ALL); + +trait THelloB { + public function hello() { + echo 'Hello'; + } +} + +trait THelloA { + public abstract function hello($a); +} + +class TraitsTest1 { + use THelloA; + use THelloB; +} + + + +?> +--EXPECTF-- +Fatal error: Declaration of THelloB::hello() must be compatible with THelloA::hello($a) in %s on line %d diff --git a/Zend/tests/traits/bugs/alias-semantics.phpt b/Zend/tests/traits/bugs/alias-semantics.phpt new file mode 100644 index 0000000..ac86692 --- /dev/null +++ b/Zend/tests/traits/bugs/alias-semantics.phpt @@ -0,0 +1,23 @@ +--TEST-- +Semantic of alias operation is to provide an additional identifier for the method body of the original method. +--FILE-- +<?php +error_reporting(E_ALL); + +trait THello { + public function a() { + echo 'A'; + } +} + +class TraitsTest { + use THello { a as b; } +} + +$test = new TraitsTest(); +$test->a(); +$test->b(); + +?> +--EXPECTF-- +AA
\ No newline at end of file diff --git a/Zend/tests/traits/bugs/alias-semantics02.phpt b/Zend/tests/traits/bugs/alias-semantics02.phpt new file mode 100644 index 0000000..e0b5286 --- /dev/null +++ b/Zend/tests/traits/bugs/alias-semantics02.phpt @@ -0,0 +1,25 @@ +--TEST-- +Semantic of alias operation is to provide an additional identifier for the +method body of the original method. +It should also work incase the method is fully qualified. +--FILE-- +<?php +error_reporting(E_ALL); + +trait THello { + public function a() { + echo 'A'; + } +} + +class TraitsTest { + use THello { THello::a as b; } +} + +$test = new TraitsTest(); +$test->a(); +$test->b(); + +?> +--EXPECTF-- +AA
\ No newline at end of file diff --git a/Zend/tests/traits/bugs/alias01.phpt b/Zend/tests/traits/bugs/alias01.phpt new file mode 100644 index 0000000..b60261e --- /dev/null +++ b/Zend/tests/traits/bugs/alias01.phpt @@ -0,0 +1,26 @@ +--TEST-- +Aliases are applied to the correct methods, and only to them. +--FILE-- +<?php +trait T1 { + function m1() { echo "T:m1\n"; } + function m2() { echo "T:m2\n"; } +} + +class C1 { + use T1 { m1 as a1; } +} + +$o = new C1; +$o->m1(); +$o->a1(); +$o->m2(); +$o->a2(); + +?> +--EXPECTF-- +T:m1 +T:m1 +T:m2 + +Fatal error: Call to undefined method C1::a2() in %s on line %d diff --git a/Zend/tests/traits/bugs/case-sensitive.phpt b/Zend/tests/traits/bugs/case-sensitive.phpt new file mode 100644 index 0000000..13d4188 --- /dev/null +++ b/Zend/tests/traits/bugs/case-sensitive.phpt @@ -0,0 +1,23 @@ +--TEST--
+Check for problems with case sensitivity in compositions
+--FILE--
+<?php
+error_reporting(E_ALL);
+
+trait A {
+ public function M1() {}
+ public function M2() {}
+}
+
+trait B {
+ public function M1() {}
+ public function M2() {}
+}
+
+class MyClass {
+ use A;
+ use B;
+}
+?>
+--EXPECTF--
+Fatal error: Trait method M1 has not been applied, because there are collisions with other trait methods on MyClass in %s on line %d
diff --git a/Zend/tests/traits/bugs/interfaces.phpt b/Zend/tests/traits/bugs/interfaces.phpt new file mode 100644 index 0000000..486bda7 --- /dev/null +++ b/Zend/tests/traits/bugs/interfaces.phpt @@ -0,0 +1,19 @@ +--TEST-- +Make sure trait does not implement an interface. +--FILE-- +<?php +error_reporting(E_ALL); + +interface MyInterface { + public function a(); +} + +trait THello implements MyInterface { + public function a() { + echo 'A'; + } +} + +?> +--EXPECTF-- +Fatal error: Cannot use 'MyInterface' as interface on 'THello' since it is a Trait in %s on line %d
\ No newline at end of file diff --git a/Zend/tests/traits/bugs/missing-trait.phpt b/Zend/tests/traits/bugs/missing-trait.phpt new file mode 100644 index 0000000..ce4fa5c --- /dev/null +++ b/Zend/tests/traits/bugs/missing-trait.phpt @@ -0,0 +1,15 @@ +--TEST-- +Check error message for missing traits +--FILE-- +<?php +error_reporting(E_ALL); + +class TraitsTest { + use THello; +} + +$test = new TraitsTest(); + +?> +--EXPECTF-- +Fatal error: Trait 'THello' not found in %s on line %d
\ No newline at end of file diff --git a/Zend/tests/traits/bugs/overridding-conflicting-methods.phpt b/Zend/tests/traits/bugs/overridding-conflicting-methods.phpt new file mode 100644 index 0000000..fc09a36 --- /dev/null +++ b/Zend/tests/traits/bugs/overridding-conflicting-methods.phpt @@ -0,0 +1,31 @@ +--TEST-- +Overridding Conflicting Methods should not result in a notice/warning about collisions +--FILE-- +<?php +error_reporting(E_ALL); + +trait THello1 { + public function hello() { + echo 'Hello'; + } +} + +trait THello2 { + public function hello() { + echo 'Hello'; + } +} + +class TraitsTest { + use THello1; + use THello2; + public function hello() { + echo 'Hello'; + } +} + +$test = new TraitsTest(); +$test->hello(); +?> +--EXPECTF-- +Hello
\ No newline at end of file diff --git a/Zend/tests/traits/bugs/overridding-conflicting-property-initializer.phpt b/Zend/tests/traits/bugs/overridding-conflicting-property-initializer.phpt new file mode 100644 index 0000000..1b9d98d --- /dev/null +++ b/Zend/tests/traits/bugs/overridding-conflicting-property-initializer.phpt @@ -0,0 +1,23 @@ +--TEST-- +Properties are considered incompatible if they are different in any of their +defined characteristics. Thus, initialization values have to be equal, too. +--FILE-- +<?php +error_reporting(E_ALL); + +trait foo +{ + public $zoo = 'foo::zoo'; +} + +class baz +{ + use foo; + public $zoo = 'baz::zoo'; +} + +$obj = new baz(); +echo $obj->zoo, "\n"; +?> +--EXPECTF-- +Fatal error: baz and foo define the same property ($zoo) in the composition of baz. However, the definition differs and is considered incompatible. Class was composed in %s on line %d
\ No newline at end of file |