From 5a11ef2468d9f8a5d36ad94915ce9a9da5d39a7e Mon Sep 17 00:00:00 2001 From: Stefan Siegl Date: Sat, 29 Nov 2014 21:28:21 +0100 Subject: [PATCH] Test ArrayAccess prototype method overwriting If the PHP object implementing ArrayAccess has a method, that has the same name as one of the Array.prototype methods, the PHP method shall be called, i.e. overwrite the JS method. --- tests/array_access_003.phpt | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/tests/array_access_003.phpt b/tests/array_access_003.phpt index c7a5f1b..22c7f09 100644 --- a/tests/array_access_003.phpt +++ b/tests/array_access_003.phpt @@ -36,6 +36,11 @@ class MyArray implements ArrayAccess, Countable { echo "push << $value\n"; $this->data[] = $value; } + + public function push($value) { + echo "php-side-push << $value\n"; + $this->data[] = $value; + } } $v8 = new V8Js(); @@ -50,6 +55,16 @@ var_dump($v8->myarr[3]); /* And JS should see the changes due to live binding. */ $v8->executeString('var_dump(PHP.myarr.join(","));'); + +/* Call `push' method, this should trigger the PHP method. */ +$v8->executeString('PHP.myarr.push(42);'); + +var_dump(count($v8->myarr)); +var_dump($v8->myarr[4]); + +/* And JS should see the changes due to live binding. */ +$v8->executeString('var_dump(PHP.myarr.join(","));'); + ?> ===EOF=== --EXPECT-- @@ -59,4 +74,10 @@ int(4) int(23) count() = 4 string(16) "one,two,three,23" +php-side-push << 42 +count() = 5 +int(5) +int(42) +count() = 5 +string(19) "one,two,three,23,42" ===EOF===