mirror of https://github.com/tc39/test262.git
[explicit-resource-management] Add adopt and defer
This CL adds adopt() and defer() to DisposableStack prototype. Bug: 42203506 Change-Id: I556b96a0cf42595acdd483b0a02aef9ca41bd0bc Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/5512877 Reviewed-by: Simon Zünd <szuend@chromium.org> Commit-Queue: Rezvan Mahdavi Hezaveh <rezvan@chromium.org> Reviewed-by: Shu-yu Guo <syg@chromium.org> Cr-Commit-Position: refs/heads/main@{#93930}
This commit is contained in:
parent
8b6b0f516d
commit
081808bebd
|
@ -0,0 +1,84 @@
|
||||||
|
// Copyright (C) 2024 the V8 project authors. All rights reserved.
|
||||||
|
// This code is governed by the BSD license found in the LICENSE file.
|
||||||
|
|
||||||
|
/*---
|
||||||
|
description: |
|
||||||
|
Test developer exposed DisposableStack protype methods adopt() and defer().
|
||||||
|
includes: [compareArray.js]
|
||||||
|
features: [explicit-resource-management]
|
||||||
|
---*/
|
||||||
|
|
||||||
|
// adopt() method on disposed stack --------
|
||||||
|
function TestDisposableStackAdoptOnDisposedStack() {
|
||||||
|
let stack = new DisposableStack();
|
||||||
|
stack.dispose();
|
||||||
|
stack.adopt(42, function(v) {return v});
|
||||||
|
};
|
||||||
|
assert.throws(
|
||||||
|
ReferenceError, () => TestDisposableStackUseOnDisposedStack(),
|
||||||
|
'Cannot add values to a disposed stack!');
|
||||||
|
|
||||||
|
// adopt() method when onDispose is not callable--------
|
||||||
|
function TestDisposableStackAdoptWithNonCallableOnDispose() {
|
||||||
|
let stack = new DisposableStack();
|
||||||
|
stack.adopt(42, 43);
|
||||||
|
};
|
||||||
|
assert.throws(
|
||||||
|
TypeError, () => TestDisposableStackAdoptWithNonCallableOnDispose(),
|
||||||
|
'onDispose is not callable');
|
||||||
|
|
||||||
|
// adopt() method --------
|
||||||
|
let valuesNormal = [];
|
||||||
|
|
||||||
|
(function TestDisposableStackAdopt() {
|
||||||
|
let stack = new DisposableStack();
|
||||||
|
stack.adopt(42, function(v) {valuesNormal.push(v)});
|
||||||
|
const disposable = {
|
||||||
|
value: 1,
|
||||||
|
[Symbol.dispose]() {
|
||||||
|
valuesNormal.push(43);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
stack.use(disposable);
|
||||||
|
stack.adopt(44, function(v) {valuesNormal.push(v)});
|
||||||
|
stack.dispose();
|
||||||
|
})();
|
||||||
|
assert.compareArray(valuesNormal, [44, 43, 42]);
|
||||||
|
|
||||||
|
// defer() method on disposed stack --------
|
||||||
|
function TestDisposableStackDeferOnDisposedStack() {
|
||||||
|
let stack = new DisposableStack();
|
||||||
|
stack.dispose();
|
||||||
|
stack.defer(() => console.log(42));
|
||||||
|
};
|
||||||
|
|
||||||
|
assert.throws(
|
||||||
|
ReferenceError, () => TestDisposableStackDeferOnDisposedStack(),
|
||||||
|
'Cannot add values to a disposed stack!');
|
||||||
|
|
||||||
|
// defer() method when onDispose is not callable--------
|
||||||
|
function TestDisposableStackDeferWithNonCallableOnDispose() {
|
||||||
|
let stack = new DisposableStack();
|
||||||
|
stack.defer(42);
|
||||||
|
};
|
||||||
|
assert.throws(
|
||||||
|
TypeError, () => TestDisposableStackDeferWithNonCallableOnDispose(),
|
||||||
|
'onDispose is not callable');
|
||||||
|
|
||||||
|
// defer() method --------
|
||||||
|
let deferValuesNormal = [];
|
||||||
|
|
||||||
|
(function TestDisposableStackAdopt() {
|
||||||
|
let stack = new DisposableStack();
|
||||||
|
stack.defer(() => deferValuesNormal.push(42));
|
||||||
|
const disposable = {
|
||||||
|
value: 1,
|
||||||
|
[Symbol.dispose]() {
|
||||||
|
deferValuesNormal.push(43);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
stack.use(disposable);
|
||||||
|
stack.defer(() => deferValuesNormal.push(44));
|
||||||
|
stack.dispose();
|
||||||
|
})();
|
||||||
|
assert.compareArray(deferValuesNormal, [44, 43, 42]);
|
Loading…
Reference in New Issue