Home | History | Annotate | Download | only in mjsunit
      1 // Copyright 2009 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 var obj = {
     29     a: 7,
     30     b: { x: 12, y: 24 },
     31     c: 'Zebra'
     32 }
     33 
     34 assertEquals(7, obj.a);
     35 assertEquals(12, obj.b.x);
     36 assertEquals(24, obj.b.y);
     37 assertEquals('Zebra', obj.c);
     38 
     39 var z = 24;
     40 
     41 var obj2 = {
     42     a: 7,
     43     b: { x: 12, y: z },
     44     c: 'Zebra'
     45 }
     46 
     47 assertEquals(7, obj2.a);
     48 assertEquals(12, obj2.b.x);
     49 assertEquals(24, obj2.b.y);
     50 assertEquals('Zebra', obj2.c);
     51 
     52 var arr = [];
     53 for (var i = 0; i < 2; i++) {
     54   arr[i] = {
     55       a: 7,
     56       b: { x: 12, y: 24 },
     57       c: 'Zebra'
     58   }
     59 }
     60 
     61 arr[0].b.x = 2;
     62 assertEquals(2, arr[0].b.x);
     63 assertEquals(12, arr[1].b.x);
     64 
     65 
     66 function makeSparseArray() {
     67   return {
     68     '0': { x: 12, y: 24 },
     69     '1000000': { x: 0, y: 0 }
     70   };
     71 }
     72 
     73 var sa1 = makeSparseArray();
     74 sa1[0].x = 0;
     75 var sa2 = makeSparseArray();
     76 assertEquals(12, sa2[0].x);
     77 
     78 // Test that non-constant literals work.
     79 var n = new Object();
     80 
     81 function makeNonConstantArray() { return [ [ n ] ]; }
     82 
     83 var a = makeNonConstantArray();
     84 a[0][0].foo = "bar";
     85 assertEquals("bar", n.foo);
     86 
     87 function makeNonConstantObject() { return { a: { b: n } }; }
     88 
     89 a = makeNonConstantObject();
     90 a.a.b.bar = "foo";
     91 assertEquals("foo", n.bar);
     92 
     93 // Test that exceptions for regexps still hold.
     94 function makeRegexpInArray() { return [ [ /a*/, {} ] ]; }
     95 
     96 a = makeRegexpInArray();
     97 var b = makeRegexpInArray();
     98 assertTrue(a[0][0] === b[0][0]);
     99 assertFalse(a[0][1] === b[0][1]);
    100 
    101 function makeRegexpInObject() { return { a: { b: /b*/, c: {} } }; }
    102 a = makeRegexpInObject();
    103 b = makeRegexpInObject();
    104 assertTrue(a.a.b === b.a.b);
    105 assertFalse(a.a.c === b.a.c);
    106