Home | History | Annotate | Download | only in mjsunit
      1 // Copyright 2010 the V8 project authors. All rights reserved.
      2 // Redistribution and use in source and binary forms, with or without
      3 // modification, are permitted provided that the following conditions are
      4 // met:
      5 //
      6 //     * Redistributions of source code must retain the above copyright
      7 //       notice, this list of conditions and the following disclaimer.
      8 //     * Redistributions in binary form must reproduce the above
      9 //       copyright notice, this list of conditions and the following
     10 //       disclaimer in the documentation and/or other materials provided
     11 //       with the distribution.
     12 //     * Neither the name of Google Inc. nor the names of its
     13 //       contributors may be used to endorse or promote products derived
     14 //       from this software without specific prior written permission.
     15 //
     16 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
     17 // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
     18 // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
     19 // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
     20 // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
     21 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
     22 // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
     23 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
     24 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     25 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
     26 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     27 
     28 // Test that installing a getter on the global object instead of a
     29 // normal property works.
     30 
     31 x = 0;
     32 
     33 function getX() { return x; }
     34 
     35 for (var i = 0; i < 10; i++) {
     36   assertEquals(i < 5 ? 0 : 42, getX());
     37   if (i == 4) __defineGetter__("x", function() { return 42; });
     38 }
     39 
     40 
     41 // Test that installing a setter on the global object instead of a
     42 // normal property works.
     43 
     44 y = 0;
     45 var setter_y;
     46 
     47 function setY(value) { y = value; }
     48 
     49 for (var i = 0; i < 10; i++) {
     50   setY(i);
     51   assertEquals(i < 5 ? i : 2 * i, y);
     52   if (i == 4) {
     53     __defineSetter__("y", function(value) { setter_y = 2 * value; });
     54     __defineGetter__("y", function() { return setter_y; });
     55   }
     56 }
     57 
     58 
     59 // Test that replacing a getter with a normal property works as
     60 // expected.
     61 
     62 __defineGetter__("z", function() { return 42; });
     63 
     64 function getZ() { return z; }
     65 
     66 for (var i = 0; i < 10; i++) {
     67   assertEquals(i < 5 ? 42 : 0, getZ());
     68   if (i == 4) {
     69     delete z;
     70     z = 0;
     71   }
     72 }
     73