/* * Copyright (c) 2016, 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. * * 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. */ /** * JDK-8161579: Array-like AbstractJSObject-based instance not treated as array by native array functions * * @test * @run */ var AbstractJSObject = Java.type("jdk.nashorn.api.scripting.AbstractJSObject"); var JavaStringArray = Java.type("java.lang.String[]"); var JavaArrayList = Java.type("java.util.ArrayList"); var arrayLikeJSObject = new AbstractJSObject() { hasMember: function(name) { return name == "length"; }, getMember: function(name) { return name == "length" ? 3 : null; }, hasSlot: function(slot) { return slot >= 0 && slot <= 2; }, getSlot: function(slot) { return "abc"[slot]; }, isArray: function() { return true; } } var javaStringArray = new JavaStringArray(3); javaStringArray[0] = "x"; javaStringArray[1] = "y"; javaStringArray[2] = "z"; var javaArrayList = new JavaArrayList(); javaArrayList.add("i"); javaArrayList.add("j"); javaArrayList.add("k"); Assert.assertEquals([1, 2, 3].concat(arrayLikeJSObject).join(), "1,2,3,a,b,c"); Assert.assertEquals([1, 2, 3].concat(javaStringArray).join(), "1,2,3,x,y,z"); Assert.assertEquals([1, 2, 3].concat(javaArrayList).join(), "1,2,3,i,j,k"); Assert.assertEquals([1, 2, 3].concat("foo").join(), "1,2,3,foo"); Assert.assertEquals([1, 2, 3].concat(4).join(), "1,2,3,4"); Assert.assertEquals([1, 2, 3].concat(false).join(), "1,2,3,false");