mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-16 23:05:42 +00:00
Bug 1486584 - Update test262 sort-tonumber.js. r=jorendorff
This commit is contained in:
parent
780ed8d1ec
commit
4cf62bfab3
@ -1,29 +0,0 @@
|
||||
var BUGNUMBER = 230216;
|
||||
var summary = 'Ensure ToNumber is called on the result of compareFn inside TypedArray.prototype.sort';
|
||||
|
||||
printBugNumber(BUGNUMBER);
|
||||
printStatus(summary);
|
||||
|
||||
var ta = new Int32Array(4);
|
||||
var ab = ta.buffer;
|
||||
|
||||
var called = false;
|
||||
try {
|
||||
ta.sort(function(a, b) {
|
||||
// IsDetachedBuffer is checked right after calling the compare function.
|
||||
// The order of operations is:
|
||||
// var tmp = compareFn(a, b)
|
||||
// var res = ToNumber(tmp)
|
||||
// if IsDetachedBuffer, throw TypeError
|
||||
// [...]
|
||||
// inspect `res` to determine sorting (calling ToNumber in the process)
|
||||
// So, detach the ArrayBuffer to throw, to make sure we're actually calling ToNumber immediately (as spec'd)
|
||||
detachArrayBuffer(ab);
|
||||
return {
|
||||
[Symbol.toPrimitive]() { called = true; }
|
||||
};
|
||||
});
|
||||
} catch (e) { }
|
||||
|
||||
if (typeof reportCompare === "function")
|
||||
reportCompare(true, called);
|
39
js/src/tests/test262/built-ins/TypedArray/prototype/sort/sort-tonumber.js
vendored
Normal file
39
js/src/tests/test262/built-ins/TypedArray/prototype/sort/sort-tonumber.js
vendored
Normal file
@ -0,0 +1,39 @@
|
||||
// Copyright (C) 2018 Mozilla Corporation. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
/*---
|
||||
esid: sec-%typedarray%.prototype.sort
|
||||
description: The result of compareFn is immediately passed through ToNumber
|
||||
info: |
|
||||
22.2.3.26 %TypedArray%.prototype.sort ( comparefn )
|
||||
|
||||
...
|
||||
2. If comparefn is not undefined, then
|
||||
a. Let v be ? ToNumber(? Call(comparefn, undefined, « x, y »)).
|
||||
b. If IsDetachedBuffer(buffer) is true, throw a TypeError exception.
|
||||
...
|
||||
...
|
||||
includes: [testTypedArray.js, detachArrayBuffer.js]
|
||||
features: [TypedArray]
|
||||
---*/
|
||||
|
||||
testWithTypedArrayConstructors(function(TA) {
|
||||
var ta = new TA(4);
|
||||
var ab = ta.buffer;
|
||||
|
||||
var called = false;
|
||||
assert.throws(TypeError, function() {
|
||||
ta.sort(function(a, b) {
|
||||
// IsDetachedBuffer is checked right after calling comparefn.
|
||||
// So, detach the ArrayBuffer to cause sort to throw, to make sure we're actually calling ToNumber immediately (as spec'd)
|
||||
// (a possible bug is to wait until the result is inspected to call ToNumber, rather than immediately)
|
||||
$DETACHBUFFER(ab);
|
||||
return {
|
||||
[Symbol.toPrimitive]() { called = true; }
|
||||
};
|
||||
});
|
||||
});
|
||||
|
||||
assert.sameValue(true, called);
|
||||
});
|
||||
|
||||
reportCompare(0, 0);
|
Loading…
Reference in New Issue
Block a user