'use strict'; const common = require('../common'); const assert = require('node:assert'); const fs = require('node:fs'); function verifyStatFsObject(statfs, isBigint = false) { const valueType = isBigint ? 'bigint' : 'number'; [ 'type', 'bsize', 'blocks', 'bfree', 'bavail', 'files', 'ffree', ].forEach((k) => { assert.ok(Object.hasOwn(statfs, k)); assert.strictEqual(typeof statfs[k], valueType, `${k} should be a ${valueType}`); }); } fs.statfs(__filename, common.mustSucceed(function(stats) { verifyStatFsObject(stats); assert.strictEqual(this, undefined); })); fs.statfs(__filename, { bigint: true }, function(err, stats) { assert.ifError(err); verifyStatFsObject(stats, true); assert.strictEqual(this, undefined); }); // Synchronous { const statFsObj = fs.statfsSync(__filename); verifyStatFsObject(statFsObj); } // Synchronous Bigint { const statFsBigIntObj = fs.statfsSync(__filename, { bigint: true }); verifyStatFsObject(statFsBigIntObj, true); } [false, 1, {}, [], null, undefined].forEach((input) => { assert.throws( () => fs.statfs(input, common.mustNotCall()), { code: 'ERR_INVALID_ARG_TYPE', name: 'TypeError' } ); assert.throws( () => fs.statfsSync(input), { code: 'ERR_INVALID_ARG_TYPE', name: 'TypeError' } ); }); // Should not throw an error fs.statfs(__filename, undefined, common.mustCall());