// Flags: --expose-gc --no-warnings --expose-internals 'use strict'; const common = require('../common'); const assert = require('assert'); const path = require('path'); const { internalBinding } = require('internal/test/binding'); const fs = internalBinding('fs'); const { stringToFlags } = require('internal/fs/utils'); // Verifies that the FileHandle object is garbage collected and that a // warning is emitted if it is not closed. let fdnum; { const ctx = {}; fdnum = fs.openFileHandle(path.toNamespacedPath(__filename), stringToFlags('r'), 0o666, undefined, ctx).fd; assert.strictEqual(ctx.errno, undefined); } const deprecationWarning = 'Closing a FileHandle object on garbage collection is deprecated. ' + 'Please close FileHandle objects explicitly using ' + 'FileHandle.prototype.close(). In the future, an error will be ' + 'thrown if a file descriptor is closed during garbage collection.'; common.expectWarning({ 'internal/test/binding': [ 'These APIs are for internal testing only. Do not use them.', ], 'Warning': [ `Closing file descriptor ${fdnum} on garbage collection`, ], 'DeprecationWarning': [[deprecationWarning, 'DEP0137']] }); global.gc(); setTimeout(() => {}, 10);