nashorn/test/src/jdk/nashorn/api/scripting/PluggableJSObjectTest.java
changeset 29759 dfe00a233a98
parent 29659 f40752db7773
parent 29758 cb8621d74d60
child 29760 c8bb4d1093d4
child 29832 eed75e14d198
--- a/nashorn/test/src/jdk/nashorn/api/scripting/PluggableJSObjectTest.java	Wed Jul 05 20:26:30 2017 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,288 +0,0 @@
-/*
- * Copyright (c) 2010, 2013, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package jdk.nashorn.api.scripting;
-
-import static org.testng.Assert.assertEquals;
-import static org.testng.Assert.assertFalse;
-import static org.testng.Assert.fail;
-
-import java.nio.IntBuffer;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.LinkedHashMap;
-import java.util.Set;
-import javax.script.ScriptEngine;
-import javax.script.ScriptEngineManager;
-import org.testng.annotations.Test;
-
-/**
- * Tests for pluggable external impls. of jdk.nashorn.api.scripting.JSObject.
- *
- * JDK-8024615: Refactor ScriptObjectMirror and JSObject to support external
- * JSObject implementations.
- */
-@SuppressWarnings("javadoc")
-public class PluggableJSObjectTest {
-    public static class MapWrapperObject extends AbstractJSObject {
-        private final HashMap<String, Object> map = new LinkedHashMap<>();
-
-        public HashMap<String, Object> getMap() {
-            return map;
-        }
-
-        @Override
-        public Object getMember(final String name) {
-            return map.get(name);
-        }
-
-        @Override
-        public void setMember(final String name, final Object value) {
-            map.put(name, value);
-        }
-
-        @Override
-        public boolean hasMember(final String name) {
-            return map.containsKey(name);
-        }
-
-        @Override
-        public void removeMember(final String name) {
-            map.remove(name);
-        }
-
-        @Override
-        public Set<String> keySet() {
-            return map.keySet();
-        }
-
-        @Override
-        public Collection<Object> values() {
-            return map.values();
-        }
-    }
-
-    @Test
-    // Named property access on a JSObject
-    public void namedAccessTest() {
-        final ScriptEngineManager m = new ScriptEngineManager();
-        final ScriptEngine e = m.getEngineByName("nashorn");
-        try {
-            final MapWrapperObject obj = new MapWrapperObject();
-            e.put("obj", obj);
-            obj.getMap().put("foo", "bar");
-
-            // property-like access on MapWrapperObject objects
-            assertEquals(e.eval("obj.foo"), "bar");
-            e.eval("obj.foo = 'hello'");
-            assertEquals(e.eval("'foo' in obj"), Boolean.TRUE);
-            assertEquals(e.eval("obj.foo"), "hello");
-            assertEquals(obj.getMap().get("foo"), "hello");
-            e.eval("delete obj.foo");
-            assertFalse(obj.getMap().containsKey("foo"));
-            assertEquals(e.eval("'foo' in obj"), Boolean.FALSE);
-        } catch (final Exception exp) {
-            exp.printStackTrace();
-            fail(exp.getMessage());
-        }
-    }
-
-    // @bug 8062030: Nashorn bug retrieving array property after key string concatenation
-    @Test
-    // ConsString attribute access on a JSObject
-    public void consStringTest() {
-        final ScriptEngineManager m = new ScriptEngineManager();
-        final ScriptEngine e = m.getEngineByName("nashorn");
-        try {
-            final MapWrapperObject obj = new MapWrapperObject();
-            e.put("obj", obj);
-            e.put("f", "f");
-            e.eval("obj[f + 'oo'] = 'bar';");
-
-            assertEquals(obj.getMap().get("foo"), "bar");
-            assertEquals(e.eval("obj[f + 'oo']"), "bar");
-            assertEquals(e.eval("obj['foo']"), "bar");
-            assertEquals(e.eval("f + 'oo' in obj"), Boolean.TRUE);
-            assertEquals(e.eval("'foo' in obj"), Boolean.TRUE);
-            e.eval("delete obj[f + 'oo']");
-            assertFalse(obj.getMap().containsKey("foo"));
-            assertEquals(e.eval("obj[f + 'oo']"), null);
-            assertEquals(e.eval("obj['foo']"), null);
-            assertEquals(e.eval("f + 'oo' in obj"), Boolean.FALSE);
-            assertEquals(e.eval("'foo' in obj"), Boolean.FALSE);
-        } catch (final Exception exp) {
-            exp.printStackTrace();
-            fail(exp.getMessage());
-        }
-    }
-
-    public static class BufferObject extends AbstractJSObject {
-        private final IntBuffer buf;
-
-        public BufferObject(final int size) {
-            buf = IntBuffer.allocate(size);
-        }
-
-        public IntBuffer getBuffer() {
-            return buf;
-        }
-
-        @Override
-        public Object getMember(final String name) {
-            return name.equals("length")? buf.capacity() : null;
-        }
-
-        @Override
-        public boolean hasSlot(final int i) {
-            return i > -1 && i < buf.capacity();
-        }
-
-        @Override
-        public Object getSlot(final int i) {
-            return buf.get(i);
-        }
-
-        @Override
-        public void setSlot(final int i, final Object value) {
-            buf.put(i, ((Number)value).intValue());
-        }
-
-        @Override
-        public boolean isArray() {
-            return true;
-        }
-    }
-
-    @Test
-    // array-like indexed access for a JSObject
-    public void indexedAccessTest() {
-        final ScriptEngineManager m = new ScriptEngineManager();
-        final ScriptEngine e = m.getEngineByName("nashorn");
-        try {
-            final BufferObject buf = new BufferObject(2);
-            e.put("buf", buf);
-
-            // array-like access on BufferObject objects
-            assertEquals(e.eval("buf.length"), buf.getBuffer().capacity());
-            e.eval("buf[0] = 23");
-            assertEquals(buf.getBuffer().get(0), 23);
-            assertEquals(e.eval("buf[0]"), 23);
-            assertEquals(e.eval("buf[1]"), 0);
-            buf.getBuffer().put(1, 42);
-            assertEquals(e.eval("buf[1]"), 42);
-            assertEquals(e.eval("Array.isArray(buf)"), Boolean.TRUE);
-        } catch (final Exception exp) {
-            exp.printStackTrace();
-            fail(exp.getMessage());
-        }
-    }
-
-    public static class Adder extends AbstractJSObject {
-        @Override
-        public Object call(final Object thiz, final Object... args) {
-            double res = 0.0;
-            for (final Object arg : args) {
-                res += ((Number)arg).doubleValue();
-            }
-            return res;
-        }
-
-        @Override
-        public boolean isFunction() {
-            return true;
-        }
-    }
-
-    @Test
-    // a callable JSObject
-    public void callableJSObjectTest() {
-        final ScriptEngineManager m = new ScriptEngineManager();
-        final ScriptEngine e = m.getEngineByName("nashorn");
-        try {
-            e.put("sum", new Adder());
-            // check callability of Adder objects
-            assertEquals(e.eval("typeof sum"), "function");
-            assertEquals(((Number)e.eval("sum(1, 2, 3, 4, 5)")).intValue(), 15);
-        } catch (final Exception exp) {
-            exp.printStackTrace();
-            fail(exp.getMessage());
-        }
-    }
-
-    public static class Factory extends AbstractJSObject {
-        @SuppressWarnings("unused")
-        @Override
-        public Object newObject(final Object... args) {
-            return new HashMap<Object, Object>();
-        }
-
-        @Override
-        public boolean isFunction() {
-            return true;
-        }
-    }
-
-    @Test
-    // a factory JSObject
-    public void factoryJSObjectTest() {
-        final ScriptEngineManager m = new ScriptEngineManager();
-        final ScriptEngine e = m.getEngineByName("nashorn");
-        try {
-            e.put("Factory", new Factory());
-
-            // check new on Factory
-            assertEquals(e.eval("typeof Factory"), "function");
-            assertEquals(e.eval("typeof new Factory()"), "object");
-            assertEquals(e.eval("(new Factory()) instanceof java.util.Map"), Boolean.TRUE);
-        } catch (final Exception exp) {
-            exp.printStackTrace();
-            fail(exp.getMessage());
-        }
-    }
-
-    @Test
-    // iteration tests
-    public void iteratingJSObjectTest() {
-        final ScriptEngineManager m = new ScriptEngineManager();
-        final ScriptEngine e = m.getEngineByName("nashorn");
-        try {
-            final MapWrapperObject obj = new MapWrapperObject();
-            obj.setMember("foo", "hello");
-            obj.setMember("bar", "world");
-            e.put("obj", obj);
-
-            // check for..in
-            Object val = e.eval("var str = ''; for (i in obj) str += i; str");
-            assertEquals(val.toString(), "foobar");
-
-            // check for..each..in
-            val = e.eval("var str = ''; for each (i in obj) str += i; str");
-            assertEquals(val.toString(), "helloworld");
-        } catch (final Exception exp) {
-            exp.printStackTrace();
-            fail(exp.getMessage());
-        }
-    }
-}