/* * Copyright (c) 2014, 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-8049086: Minor API convenience functions on "Java" object * * @test * @run */var System = Java.type("java.lang.System");var out = System.out;var println = out.println;var getProperty = System.getProperty;var File = Java.type("java.io.File")["(String)"];print("println is java method? " + Java.isJavaMethod(println));print("println is script function? " + Java.isScriptFunction(println));print("getProperty is java method? " + Java.isJavaMethod(getProperty));print("getProperty is script function? " + Java.isScriptFunction(getProperty));print("File is java method? " + Java.isJavaMethod(File));print("File is script function? " + Java.isScriptFunction(File));print("eval is script function? " + Java.isScriptFunction(eval));print("eval is java method? " + Java.isJavaMethod(eval));function hello() {}print("hello is script function? " + Java.isScriptFunction(hello));print("hello is java method? " + Java.isJavaMethod(hello));print("out is script object? " + Java.isScriptObject(out));print("System is script object? " + Java.isScriptObject(System));print("Object is script object? " + Java.isScriptObject(Object));print("{} is script object? " + Java.isScriptObject({}));print("/foo/ is script object? " + Java.isScriptObject(/foo/));// Java function is anything whose 'typeof' is 'function' but it is not// a script function! This includes:// (a) Java methods (b) Java classes (as these respond to new)// (c) FunctionalInterface objects (d) JSObjects that are 'functions'print("java.lang.String is java function? " + Java.isJavaFunction(java.lang.String));print("java.lang.Runnable instance is java function? " + Java.isJavaFunction(new java.lang.Runnable(function() {})));print("eval is java function? " + Java.isJavaFunction(eval));print("println is java function? " + Java.isJavaFunction(println));print("getProperty is java function? " + Java.isJavaFunction(getProperty));var JSObject = Java.type("jdk.nashorn.api.scripting.JSObject");print("callable JSObject is function? " + Java.isJavaFunction(new JSObject() { isFunction: function() true, call: function() {} }));print("Non callable JSObject is function? " + Java.isJavaFunction(new JSObject() { isFunction: function() false, }));// synchronized functionvar lock = new java.lang.Object();print("lock is java object? " + Java.isJavaObject(lock));print("eval is java object? " + Java.isJavaObject(eval));print("{} is java object? " + Java.isJavaObject({}));print("/foo/ is java object? " + Java.isJavaObject(/foo/));print("[] is java object? " + Java.isJavaObject([]));print("java.io.File is java object? " + Java.isJavaObject(java.io.File));// synchornized function checksJava.synchronized(function() { var th = new java.lang.Thread(Java.synchronized(function() { print("new thread"); print("notifying.."); lock.notifyAll(); }, lock)); th.start(); print("about to wait.."); lock.wait(); th.join(); print("done waiting!");}, lock)();// try Mozilla "sync" as wellload("nashorn:mozilla_compat.js");sync(function() { var th = new java.lang.Thread(sync(function() { print("new thread"); print("notifying.."); lock.notifyAll(); }, lock)); th.start(); print("about to wait.."); lock.wait(); th.join(); print("done waiting!");}, lock)();function expectTypeError(func) { try { func(); throw new Error("should have thrown TypeError"); } catch (e) { if (! (e instanceof TypeError)) { fail("Expected TypeError, got " +e); } print(e); }}expectTypeError(function() Java.synchronized(232));expectTypeError(function() sync(232));expectTypeError(function() Java.synchronized({}));expectTypeError(function() sync({}));expectTypeError(function() Java.synchronized([]));expectTypeError(function() sync([]));expectTypeError(function() Java.synchronized("hello"));expectTypeError(function() sync("hello"));expectTypeError(function() Java.synchronized(null));expectTypeError(function() sync(null));expectTypeError(function() Java.synchronized(undefined));expectTypeError(function() sync(undefined));