test/script/basic/JDK-8157160.js

Tue, 21 Mar 2017 13:41:57 -0700

author
asaha
date
Tue, 21 Mar 2017 13:41:57 -0700
changeset 2160
1df40fe54cd6
parent 1824
258478e90f2d
permissions
-rw-r--r--

Merge

sundar@1824 1 /*
sundar@1824 2 * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
sundar@1824 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
sundar@1824 4 *
sundar@1824 5 * This code is free software; you can redistribute it and/or modify it
sundar@1824 6 * under the terms of the GNU General Public License version 2 only, as
sundar@1824 7 * published by the Free Software Foundation.
sundar@1824 8 *
sundar@1824 9 * This code is distributed in the hope that it will be useful, but WITHOUT
sundar@1824 10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
sundar@1824 11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
sundar@1824 12 * version 2 for more details (a copy is included in the LICENSE file that
sundar@1824 13 * accompanied this code).
sundar@1824 14 *
sundar@1824 15 * You should have received a copy of the GNU General Public License version
sundar@1824 16 * 2 along with this work; if not, write to the Free Software Foundation,
sundar@1824 17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
sundar@1824 18 *
sundar@1824 19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
sundar@1824 20 * or visit www.oracle.com if you need additional information or have any
sundar@1824 21 * questions.
sundar@1824 22 */
sundar@1824 23
sundar@1824 24 /**
sundar@1824 25 * JDK-8157160: JSON.stringify does not work on ScriptObjectMirror objects
sundar@1824 26 *
sundar@1824 27 * @test
sundar@1824 28 * @option -scripting
sundar@1824 29 * @run
sundar@1824 30 */
sundar@1824 31
sundar@1824 32 var SM = Java.type("javax.script.ScriptEngineManager");
sundar@1824 33 var AJSO = Java.type("jdk.nashorn.api.scripting.AbstractJSObject");
sundar@1824 34 var Supplier = Java.type("java.util.function.Supplier");
sundar@1824 35
sundar@1824 36 var engine = new SM().getEngineByName("nashorn");
sundar@1824 37
sundar@1824 38 // JSON stringify ScriptObjectMirror instances
sundar@1824 39 print(JSON.stringify(engine.eval("({ foo : 42 })")));
sundar@1824 40 print(JSON.stringify(engine.eval("([5, 6, 76, 7])")));
sundar@1824 41 print(JSON.stringify(engine.eval(<<EOF
sundar@1824 42 ({
sundar@1824 43 toJSON: function() "hello"
sundar@1824 44 })
sundar@1824 45 EOF
sundar@1824 46 )));
sundar@1824 47
sundar@1824 48 print(JSON.stringify(engine.eval(<<EOF
sundar@1824 49 obj = {
sundar@1824 50 name: 'nashorn',
sundar@1824 51 versions: [ 'es5.1', 'es6' ]
sundar@1824 52 }
sundar@1824 53 EOF
sundar@1824 54 )));
sundar@1824 55
sundar@1824 56 var dm = engine.eval("new Date()");
sundar@1824 57 print('"' + dm.toJSON() + '"' == JSON.stringify(dm));
sundar@1824 58
sundar@1824 59 // JSON stringifying an arbitrary JSObject impl.
sundar@1824 60 var jsObj = new AJSO() {
sundar@1824 61 keySet: function() {
sundar@1824 62 var keys = new java.util.HashSet();
sundar@1824 63 keys.add("x");
sundar@1824 64 keys.add("y");
sundar@1824 65 return keys;
sundar@1824 66 },
sundar@1824 67
sundar@1824 68 getMember: function(name) {
sundar@1824 69 if (name == "x") {
sundar@1824 70 return 42;
sundar@1824 71 } else if (name == "y") {
sundar@1824 72 return "hello";
sundar@1824 73 }
sundar@1824 74 }
sundar@1824 75 };
sundar@1824 76 print(JSON.stringify(jsObj));
sundar@1824 77
sundar@1824 78 // try toJSON implementation on JSObject
sundar@1824 79 var jsObj2 = new AJSO() {
sundar@1824 80 getMember: function(name) {
sundar@1824 81 if (name == 'toJSON') {
sundar@1824 82 return function() {
sundar@1824 83 return "my json representation";
sundar@1824 84 }
sundar@1824 85 }
sundar@1824 86 }
sundar@1824 87 };
sundar@1824 88 print(JSON.stringify(jsObj2));
sundar@1824 89
sundar@1824 90 var jsObj3 = new AJSO() {
sundar@1824 91 getMember: function(name) {
sundar@1824 92 if (name == 'toJSON') {
sundar@1824 93 return new Supplier() {
sundar@1824 94 "get": function() {
sundar@1824 95 return "value from toJSON function";
sundar@1824 96 }
sundar@1824 97 };
sundar@1824 98 }
sundar@1824 99 }
sundar@1824 100 };
sundar@1824 101 print(JSON.stringify(jsObj3));
sundar@1824 102
sundar@1824 103 // replacer function from another script world
sundar@1824 104 print(JSON.stringify({
sundar@1824 105 foo: "hello"
sundar@1824 106 }, engine.eval(<<EOF
sundar@1824 107 function (key, value) {
sundar@1824 108 if (key == "foo") {
sundar@1824 109 return value.toUpperCase()
sundar@1824 110 }
sundar@1824 111 return value;
sundar@1824 112 }
sundar@1824 113 EOF)));

mercurial