test/src/jdk/nashorn/api/scripting/ScriptObjectMirrorTest.java

Print this page
rev 752 : 8011964: need indexed access to externally-managed ByteBuffer
Reviewed-by: lagergren, hannesw

@@ -23,10 +23,11 @@
  * questions.
  */
 
 package jdk.nashorn.api.scripting;
 
+import java.nio.ByteBuffer;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import javax.script.ScriptEngine;
 import javax.script.ScriptEngineManager;

@@ -228,10 +229,33 @@
         final Object newObj = ((ScriptObjectMirror)e2obj.getMember("foo")).newObject();
         assertTrue(newObj instanceof ScriptObjectMirror);
     }
 
     @Test
+    public void indexPropertiesExternalBufferTest() throws ScriptException {
+        final ScriptEngineManager m = new ScriptEngineManager();
+        final ScriptEngine e = m.getEngineByName("nashorn");
+        final ScriptObjectMirror obj = (ScriptObjectMirror)e.eval("var obj = {}; obj");
+        final ByteBuffer buf = ByteBuffer.allocate(5);
+        int i;
+        for (i = 0; i < 5; i++) {
+            buf.put(i, (byte)(i+10));
+        }
+        obj.setIndexedPropertiesToExternalArrayData(buf);
+
+        for (i = 0; i < 5; i++) {
+            assertEquals((byte)(i+10), ((Number)e.eval("obj[" + i + "]")).byteValue());
+        }
+
+        e.eval("for (i = 0; i < 5; i++) obj[i] = 0");
+        for (i = 0; i < 5; i++) {
+            assertEquals((byte)0, ((Number)e.eval("obj[" + i + "]")).byteValue());
+            assertEquals((byte)0, buf.get(i));
+        }
+    }
+
+    @Test
     public void conversionTest() throws ScriptException {
         final ScriptEngineManager m = new ScriptEngineManager();
         final ScriptEngine e = m.getEngineByName("nashorn");
         final ScriptObjectMirror arr = (ScriptObjectMirror)e.eval("[33, 45, 23]");
         final int[] intArr = arr.to(int[].class);