11cb0ef41Sopenharmony_ci'use strict'; 21cb0ef41Sopenharmony_ciconst common = require('../common'); 31cb0ef41Sopenharmony_ciconst assert = require('assert'); 41cb0ef41Sopenharmony_ciconst child_process = require('child_process'); 51cb0ef41Sopenharmony_ci 61cb0ef41Sopenharmony_ciif (common.isWindows) 71cb0ef41Sopenharmony_ci common.skip('fs.closeSync(n) does not close stdio on Windows'); 81cb0ef41Sopenharmony_ci 91cb0ef41Sopenharmony_cifunction runTest(fd, streamName, testOutputStream, expectedName) { 101cb0ef41Sopenharmony_ci const result = child_process.spawnSync(process.execPath, [ 111cb0ef41Sopenharmony_ci '--expose-internals', 121cb0ef41Sopenharmony_ci '--no-warnings', 131cb0ef41Sopenharmony_ci '-e', 141cb0ef41Sopenharmony_ci `const { internalBinding } = require('internal/test/binding'); 151cb0ef41Sopenharmony_ci internalBinding('process_methods').resetStdioForTesting(); 161cb0ef41Sopenharmony_ci fs.closeSync(${fd}); 171cb0ef41Sopenharmony_ci const ctorName = process.${streamName}.constructor.name; 181cb0ef41Sopenharmony_ci process.${testOutputStream}.write(ctorName); 191cb0ef41Sopenharmony_ci `]); 201cb0ef41Sopenharmony_ci assert.strictEqual(result[testOutputStream].toString(), expectedName, 211cb0ef41Sopenharmony_ci `stdout:\n${result.stdout}\nstderr:\n${result.stderr}\n` + 221cb0ef41Sopenharmony_ci `while running test with fd = ${fd}`); 231cb0ef41Sopenharmony_ci if (testOutputStream !== 'stderr') 241cb0ef41Sopenharmony_ci assert.strictEqual(result.stderr.toString(), ''); 251cb0ef41Sopenharmony_ci} 261cb0ef41Sopenharmony_ci 271cb0ef41Sopenharmony_cirunTest(0, 'stdin', 'stdout', 'Readable'); 281cb0ef41Sopenharmony_cirunTest(1, 'stdout', 'stderr', 'Writable'); 291cb0ef41Sopenharmony_cirunTest(2, 'stderr', 'stdout', 'Writable'); 30