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