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  * NASHORN-256 : should be able to delete global builtin objects like JSON, Math etc.
  26  *
  27  * @test
  28  * @run
  29  */
  30 
  31 function deleteAndCheck(name) {
  32     if (! (delete this[name])) {
  33         fail("cannot delete " + name);
  34     } else {
  35         if (typeof this[name] !== 'undefined') {
  36             fail(name + " is not undefined after delete!");
  37         }
  38     }
  39 }
  40 
  41 deleteAndCheck("Object");
  42 deleteAndCheck("Function");
  43 deleteAndCheck("Array");
  44 deleteAndCheck("Boolean");
  45 deleteAndCheck("Date");
  46 deleteAndCheck("JSON");
  47 deleteAndCheck("JSAdapter");
  48 deleteAndCheck("Math");
  49 deleteAndCheck("Number");
  50 deleteAndCheck("RegExp");
  51 deleteAndCheck("String");
  52 deleteAndCheck("Error");
  53 deleteAndCheck("Error");
  54 deleteAndCheck("RangeError");
  55 deleteAndCheck("ReferenceError");
  56 deleteAndCheck("SyntaxError");
  57 deleteAndCheck("TypeError");
  58 deleteAndCheck("URIError");
  59 
  60 function deleteFailCheck(name) {
  61     if (delete this[name]) {
  62         fail("can delete " + name);
  63     } else {
  64         if (typeof this[name] === 'undefined') {
  65             fail(name + " was deleted!");
  66         }
  67     }
  68 }
  69 
  70 deleteFailCheck("NaN");
  71 deleteFailCheck("Infinity");
  72 if (delete undefined) {
  73     fail("can delete 'undefined'");
  74 }