Index: test/mjsunit/array-sort.js |
=================================================================== |
--- test/mjsunit/array-sort.js (revision 2131) |
+++ test/mjsunit/array-sort.js (working copy) |
@@ -214,6 +214,30 @@ |
TestNonArrayLongerLength(Math.pow(2,32) - 1); |
+function TestNonArrayWithAccessors() { |
+ // Regression test for issue 346, more info at URL |
+ // http://code.google.com/p/v8/issues/detail?id=346 |
+ // Reported by nth10sd, test based on this report. |
+ var x = {}; |
+ x[0] = 42; |
+ x.__defineGetter__("1", function(){return this.foo;}); |
+ x.__defineSetter__("1", function(val){this.foo = val;}); |
+ x[1] = 49 |
+ x[3] = 37; |
+ x.length = 4; |
+ Array.prototype.sort.call(x); |
+ // Behavior of sort with accessors is undefined. This accessor is |
+ // well-behaved (acts like a normal property), so it should work. |
+ assertEquals(4, x.length, "sortaccessors length"); |
+ assertEquals(37, x[0], "sortaccessors first"); |
+ assertEquals(42, x[1], "sortaccessors second"); |
+ assertEquals(49, x[2], "sortaccessors third") |
+ assertFalse(3 in x, "sortaccessors fourth"); |
+} |
+ |
+TestNonArrayWithAccessors(); |
+ |
+ |
function TestInheritedElementSort(depth) { |
var length = depth * 2 + 3; |
var obj = {length: length}; |
@@ -268,7 +292,7 @@ |
assertEquals(i, y[i], name + "value" + i); |
} |
for (var i = 10; i < length; i++) { |
- assertEquals(x.hasOwnProperty(i), y.hasOwnProperty(i), |
+ assertEquals(x.hasOwnProperty(i), y.hasOwnProperty(i), |
name + "hasundef" + i); |
assertEquals(undefined, y[i], name+"undefined"+i); |
if (x.hasOwnProperty(i)) { |
@@ -282,7 +306,7 @@ |
TestSparseInheritedElementSort(1000); |
function TestSpecialCasesInheritedElementSort() { |
- |
+ |
var x = { |
1:"d1", |
2:"c1", |
@@ -309,11 +333,11 @@ |
} |
}; |
Array.prototype.sort.call(x); |
- |
+ |
var name = "SpecialInherit-"; |
- |
+ |
assertEquals(10000, x.length, name + "length"); |
- var sorted = ["a2", "a3", "b1", "b2", "c1", "c2", "d1", "d2", "e3", |
+ var sorted = ["a2", "a3", "b1", "b2", "c1", "c2", "d1", "d2", "e3", |
undefined, undefined, undefined]; |
for (var i = 0; i < sorted.length; i++) { |
assertTrue(x.hasOwnProperty(i), name + "has" + i) |
@@ -321,7 +345,6 @@ |
} |
assertFalse(x.hasOwnProperty(sorted.length), name + "haspost"); |
assertFalse(sorted.length in x, name + "haspost2"); |
- |
assertTrue(x.hasOwnProperty(10), name + "hasundefined10"); |
assertEquals(undefined, x[10], name + "undefined10"); |
assertTrue(x.hasOwnProperty(100), name + "hasundefined100"); |
@@ -332,11 +355,8 @@ |
assertEquals(undefined, x[2000], name + "undefined2000"); |
assertTrue(x.hasOwnProperty(8000), name + "hasundefined8000"); |
assertEquals(undefined, x[8000], name + "undefined8000"); |
- |
assertFalse(x.hasOwnProperty(12000), name + "has12000"); |
assertEquals("XX", x[12000], name + "XX12000"); |
- |
} |
TestSpecialCasesInheritedElementSort(); |
- |