14515c472dc3e5ed2448a564600976759e569a0a8Leon Clarke// Copyright 2010 the V8 project authors. All rights reserved. 24515c472dc3e5ed2448a564600976759e569a0a8Leon Clarke// Redistribution and use in source and binary forms, with or without 34515c472dc3e5ed2448a564600976759e569a0a8Leon Clarke// modification, are permitted provided that the following conditions are 44515c472dc3e5ed2448a564600976759e569a0a8Leon Clarke// met: 54515c472dc3e5ed2448a564600976759e569a0a8Leon Clarke// 64515c472dc3e5ed2448a564600976759e569a0a8Leon Clarke// * Redistributions of source code must retain the above copyright 74515c472dc3e5ed2448a564600976759e569a0a8Leon Clarke// notice, this list of conditions and the following disclaimer. 84515c472dc3e5ed2448a564600976759e569a0a8Leon Clarke// * Redistributions in binary form must reproduce the above 94515c472dc3e5ed2448a564600976759e569a0a8Leon Clarke// copyright notice, this list of conditions and the following 104515c472dc3e5ed2448a564600976759e569a0a8Leon Clarke// disclaimer in the documentation and/or other materials provided 114515c472dc3e5ed2448a564600976759e569a0a8Leon Clarke// with the distribution. 124515c472dc3e5ed2448a564600976759e569a0a8Leon Clarke// * Neither the name of Google Inc. nor the names of its 134515c472dc3e5ed2448a564600976759e569a0a8Leon Clarke// contributors may be used to endorse or promote products derived 144515c472dc3e5ed2448a564600976759e569a0a8Leon Clarke// from this software without specific prior written permission. 154515c472dc3e5ed2448a564600976759e569a0a8Leon Clarke// 164515c472dc3e5ed2448a564600976759e569a0a8Leon Clarke// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 174515c472dc3e5ed2448a564600976759e569a0a8Leon Clarke// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 184515c472dc3e5ed2448a564600976759e569a0a8Leon Clarke// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 194515c472dc3e5ed2448a564600976759e569a0a8Leon Clarke// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 204515c472dc3e5ed2448a564600976759e569a0a8Leon Clarke// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 214515c472dc3e5ed2448a564600976759e569a0a8Leon Clarke// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 224515c472dc3e5ed2448a564600976759e569a0a8Leon Clarke// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 234515c472dc3e5ed2448a564600976759e569a0a8Leon Clarke// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 244515c472dc3e5ed2448a564600976759e569a0a8Leon Clarke// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 254515c472dc3e5ed2448a564600976759e569a0a8Leon Clarke// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 264515c472dc3e5ed2448a564600976759e569a0a8Leon Clarke// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 274515c472dc3e5ed2448a564600976759e569a0a8Leon Clarke 284515c472dc3e5ed2448a564600976759e569a0a8Leon Clarkefunction props(x) { 294515c472dc3e5ed2448a564600976759e569a0a8Leon Clarke var result = []; 304515c472dc3e5ed2448a564600976759e569a0a8Leon Clarke for (var p in x) result.push(p); 314515c472dc3e5ed2448a564600976759e569a0a8Leon Clarke return result; 324515c472dc3e5ed2448a564600976759e569a0a8Leon Clarke} 334515c472dc3e5ed2448a564600976759e569a0a8Leon Clarke 344515c472dc3e5ed2448a564600976759e569a0a8Leon Clarkefunction A() { 354515c472dc3e5ed2448a564600976759e569a0a8Leon Clarke this.a1 = 1234; 364515c472dc3e5ed2448a564600976759e569a0a8Leon Clarke this.a2 = "D"; 374515c472dc3e5ed2448a564600976759e569a0a8Leon Clarke this.a3 = false; 384515c472dc3e5ed2448a564600976759e569a0a8Leon Clarke} 394515c472dc3e5ed2448a564600976759e569a0a8Leon Clarke 404515c472dc3e5ed2448a564600976759e569a0a8Leon Clarkefunction B() { 414515c472dc3e5ed2448a564600976759e569a0a8Leon Clarke this.b3 = false; 424515c472dc3e5ed2448a564600976759e569a0a8Leon Clarke this.b2 = "D"; 434515c472dc3e5ed2448a564600976759e569a0a8Leon Clarke this.b1 = 1234; 444515c472dc3e5ed2448a564600976759e569a0a8Leon Clarke} 454515c472dc3e5ed2448a564600976759e569a0a8Leon Clarke 464515c472dc3e5ed2448a564600976759e569a0a8Leon Clarkefunction C() { 474515c472dc3e5ed2448a564600976759e569a0a8Leon Clarke this.c3 = false; 484515c472dc3e5ed2448a564600976759e569a0a8Leon Clarke this.c1 = 1234; 494515c472dc3e5ed2448a564600976759e569a0a8Leon Clarke this.c2 = "D"; 504515c472dc3e5ed2448a564600976759e569a0a8Leon Clarke} 514515c472dc3e5ed2448a564600976759e569a0a8Leon Clarke 524515c472dc3e5ed2448a564600976759e569a0a8Leon ClarkeassertArrayEquals(["a1", "a2", "a3"], props(new A())); 534515c472dc3e5ed2448a564600976759e569a0a8Leon ClarkeassertArrayEquals(["b3", "b2", "b1"], props(new B())); 544515c472dc3e5ed2448a564600976759e569a0a8Leon ClarkeassertArrayEquals(["c3", "c1", "c2"], props(new C())); 554515c472dc3e5ed2448a564600976759e569a0a8Leon ClarkeassertArrayEquals(["s1", "s2", "s3"], props({s1: 0, s2: 0, s3: 0})); 564515c472dc3e5ed2448a564600976759e569a0a8Leon ClarkeassertArrayEquals(["s3", "s2", "s1"], props({s3: 0, s2: 0, s1: 0})); 574515c472dc3e5ed2448a564600976759e569a0a8Leon ClarkeassertArrayEquals(["s3", "s1", "s2"], props({s3: 0, s1: 0, s2: 0})); 584515c472dc3e5ed2448a564600976759e569a0a8Leon Clarke 594515c472dc3e5ed2448a564600976759e569a0a8Leon Clarkevar a = new A() 604515c472dc3e5ed2448a564600976759e569a0a8Leon Clarkea.a0 = 0; 614515c472dc3e5ed2448a564600976759e569a0a8Leon Clarkea.a4 = 0; 624515c472dc3e5ed2448a564600976759e569a0a8Leon ClarkeassertArrayEquals(["a1", "a2", "a3", "a0", "a4"], props(a)); 634515c472dc3e5ed2448a564600976759e569a0a8Leon Clarke 644515c472dc3e5ed2448a564600976759e569a0a8Leon Clarkevar b = new B() 654515c472dc3e5ed2448a564600976759e569a0a8Leon Clarkeb.b4 = 0; 664515c472dc3e5ed2448a564600976759e569a0a8Leon Clarkeb.b0 = 0; 674515c472dc3e5ed2448a564600976759e569a0a8Leon ClarkeassertArrayEquals(["b3", "b2", "b1", "b4", "b0"], props(b)); 684515c472dc3e5ed2448a564600976759e569a0a8Leon Clarke 694515c472dc3e5ed2448a564600976759e569a0a8Leon Clarkevar o1 = {s1: 0, s2: 0, s3: 0} 704515c472dc3e5ed2448a564600976759e569a0a8Leon Clarkeo1.s0 = 0; 714515c472dc3e5ed2448a564600976759e569a0a8Leon Clarkeo1.s4 = 0; 724515c472dc3e5ed2448a564600976759e569a0a8Leon ClarkeassertArrayEquals(["s1", "s2", "s3", "s0", "s4"], props(o1)); 734515c472dc3e5ed2448a564600976759e569a0a8Leon Clarke 744515c472dc3e5ed2448a564600976759e569a0a8Leon Clarkevar o2 = {s3: 0, s2: 0, s1: 0} 754515c472dc3e5ed2448a564600976759e569a0a8Leon Clarkeo2.s4 = 0; 764515c472dc3e5ed2448a564600976759e569a0a8Leon Clarkeo2.s0 = 0; 774515c472dc3e5ed2448a564600976759e569a0a8Leon ClarkeassertArrayEquals(["s3", "s2", "s1", "s4", "s0"], props(o2)); 78