17be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org// Copyright 2009 the V8 project authors. All rights reserved. 27be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org// Redistribution and use in source and binary forms, with or without 37be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org// modification, are permitted provided that the following conditions are 47be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org// met: 57be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org// 67be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org// * Redistributions of source code must retain the above copyright 77be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org// notice, this list of conditions and the following disclaimer. 87be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org// * Redistributions in binary form must reproduce the above 97be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org// copyright notice, this list of conditions and the following 107be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org// disclaimer in the documentation and/or other materials provided 117be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org// with the distribution. 127be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org// * Neither the name of Google Inc. nor the names of its 137be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org// contributors may be used to endorse or promote products derived 147be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org// from this software without specific prior written permission. 157be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org// 167be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 177be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 187be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 197be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 207be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 217be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 227be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 237be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 247be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 257be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 267be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 277be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org 287be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.orgvar obj = { 297be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org a: 7, 307be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org b: { x: 12, y: 24 }, 317be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org c: 'Zebra' 327be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org} 337be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org 347be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.orgassertEquals(7, obj.a); 357be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.orgassertEquals(12, obj.b.x); 367be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.orgassertEquals(24, obj.b.y); 377be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.orgassertEquals('Zebra', obj.c); 387be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org 397be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.orgvar z = 24; 407be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org 417be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.orgvar obj2 = { 427be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org a: 7, 437be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org b: { x: 12, y: z }, 447be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org c: 'Zebra' 457be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org} 467be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org 477be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.orgassertEquals(7, obj2.a); 487be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.orgassertEquals(12, obj2.b.x); 497be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.orgassertEquals(24, obj2.b.y); 507be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.orgassertEquals('Zebra', obj2.c); 517be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org 527be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.orgvar arr = []; 537be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.orgfor (var i = 0; i < 2; i++) { 547be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org arr[i] = { 557be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org a: 7, 567be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org b: { x: 12, y: 24 }, 577be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org c: 'Zebra' 587be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org } 597be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org} 607be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org 61bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.orgarr[0].b.x = 2; 62bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.orgassertEquals(2, arr[0].b.x); 63bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.orgassertEquals(12, arr[1].b.x); 64bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org 65bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org 66bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.orgfunction makeSparseArray() { 67bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org return { 68bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org '0': { x: 12, y: 24 }, 69bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org '1000000': { x: 0, y: 0 } 70bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org }; 71bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org} 72bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org 73bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.orgvar sa1 = makeSparseArray(); 74bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.orgsa1[0].x = 0; 75bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.orgvar sa2 = makeSparseArray(); 76bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.orgassertEquals(12, sa2[0].x); 77bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org 78bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org// Test that non-constant literals work. 79bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.orgvar n = new Object(); 80bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org 81bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.orgfunction makeNonConstantArray() { return [ [ n ] ]; } 82bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org 83bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.orgvar a = makeNonConstantArray(); 84bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.orga[0][0].foo = "bar"; 85bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.orgassertEquals("bar", n.foo); 86bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org 87bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.orgfunction makeNonConstantObject() { return { a: { b: n } }; } 88bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org 89bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.orga = makeNonConstantObject(); 90bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.orga.a.b.bar = "foo"; 91bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.orgassertEquals("foo", n.bar); 92bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org 93bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org// Test that exceptions for regexps still hold. 94bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.orgfunction makeRegexpInArray() { return [ [ /a*/, {} ] ]; } 95bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org 96bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.orga = makeRegexpInArray(); 97bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.orgvar b = makeRegexpInArray(); 98c4e51ac6d26b42753a57a4a9e4a419243b50151clrn@chromium.orgassertFalse(a[0][0] === b[0][0]); 99bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.orgassertFalse(a[0][1] === b[0][1]); 100bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org 101bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.orgfunction makeRegexpInObject() { return { a: { b: /b*/, c: {} } }; } 102bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.orga = makeRegexpInObject(); 103bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.orgb = makeRegexpInObject(); 104c4e51ac6d26b42753a57a4a9e4a419243b50151clrn@chromium.orgassertFalse(a.a.b === b.a.b); 105bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.orgassertFalse(a.a.c === b.a.c); 106d3b3be0240773cedde121ab23064d32f2c50a74fsgjesse@chromium.org 107d3b3be0240773cedde121ab23064d32f2c50a74fsgjesse@chromium.org 1087b26015ac58e54e88f4214e248f772ad4f055477whesse@chromium.org// Test keywords are valid as property names in initializers and dot-access. 109d3b3be0240773cedde121ab23064d32f2c50a74fsgjesse@chromium.orgvar keywords = [ 110d3b3be0240773cedde121ab23064d32f2c50a74fsgjesse@chromium.org "break", 111d3b3be0240773cedde121ab23064d32f2c50a74fsgjesse@chromium.org "case", 112d3b3be0240773cedde121ab23064d32f2c50a74fsgjesse@chromium.org "catch", 113d3b3be0240773cedde121ab23064d32f2c50a74fsgjesse@chromium.org "const", 114d3b3be0240773cedde121ab23064d32f2c50a74fsgjesse@chromium.org "continue", 115d3b3be0240773cedde121ab23064d32f2c50a74fsgjesse@chromium.org "debugger", 116d3b3be0240773cedde121ab23064d32f2c50a74fsgjesse@chromium.org "default", 117d3b3be0240773cedde121ab23064d32f2c50a74fsgjesse@chromium.org "delete", 118d3b3be0240773cedde121ab23064d32f2c50a74fsgjesse@chromium.org "do", 119d3b3be0240773cedde121ab23064d32f2c50a74fsgjesse@chromium.org "else", 120d3b3be0240773cedde121ab23064d32f2c50a74fsgjesse@chromium.org "false", 121d3b3be0240773cedde121ab23064d32f2c50a74fsgjesse@chromium.org "finally", 122d3b3be0240773cedde121ab23064d32f2c50a74fsgjesse@chromium.org "for", 123d3b3be0240773cedde121ab23064d32f2c50a74fsgjesse@chromium.org "function", 124d3b3be0240773cedde121ab23064d32f2c50a74fsgjesse@chromium.org "if", 125d3b3be0240773cedde121ab23064d32f2c50a74fsgjesse@chromium.org "in", 126d3b3be0240773cedde121ab23064d32f2c50a74fsgjesse@chromium.org "instanceof", 127d3b3be0240773cedde121ab23064d32f2c50a74fsgjesse@chromium.org "new", 128d3b3be0240773cedde121ab23064d32f2c50a74fsgjesse@chromium.org "null", 129d3b3be0240773cedde121ab23064d32f2c50a74fsgjesse@chromium.org "return", 130d3b3be0240773cedde121ab23064d32f2c50a74fsgjesse@chromium.org "switch", 131d3b3be0240773cedde121ab23064d32f2c50a74fsgjesse@chromium.org "this", 132d3b3be0240773cedde121ab23064d32f2c50a74fsgjesse@chromium.org "throw", 133d3b3be0240773cedde121ab23064d32f2c50a74fsgjesse@chromium.org "true", 134d3b3be0240773cedde121ab23064d32f2c50a74fsgjesse@chromium.org "try", 135d3b3be0240773cedde121ab23064d32f2c50a74fsgjesse@chromium.org "typeof", 136d3b3be0240773cedde121ab23064d32f2c50a74fsgjesse@chromium.org "var", 137d3b3be0240773cedde121ab23064d32f2c50a74fsgjesse@chromium.org "void", 138d3b3be0240773cedde121ab23064d32f2c50a74fsgjesse@chromium.org "while", 1397b26015ac58e54e88f4214e248f772ad4f055477whesse@chromium.org "with" 140d3b3be0240773cedde121ab23064d32f2c50a74fsgjesse@chromium.org]; 141d3b3be0240773cedde121ab23064d32f2c50a74fsgjesse@chromium.org 142d3b3be0240773cedde121ab23064d32f2c50a74fsgjesse@chromium.orgfunction testKeywordProperty(keyword) { 143d2be901879306d8ff27e78e37783028d581d46fcricow@chromium.org var exception = false; 144d3b3be0240773cedde121ab23064d32f2c50a74fsgjesse@chromium.org try { 145d3b3be0240773cedde121ab23064d32f2c50a74fsgjesse@chromium.org // Sanity check that what we get is a keyword. 146d3b3be0240773cedde121ab23064d32f2c50a74fsgjesse@chromium.org eval("var " + keyword + " = 42;"); 147d2be901879306d8ff27e78e37783028d581d46fcricow@chromium.org } catch (e) { 148d2be901879306d8ff27e78e37783028d581d46fcricow@chromium.org exception = true; 149d2be901879306d8ff27e78e37783028d581d46fcricow@chromium.org } 150d2be901879306d8ff27e78e37783028d581d46fcricow@chromium.org assertTrue(exception); 15126c16f8ef35ec25d36420512a4ceaa74ea2e2b05vegorov@chromium.org 152d3b3be0240773cedde121ab23064d32f2c50a74fsgjesse@chromium.org // Simple property, read and write. 153d3b3be0240773cedde121ab23064d32f2c50a74fsgjesse@chromium.org var x = eval("({" + keyword + ": 42})"); 154d3b3be0240773cedde121ab23064d32f2c50a74fsgjesse@chromium.org assertEquals(42, x[keyword]); 155d3b3be0240773cedde121ab23064d32f2c50a74fsgjesse@chromium.org assertEquals(42, eval("x." + keyword)); 156d3b3be0240773cedde121ab23064d32f2c50a74fsgjesse@chromium.org eval("x." + keyword + " = 37"); 157d3b3be0240773cedde121ab23064d32f2c50a74fsgjesse@chromium.org assertEquals(37, x[keyword]); 158d3b3be0240773cedde121ab23064d32f2c50a74fsgjesse@chromium.org assertEquals(37, eval("x." + keyword)); 15926c16f8ef35ec25d36420512a4ceaa74ea2e2b05vegorov@chromium.org 160d3b3be0240773cedde121ab23064d32f2c50a74fsgjesse@chromium.org // Getter/setter property, read and write. 161d3b3be0240773cedde121ab23064d32f2c50a74fsgjesse@chromium.org var y = eval("({value : 42, get " + keyword + "(){return this.value}," + 162d3b3be0240773cedde121ab23064d32f2c50a74fsgjesse@chromium.org " set " + keyword + "(v) { this.value = v; }})"); 163d3b3be0240773cedde121ab23064d32f2c50a74fsgjesse@chromium.org assertEquals(42, y[keyword]); 164d3b3be0240773cedde121ab23064d32f2c50a74fsgjesse@chromium.org assertEquals(42, eval("y." + keyword)); 165d3b3be0240773cedde121ab23064d32f2c50a74fsgjesse@chromium.org eval("y." + keyword + " = 37"); 166d3b3be0240773cedde121ab23064d32f2c50a74fsgjesse@chromium.org assertEquals(37, y[keyword]); 167d3b3be0240773cedde121ab23064d32f2c50a74fsgjesse@chromium.org assertEquals(37, eval("y." + keyword)); 16826c16f8ef35ec25d36420512a4ceaa74ea2e2b05vegorov@chromium.org 169d3b3be0240773cedde121ab23064d32f2c50a74fsgjesse@chromium.org // Quoted keyword works is read back by unquoted as well. 170d3b3be0240773cedde121ab23064d32f2c50a74fsgjesse@chromium.org var z = eval("({\"" + keyword + "\": 42})"); 171d3b3be0240773cedde121ab23064d32f2c50a74fsgjesse@chromium.org assertEquals(42, z[keyword]); 172d3b3be0240773cedde121ab23064d32f2c50a74fsgjesse@chromium.org assertEquals(42, eval("z." + keyword)); 17326c16f8ef35ec25d36420512a4ceaa74ea2e2b05vegorov@chromium.org 174d3b3be0240773cedde121ab23064d32f2c50a74fsgjesse@chromium.org // Function property, called. 175d3b3be0240773cedde121ab23064d32f2c50a74fsgjesse@chromium.org var was_called; 176d3b3be0240773cedde121ab23064d32f2c50a74fsgjesse@chromium.org function test_call() { this.was_called = true; was_called = true; } 177d3b3be0240773cedde121ab23064d32f2c50a74fsgjesse@chromium.org var w = eval("({" + keyword + ": test_call, was_called: false})"); 178d3b3be0240773cedde121ab23064d32f2c50a74fsgjesse@chromium.org eval("w." + keyword + "();"); 179d3b3be0240773cedde121ab23064d32f2c50a74fsgjesse@chromium.org assertTrue(was_called); 180d3b3be0240773cedde121ab23064d32f2c50a74fsgjesse@chromium.org assertTrue(w.was_called); 181d3b3be0240773cedde121ab23064d32f2c50a74fsgjesse@chromium.org 182d3b3be0240773cedde121ab23064d32f2c50a74fsgjesse@chromium.org // Function property, constructed. 183d3b3be0240773cedde121ab23064d32f2c50a74fsgjesse@chromium.org function construct() { this.constructed = true; } 184d3b3be0240773cedde121ab23064d32f2c50a74fsgjesse@chromium.org var v = eval("({" + keyword + ": construct})"); 185d3b3be0240773cedde121ab23064d32f2c50a74fsgjesse@chromium.org var vo = eval("new v." + keyword + "()"); 186d3b3be0240773cedde121ab23064d32f2c50a74fsgjesse@chromium.org assertTrue(vo instanceof construct); 187d3b3be0240773cedde121ab23064d32f2c50a74fsgjesse@chromium.org assertTrue(vo.constructed); 188d3b3be0240773cedde121ab23064d32f2c50a74fsgjesse@chromium.org} 189d3b3be0240773cedde121ab23064d32f2c50a74fsgjesse@chromium.org 190d3b3be0240773cedde121ab23064d32f2c50a74fsgjesse@chromium.orgfor (var i = 0; i < keywords.length; i++) { 191d3b3be0240773cedde121ab23064d32f2c50a74fsgjesse@chromium.org testKeywordProperty(keywords[i]); 192d2be901879306d8ff27e78e37783028d581d46fcricow@chromium.org} 193a8702c210b949f35c64d8e4aa01bb6d525086c85machenbach@chromium.org 194a8702c210b949f35c64d8e4aa01bb6d525086c85machenbach@chromium.org 195a8702c210b949f35c64d8e4aa01bb6d525086c85machenbach@chromium.org(function TestNumericNames() { 196a8702c210b949f35c64d8e4aa01bb6d525086c85machenbach@chromium.org var o = { 197a8702c210b949f35c64d8e4aa01bb6d525086c85machenbach@chromium.org 1: 1, 198a8702c210b949f35c64d8e4aa01bb6d525086c85machenbach@chromium.org 2.: 2, 199a8702c210b949f35c64d8e4aa01bb6d525086c85machenbach@chromium.org 3.0: 3, 200a8702c210b949f35c64d8e4aa01bb6d525086c85machenbach@chromium.org 4e0: 4, 201a8702c210b949f35c64d8e4aa01bb6d525086c85machenbach@chromium.org 5E0: 5, 202a8702c210b949f35c64d8e4aa01bb6d525086c85machenbach@chromium.org 6e-0: 6, 203a8702c210b949f35c64d8e4aa01bb6d525086c85machenbach@chromium.org 7E-0: 7, 204a8702c210b949f35c64d8e4aa01bb6d525086c85machenbach@chromium.org 0x8: 8, 205a8702c210b949f35c64d8e4aa01bb6d525086c85machenbach@chromium.org 0X9: 9, 206a8702c210b949f35c64d8e4aa01bb6d525086c85machenbach@chromium.org } 207a8702c210b949f35c64d8e4aa01bb6d525086c85machenbach@chromium.org assertEquals(['1', '2', '3', '4', '5', '6', '7', '8', '9'], Object.keys(o)); 208a8702c210b949f35c64d8e4aa01bb6d525086c85machenbach@chromium.org 209a8702c210b949f35c64d8e4aa01bb6d525086c85machenbach@chromium.org o = { 210a8702c210b949f35c64d8e4aa01bb6d525086c85machenbach@chromium.org 1.2: 1.2, 211a8702c210b949f35c64d8e4aa01bb6d525086c85machenbach@chromium.org 1.30: 1.3 212a8702c210b949f35c64d8e4aa01bb6d525086c85machenbach@chromium.org }; 213a8702c210b949f35c64d8e4aa01bb6d525086c85machenbach@chromium.org assertEquals(['1.2', '1.3'], Object.keys(o)); 214a8702c210b949f35c64d8e4aa01bb6d525086c85machenbach@chromium.org})(); 215a8702c210b949f35c64d8e4aa01bb6d525086c85machenbach@chromium.org 216a8702c210b949f35c64d8e4aa01bb6d525086c85machenbach@chromium.org 217a8702c210b949f35c64d8e4aa01bb6d525086c85machenbach@chromium.orgfunction TestNumericNamesGetter(expectedKeys, object) { 218a8702c210b949f35c64d8e4aa01bb6d525086c85machenbach@chromium.org assertEquals(expectedKeys, Object.keys(object)); 219a8702c210b949f35c64d8e4aa01bb6d525086c85machenbach@chromium.org expectedKeys.forEach(function(key) { 220a8702c210b949f35c64d8e4aa01bb6d525086c85machenbach@chromium.org var descr = Object.getOwnPropertyDescriptor(object, key); 221a8702c210b949f35c64d8e4aa01bb6d525086c85machenbach@chromium.org assertEquals(key, descr.get.name); 222a8702c210b949f35c64d8e4aa01bb6d525086c85machenbach@chromium.org }); 223a8702c210b949f35c64d8e4aa01bb6d525086c85machenbach@chromium.org} 224a8702c210b949f35c64d8e4aa01bb6d525086c85machenbach@chromium.orgTestNumericNamesGetter(['1', '2', '3', '4', '5', '6', '7', '8', '9'], { 225a8702c210b949f35c64d8e4aa01bb6d525086c85machenbach@chromium.org get 1() {}, 226a8702c210b949f35c64d8e4aa01bb6d525086c85machenbach@chromium.org get 2.() {}, 227a8702c210b949f35c64d8e4aa01bb6d525086c85machenbach@chromium.org get 3.0() {}, 228a8702c210b949f35c64d8e4aa01bb6d525086c85machenbach@chromium.org get 4e0() {}, 229a8702c210b949f35c64d8e4aa01bb6d525086c85machenbach@chromium.org get 5E0() {}, 230a8702c210b949f35c64d8e4aa01bb6d525086c85machenbach@chromium.org get 6e-0() {}, 231a8702c210b949f35c64d8e4aa01bb6d525086c85machenbach@chromium.org get 7E-0() {}, 232a8702c210b949f35c64d8e4aa01bb6d525086c85machenbach@chromium.org get 0x8() {}, 233a8702c210b949f35c64d8e4aa01bb6d525086c85machenbach@chromium.org get 0X9() {}, 234a8702c210b949f35c64d8e4aa01bb6d525086c85machenbach@chromium.org}); 235a8702c210b949f35c64d8e4aa01bb6d525086c85machenbach@chromium.orgTestNumericNamesGetter(['1.2', '1.3'], { 236a8702c210b949f35c64d8e4aa01bb6d525086c85machenbach@chromium.org get 1.2() {}, 237a8702c210b949f35c64d8e4aa01bb6d525086c85machenbach@chromium.org get 1.30() {} 238a8702c210b949f35c64d8e4aa01bb6d525086c85machenbach@chromium.org}); 239a8702c210b949f35c64d8e4aa01bb6d525086c85machenbach@chromium.org 240a8702c210b949f35c64d8e4aa01bb6d525086c85machenbach@chromium.org 241a8702c210b949f35c64d8e4aa01bb6d525086c85machenbach@chromium.orgfunction TestNumericNamesSetter(expectedKeys, object) { 242a8702c210b949f35c64d8e4aa01bb6d525086c85machenbach@chromium.org assertEquals(expectedKeys, Object.keys(object)); 243a8702c210b949f35c64d8e4aa01bb6d525086c85machenbach@chromium.org expectedKeys.forEach(function(key) { 244a8702c210b949f35c64d8e4aa01bb6d525086c85machenbach@chromium.org var descr = Object.getOwnPropertyDescriptor(object, key); 245a8702c210b949f35c64d8e4aa01bb6d525086c85machenbach@chromium.org assertEquals(key, descr.set.name); 246a8702c210b949f35c64d8e4aa01bb6d525086c85machenbach@chromium.org }); 247a8702c210b949f35c64d8e4aa01bb6d525086c85machenbach@chromium.org} 248a8702c210b949f35c64d8e4aa01bb6d525086c85machenbach@chromium.orgTestNumericNamesSetter(['1', '2', '3', '4', '5', '6', '7', '8', '9'], { 249a8702c210b949f35c64d8e4aa01bb6d525086c85machenbach@chromium.org set 1(_) {}, 250a8702c210b949f35c64d8e4aa01bb6d525086c85machenbach@chromium.org set 2.(_) {}, 251a8702c210b949f35c64d8e4aa01bb6d525086c85machenbach@chromium.org set 3.0(_) {}, 252a8702c210b949f35c64d8e4aa01bb6d525086c85machenbach@chromium.org set 4e0(_) {}, 253a8702c210b949f35c64d8e4aa01bb6d525086c85machenbach@chromium.org set 5E0(_) {}, 254a8702c210b949f35c64d8e4aa01bb6d525086c85machenbach@chromium.org set 6e-0(_) {}, 255a8702c210b949f35c64d8e4aa01bb6d525086c85machenbach@chromium.org set 7E-0(_) {}, 256a8702c210b949f35c64d8e4aa01bb6d525086c85machenbach@chromium.org set 0x8(_) {}, 257a8702c210b949f35c64d8e4aa01bb6d525086c85machenbach@chromium.org set 0X9(_) {}, 258a8702c210b949f35c64d8e4aa01bb6d525086c85machenbach@chromium.org}); 259a8702c210b949f35c64d8e4aa01bb6d525086c85machenbach@chromium.orgTestNumericNamesSetter(['1.2', '1.3'], { 260a8702c210b949f35c64d8e4aa01bb6d525086c85machenbach@chromium.org set 1.2(_) {; }, 261a8702c210b949f35c64d8e4aa01bb6d525086c85machenbach@chromium.org set 1.30(_) {; } 262a8702c210b949f35c64d8e4aa01bb6d525086c85machenbach@chromium.org}); 263