1 /*
   2  * Copyright (c) 2010, 2013, 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  * Exercise all setters on standard objects.
  26  *
  27  * @test
  28  * @run
  29  */
  30 
  31 function checkGetterSetter(obj, expectError) {
  32     while (obj != undefined && obj != null) {
  33         var properties = Object.getOwnPropertyNames(obj);
  34         for (var i in properties) {
  35             var prop = properties[i];
  36             try {
  37                 if (!/\d.*/.test(prop)) {
  38                     eval("obj." + prop + " = " + "obj." + prop + ";");
  39                 }
  40                 obj[prop] = obj[prop];
  41             } catch (e) {
  42                 if (!expectError || !(e instanceof TypeError)) {
  43                     fail(e + ": " + obj.toString() +"." + prop, e);
  44                 }
  45             }
  46         }
  47         obj = Object.getPrototypeOf(obj);
  48     }
  49 }
  50 
  51 // objects
  52 checkGetterSetter([2, 23]);
  53 checkGetterSetter(new Boolean(true));
  54 checkGetterSetter(new Date(0));
  55 checkGetterSetter(new Error());
  56 checkGetterSetter(new EvalError());
  57 if (typeof JSAdapter != 'undefined') {
  58     checkGetterSetter(new JSAdapter({}));
  59 }
  60 if (typeof JavaImporter != 'undefined') {
  61     checkGetterSetter(new JavaImporter(java.io));
  62 }
  63 checkGetterSetter(function() {});
  64 checkGetterSetter(new Number(42));
  65 checkGetterSetter(new Object());
  66 checkGetterSetter(new RangeError());
  67 checkGetterSetter(new ReferenceError());
  68 checkGetterSetter(/nashorn/);
  69 checkGetterSetter(new String('hello'));
  70 checkGetterSetter(new SyntaxError());
  71 checkGetterSetter(new TypeError());
  72 checkGetterSetter(new URIError());
  73 
  74 // constructors and prototypes
  75 checkGetterSetter(Array);
  76 checkGetterSetter(Array.prototype);
  77 checkGetterSetter(Boolean);
  78 checkGetterSetter(Boolean.prototype);
  79 checkGetterSetter(Error);
  80 checkGetterSetter(Error.prototype);
  81 checkGetterSetter(EvalError);
  82 checkGetterSetter(EvalError.prototype);
  83 checkGetterSetter(Function);
  84 checkGetterSetter(Function.prototype);
  85 if (typeof JSAdapter != 'undefined') {
  86     checkGetterSetter(JSAdapter);
  87     checkGetterSetter(JSAdapter.prototype);
  88 }
  89 if (typeof JavaImporter != 'undefined') {
  90     checkGetterSetter(JavaImporter);
  91     checkGetterSetter(JavaImporter.prototype);
  92 }
  93 checkGetterSetter(Number);
  94 checkGetterSetter(Number.prototype);
  95 checkGetterSetter(Object);
  96 checkGetterSetter(Object.prototype);
  97 checkGetterSetter(RangeError);
  98 checkGetterSetter(RangeError.prototype);
  99 checkGetterSetter(ReferenceError);
 100 checkGetterSetter(ReferenceError.prototype);
 101 checkGetterSetter(RegExp);
 102 checkGetterSetter(RegExp.prototype);
 103 checkGetterSetter(String);
 104 checkGetterSetter(String.prototype);
 105 checkGetterSetter(SyntaxError);
 106 checkGetterSetter(SyntaxError.prototype);
 107 checkGetterSetter(TypeError);
 108 checkGetterSetter(TypeError.prototype);
 109 checkGetterSetter(URIError);
 110 checkGetterSetter(URIError.prototype);
 111 
 112 // misc. objects
 113 checkGetterSetter(this);
 114 
 115 if (typeof Packages != 'undefined') {
 116     checkGetterSetter(Packages);
 117     checkGetterSetter(java);
 118     checkGetterSetter(javax);
 119 }
 120 
 121 if (typeof Java != 'undefined') {
 122     checkGetterSetter(Java);
 123     checkGetterSetter(Java.prototype);
 124 }
 125 
 126 if (typeof Debug != 'undefined') {
 127     checkGetterSetter(Debug);
 128 }
 129 
 130 checkGetterSetter((function() { return arguments; })());
 131 // TypeError expected on certain property getter/setter for strict arguments
 132 checkGetterSetter((function() { 'use strict'; return arguments; })(), true);
 133 checkGetterSetter(JSON);
 134 checkGetterSetter(JSON.prototype);
 135 checkGetterSetter(Math);
 136 checkGetterSetter(Math.prototype);