1b95b98b0c30bcd40b657aa45f6cd75a46a4772adfschneider@chromium.org// Copyright 2010 the V8 project authors. All rights reserved. 2b95b98b0c30bcd40b657aa45f6cd75a46a4772adfschneider@chromium.org// Redistribution and use in source and binary forms, with or without 3b95b98b0c30bcd40b657aa45f6cd75a46a4772adfschneider@chromium.org// modification, are permitted provided that the following conditions are 4b95b98b0c30bcd40b657aa45f6cd75a46a4772adfschneider@chromium.org// met: 5b95b98b0c30bcd40b657aa45f6cd75a46a4772adfschneider@chromium.org// 6b95b98b0c30bcd40b657aa45f6cd75a46a4772adfschneider@chromium.org// * Redistributions of source code must retain the above copyright 7b95b98b0c30bcd40b657aa45f6cd75a46a4772adfschneider@chromium.org// notice, this list of conditions and the following disclaimer. 8b95b98b0c30bcd40b657aa45f6cd75a46a4772adfschneider@chromium.org// * Redistributions in binary form must reproduce the above 9b95b98b0c30bcd40b657aa45f6cd75a46a4772adfschneider@chromium.org// copyright notice, this list of conditions and the following 10b95b98b0c30bcd40b657aa45f6cd75a46a4772adfschneider@chromium.org// disclaimer in the documentation and/or other materials provided 11b95b98b0c30bcd40b657aa45f6cd75a46a4772adfschneider@chromium.org// with the distribution. 12b95b98b0c30bcd40b657aa45f6cd75a46a4772adfschneider@chromium.org// * Neither the name of Google Inc. nor the names of its 13b95b98b0c30bcd40b657aa45f6cd75a46a4772adfschneider@chromium.org// contributors may be used to endorse or promote products derived 14b95b98b0c30bcd40b657aa45f6cd75a46a4772adfschneider@chromium.org// from this software without specific prior written permission. 15b95b98b0c30bcd40b657aa45f6cd75a46a4772adfschneider@chromium.org// 16b95b98b0c30bcd40b657aa45f6cd75a46a4772adfschneider@chromium.org// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 17b95b98b0c30bcd40b657aa45f6cd75a46a4772adfschneider@chromium.org// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 18b95b98b0c30bcd40b657aa45f6cd75a46a4772adfschneider@chromium.org// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 19b95b98b0c30bcd40b657aa45f6cd75a46a4772adfschneider@chromium.org// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 20b95b98b0c30bcd40b657aa45f6cd75a46a4772adfschneider@chromium.org// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 21b95b98b0c30bcd40b657aa45f6cd75a46a4772adfschneider@chromium.org// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 22b95b98b0c30bcd40b657aa45f6cd75a46a4772adfschneider@chromium.org// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 23b95b98b0c30bcd40b657aa45f6cd75a46a4772adfschneider@chromium.org// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 24b95b98b0c30bcd40b657aa45f6cd75a46a4772adfschneider@chromium.org// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 25b95b98b0c30bcd40b657aa45f6cd75a46a4772adfschneider@chromium.org// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 26b95b98b0c30bcd40b657aa45f6cd75a46a4772adfschneider@chromium.org// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 27b95b98b0c30bcd40b657aa45f6cd75a46a4772adfschneider@chromium.org 281805e21b0aece8c05f4960a5c0751c4463557891fschneider@chromium.org// Tests that Object.defineProperty works correctly on array indices. 292c186ca6690a1cb19ec7584e71f167234587c87cwhesse@chromium.org// Please see http://code.google.com/p/v8/issues/detail?id=619 for details. 30b95b98b0c30bcd40b657aa45f6cd75a46a4772adfschneider@chromium.org 31b95b98b0c30bcd40b657aa45f6cd75a46a4772adfschneider@chromium.orgvar obj = {}; 32b95b98b0c30bcd40b657aa45f6cd75a46a4772adfschneider@chromium.orgobj[1] = 42; 33b95b98b0c30bcd40b657aa45f6cd75a46a4772adfschneider@chromium.orgassertEquals(42, obj[1]); 34b95b98b0c30bcd40b657aa45f6cd75a46a4772adfschneider@chromium.orgObject.defineProperty(obj, '1', {value:10, writable:false}); 35b95b98b0c30bcd40b657aa45f6cd75a46a4772adfschneider@chromium.orgassertEquals(10, obj[1]); 36b95b98b0c30bcd40b657aa45f6cd75a46a4772adfschneider@chromium.org 37b95b98b0c30bcd40b657aa45f6cd75a46a4772adfschneider@chromium.org// We should not be able to override obj[1]. 38b95b98b0c30bcd40b657aa45f6cd75a46a4772adfschneider@chromium.orgobj[1] = 5; 39b95b98b0c30bcd40b657aa45f6cd75a46a4772adfschneider@chromium.orgassertEquals(10, obj[1]); 40b95b98b0c30bcd40b657aa45f6cd75a46a4772adfschneider@chromium.org 41b95b98b0c30bcd40b657aa45f6cd75a46a4772adfschneider@chromium.org// Try on a range of numbers. 42b95b98b0c30bcd40b657aa45f6cd75a46a4772adfschneider@chromium.orgfor(var i = 0; i < 1024; i++) { 43b95b98b0c30bcd40b657aa45f6cd75a46a4772adfschneider@chromium.org obj[i] = 42; 44b95b98b0c30bcd40b657aa45f6cd75a46a4772adfschneider@chromium.org} 45b95b98b0c30bcd40b657aa45f6cd75a46a4772adfschneider@chromium.org 46b95b98b0c30bcd40b657aa45f6cd75a46a4772adfschneider@chromium.orgfor(var i = 0; i < 1024; i++) { 47b95b98b0c30bcd40b657aa45f6cd75a46a4772adfschneider@chromium.org Object.defineProperty(obj, i, {value: i, writable:false}); 48b95b98b0c30bcd40b657aa45f6cd75a46a4772adfschneider@chromium.org} 49b95b98b0c30bcd40b657aa45f6cd75a46a4772adfschneider@chromium.org 50b95b98b0c30bcd40b657aa45f6cd75a46a4772adfschneider@chromium.orgfor(var i = 0; i < 1024; i++) { 51b95b98b0c30bcd40b657aa45f6cd75a46a4772adfschneider@chromium.org assertEquals(i, obj[i]); 52b95b98b0c30bcd40b657aa45f6cd75a46a4772adfschneider@chromium.org} 53b95b98b0c30bcd40b657aa45f6cd75a46a4772adfschneider@chromium.org 54b95b98b0c30bcd40b657aa45f6cd75a46a4772adfschneider@chromium.orgfor(var i = 0; i < 1024; i++) { 55b95b98b0c30bcd40b657aa45f6cd75a46a4772adfschneider@chromium.org obj[1] = 5; 56b95b98b0c30bcd40b657aa45f6cd75a46a4772adfschneider@chromium.org} 57b95b98b0c30bcd40b657aa45f6cd75a46a4772adfschneider@chromium.org 58b95b98b0c30bcd40b657aa45f6cd75a46a4772adfschneider@chromium.orgfor(var i = 0; i < 1024; i++) { 59b95b98b0c30bcd40b657aa45f6cd75a46a4772adfschneider@chromium.org assertEquals(i, obj[i]); 60b95b98b0c30bcd40b657aa45f6cd75a46a4772adfschneider@chromium.org} 61b95b98b0c30bcd40b657aa45f6cd75a46a4772adfschneider@chromium.org 62