Просмотр исходного кода

Add ArrayAccess test with native JS push method

Stefan Siegl 10 лет назад
Родитель
Сommit
5135afa67e
1 измененных файлов с 61 добавлено и 0 удалено
  1. 61 0
      tests/array_access_002.phpt

+ 61 - 0
tests/array_access_002.phpt

@@ -0,0 +1,61 @@
+--TEST--
+Test V8::executeString() : Use ArrayAccess with JavaScript native push method
+--SKIPIF--
+<?php require_once(dirname(__FILE__) . '/skipif.inc'); ?>
+--INI--
+v8js.use_array_access = 1
+--FILE--
+<?php
+
+class MyArray implements ArrayAccess, Countable {
+    private $data = Array('one', 'two', 'three');
+
+    public function offsetExists($offset) {
+	return isset($this->data[$offset]);
+    }
+
+    public function offsetGet($offset) {
+	return $this->data[$offset];
+    }
+
+    public function offsetSet($offset, $value) {
+	echo "set[$offset] = $value\n";
+	$this->data[$offset] = $value;
+    }
+
+    public function offsetUnset($offset) {
+        throw new Exception('Not implemented');
+    }
+
+    public function count() {
+	echo 'count() = ', count($this->data), "\n";
+        return count($this->data);
+    }
+}
+
+$v8 = new V8Js();
+$v8->myarr = new MyArray();
+
+/* Call native JavaScript push method, this should cause a count
+ * offsetSet call. */
+$v8->executeString('PHP.myarr.push(23);');
+
+/* Access array from PHP side, should work if JavaScript called
+ * the write accessor functions. */
+var_dump(count($v8->myarr));
+var_dump($v8->myarr[3]);
+
+/* And JS side of course should see it too. */
+$v8->executeString('var_dump(PHP.myarr.join(","));');
+
+?>
+===EOF===
+--EXPECT--
+count() = 3
+set[3] = 23
+count() = 4
+int(4)
+int(23)
+count() = 4
+string(16) "one,two,three,23"
+===EOF===