1/* 2 * Copyright (c) 2010, 2015, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. 8 * 9 * This code is distributed in the hope that it will be useful, but WITHOUT 10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 12 * version 2 for more details (a copy is included in the LICENSE file that 13 * accompanied this code). 14 * 15 * You should have received a copy of the GNU General Public License version 16 * 2 along with this work; if not, write to the Free Software Foundation, 17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 18 * 19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 20 * or visit www.oracle.com if you need additional information or have any 21 * questions. 22 */ 23 24/** 25 * Verify that JSAdapter works as expected. 26 * 27 * @test 28 * @run 29 */ 30 31var obj = new JSAdapter() { 32 __get__: function(name) { 33 Assert.assertTrue(this === obj); 34 print("getter called for '" + name + "'"); return name; 35 }, 36 37 __put__: function(name, value) { 38 Assert.assertTrue(this === obj); 39 print("setter called for '" + name + "' with " + value); 40 }, 41 42 __call__: function(name, arg1, arg2) { 43 Assert.assertTrue(this === obj); 44 print("method '" + name + "' called with " + arg1 + ", " + arg2); 45 }, 46 47 __new__: function(arg1, arg2) { 48 Assert.assertTrue(this === obj); 49 print("new with " + arg1 + ", " + arg2); 50 }, 51 52 __getKeys__: function() { 53 Assert.assertTrue(this === obj); 54 print("__getKeys__ called"); 55 return [ "foo", "bar" ]; 56 }, 57 58 __getValues__: function() { 59 Assert.assertTrue(this === obj); 60 print("__getValues__ called"); 61 return [ "fooval", "barval" ]; 62 }, 63 64 __has__: function(name) { 65 Assert.assertTrue(this === obj); 66 print("__has__ called with '" + name + "'"); 67 return name == "js"; 68 }, 69 70 __delete__: function(name) { 71 Assert.assertTrue(this === obj); 72 print("__delete__ called with '" + name + "'"); 73 return true; 74 }, 75 76 __preventExtensions__ : function() { 77 Assert.assertTrue(this === obj); 78 print("__preventExtensions__ called"); 79 }, 80 81 __freeze__ : function() { 82 Assert.assertTrue(this === obj); 83 print("__freeze__ called"); 84 85 }, 86 87 __isFrozen__ : function() { 88 Assert.assertTrue(this === obj); 89 print("__isFrozen__ called"); 90 return false; 91 }, 92 93 __seal__ : function() { 94 Assert.assertTrue(this === obj); 95 print("__seal__ called"); 96 }, 97 98 __isSealed__ : function() { 99 Assert.assertTrue(this === obj); 100 print("__isSealed__ called"); 101 return false; 102 }, 103 104 __isExtensible__ : function() { 105 Assert.assertTrue(this === obj); 106 print("__isExtensible__ called"); 107 return true; 108 } 109}; 110 111// calls __get__ 112print(obj.foo); 113 114// calls __put__ 115obj.foo = 33; 116 117// calls __call__ 118obj.func("hello", "world"); 119 120// calls __new__ 121new obj("hey!", "it works!"); 122 123// calls __getKeys__ 124for (i in obj) { 125 print(i); 126} 127 128// calls __getValues__ 129for each (i in obj) { 130 print(i); 131} 132 133// calls __has__ 134var x = "foo" in obj; 135print(x); 136 137// calls __has__ 138var y = "js" in obj; 139print(y); 140 141// calls __delete__ 142print(delete obj.prop); 143 144// call __get__ and __set__ 145print(obj["js"]); 146obj["js"] = "javascript"; 147print(obj["javascript"]); 148 149// call __isExtensible__, __isSealed__, __isFrozen__ 150print(Object.isExtensible(obj)); 151print(Object.isSealed(obj)); 152print(Object.isFrozen(obj)); 153 154// call __freeze__, __seal__, __preventExtensions__ 155Object.freeze(obj); 156Object.seal(obj); 157Object.preventExtensions(obj); 158