13ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// Copyright 2011 the V8 project authors. All rights reserved. 23ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// Redistribution and use in source and binary forms, with or without 33ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// modification, are permitted provided that the following conditions are 43ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// met: 53ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// 63ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// * Redistributions of source code must retain the above copyright 73ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// notice, this list of conditions and the following disclaimer. 83ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// * Redistributions in binary form must reproduce the above 93ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// copyright notice, this list of conditions and the following 103ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// disclaimer in the documentation and/or other materials provided 113ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// with the distribution. 123ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// * Neither the name of Google Inc. nor the names of its 133ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// contributors may be used to endorse or promote products derived 143ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// from this software without specific prior written permission. 153ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// 163ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 173ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 183ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 193ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 203ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 213ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 223ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 233ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 243ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 253ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 263ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 273ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 283ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// Test that Object.prototype.propertyIsEnumerable handles array indices 293ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// correctly. 303ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 313ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochvar p = Object.create({}, { 323ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch a : { value : 42, enumerable : true }, 333ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch b : { value : 42, enumerable : false }, 343ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1 : { value : 42, enumerable : true }, 353ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 2 : { value : 42, enumerable : false }, 363ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch f : { get: function(){}, enumerable: true }, 373ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch g : { get: function(){}, enumerable: false }, 383ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 11 : { get: function(){}, enumerable: true }, 393ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 12 : { get: function(){}, enumerable: false } 403ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch}); 413ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochvar o = Object.create(p, { 423ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch c : { value : 42, enumerable : true }, 433ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch d : { value : 42, enumerable : false }, 443ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 3 : { value : 42, enumerable : true }, 453ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 4 : { value : 42, enumerable : false }, 463ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch h : { get: function(){}, enumerable: true }, 473ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch k : { get: function(){}, enumerable: false }, 483ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 13 : { get: function(){}, enumerable: true }, 493ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 14 : { get: function(){}, enumerable: false } 503ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch}); 513ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 523ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// Inherited properties are ignored. 533ef787dbeca8a5fb1086949cda830dccee07bfbdBen MurdochassertFalse(o.propertyIsEnumerable("a")); 543ef787dbeca8a5fb1086949cda830dccee07bfbdBen MurdochassertFalse(o.propertyIsEnumerable("b")); 553ef787dbeca8a5fb1086949cda830dccee07bfbdBen MurdochassertFalse(o.propertyIsEnumerable("1")); 563ef787dbeca8a5fb1086949cda830dccee07bfbdBen MurdochassertFalse(o.propertyIsEnumerable("2")); 573ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 583ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// Own properties. 593ef787dbeca8a5fb1086949cda830dccee07bfbdBen MurdochassertTrue(o.propertyIsEnumerable("c")); 603ef787dbeca8a5fb1086949cda830dccee07bfbdBen MurdochassertFalse(o.propertyIsEnumerable("d")); 613ef787dbeca8a5fb1086949cda830dccee07bfbdBen MurdochassertTrue(o.propertyIsEnumerable("3")); 623ef787dbeca8a5fb1086949cda830dccee07bfbdBen MurdochassertFalse(o.propertyIsEnumerable("4")); 633ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 643ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// Inherited accessors. 653ef787dbeca8a5fb1086949cda830dccee07bfbdBen MurdochassertFalse(o.propertyIsEnumerable("f")); 663ef787dbeca8a5fb1086949cda830dccee07bfbdBen MurdochassertFalse(o.propertyIsEnumerable("g")); 673ef787dbeca8a5fb1086949cda830dccee07bfbdBen MurdochassertFalse(o.propertyIsEnumerable("11")); 683ef787dbeca8a5fb1086949cda830dccee07bfbdBen MurdochassertFalse(o.propertyIsEnumerable("12")); 693ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 703ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// Own accessors. 713ef787dbeca8a5fb1086949cda830dccee07bfbdBen MurdochassertTrue(o.propertyIsEnumerable("h")); 723ef787dbeca8a5fb1086949cda830dccee07bfbdBen MurdochassertFalse(o.propertyIsEnumerable("k")); 733ef787dbeca8a5fb1086949cda830dccee07bfbdBen MurdochassertTrue(o.propertyIsEnumerable("13")); 743ef787dbeca8a5fb1086949cda830dccee07bfbdBen MurdochassertFalse(o.propertyIsEnumerable("14")); 753ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 763ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// Nonexisting properties. 773ef787dbeca8a5fb1086949cda830dccee07bfbdBen MurdochassertFalse(o.propertyIsEnumerable("xxx")); 783ef787dbeca8a5fb1086949cda830dccee07bfbdBen MurdochassertFalse(o.propertyIsEnumerable("999")); 793ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 803ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// String object properties. 813ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochvar o = Object("string"); 823ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// Non-string property on String object. 833ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdocho[10] = 42; 843ef787dbeca8a5fb1086949cda830dccee07bfbdBen MurdochassertTrue(o.propertyIsEnumerable(10)); 853ef787dbeca8a5fb1086949cda830dccee07bfbdBen MurdochassertFalse(o.propertyIsEnumerable(0)); 863ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 873ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// Fast elements. 883ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochvar o = [1,2,3,4,5]; 893ef787dbeca8a5fb1086949cda830dccee07bfbdBen MurdochassertTrue(o.propertyIsEnumerable(3)); 90