| 'use strict'; |
| |
| require('../common'); |
| |
| const { |
| describe, |
| it, |
| } = require('node:test'); |
| |
| const { |
| strictEqual, |
| } = require('node:assert'); |
| |
| class Foo { |
| refCalled = 0; |
| unrefCalled = 0; |
| ref() { |
| this.refCalled++; |
| } |
| unref() { |
| this.unrefCalled++; |
| } |
| } |
| |
| class Foo2 { |
| refCalled = 0; |
| unrefCalled = 0; |
| [Symbol.for('nodejs.ref')]() { |
| this.refCalled++; |
| } |
| [Symbol.for('nodejs.unref')]() { |
| this.unrefCalled++; |
| } |
| } |
| |
| describe('process.ref/unref work as expected', () => { |
| it('refs...', () => { |
| // Objects that implement the new Symbol-based API |
| // just work. |
| const foo1 = new Foo(); |
| const foo2 = new Foo2(); |
| process.ref(foo1); |
| process.unref(foo1); |
| process.ref(foo2); |
| process.unref(foo2); |
| strictEqual(foo1.refCalled, 1); |
| strictEqual(foo1.unrefCalled, 1); |
| strictEqual(foo2.refCalled, 1); |
| strictEqual(foo2.unrefCalled, 1); |
| |
| // Objects that implement the legacy API also just work. |
| const i = setInterval(() => {}, 1000); |
| strictEqual(i.hasRef(), true); |
| process.unref(i); |
| strictEqual(i.hasRef(), false); |
| process.ref(i); |
| strictEqual(i.hasRef(), true); |
| clearInterval(i); |
| }); |
| }); |