123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161 |
- /**
- * @author Toru Nagashima
- * @copyright 2016 Toru Nagashima. All rights reserved.
- * See LICENSE file in root directory for full license.
- */
- 'use strict'
- // ------------------------------------------------------------------------------
- // Requirements
- // ------------------------------------------------------------------------------
- const cp = require('child_process')
- const fs = require('fs')
- const path = require('path')
- const BufferStream = require('./buffer-stream')
- // ------------------------------------------------------------------------------
- // Helpers
- // ------------------------------------------------------------------------------
- const FILE_NAME = 'test.txt'
- const NPM_RUN_ALL = path.resolve(__dirname, '../../bin/npm-run-all/index.js')
- const RUN_P = path.resolve(__dirname, '../../bin/run-p/index.js')
- const RUN_S = path.resolve(__dirname, '../../bin/run-s/index.js')
- /**
- * Spawns the given script with the given arguments.
- *
- * @param {string} filePath - The file path to be executed.
- * @param {string[]} args - The arguments to execute.
- * @param {Writable} [stdout] - The writable stream to receive stdout.
- * @param {Writable} [stderr] - The writable stream to receive stderr.
- * @returns {Promise<void>} The promise which becomes fulfilled if the child
- * process finished.
- */
- function spawn (filePath, args, stdout, stderr) {
- return new Promise((resolve, reject) => {
- const child = cp.spawn(
- process.execPath,
- [filePath].concat(args),
- { stdio: 'pipe' }
- )
- const out = new BufferStream()
- const error = new BufferStream()
- if (stdout != null) {
- child.stdout.pipe(stdout)
- }
- if (stderr != null) {
- child.stderr.pipe(stderr)
- } else {
- child.stderr.pipe(error)
- }
- child.stdout.pipe(out)
- child.on('close', (exitCode) => {
- if (exitCode) {
- reject(new Error(error.value || 'Exited with non-zero code.'))
- } else {
- resolve()
- }
- })
- child.on('error', reject)
- })
- }
- // ------------------------------------------------------------------------------
- // Public Interface
- // ------------------------------------------------------------------------------
- /**
- * Gets the result text from `test.txt`.
- *
- * @returns {string|null} The result text.
- */
- module.exports.result = function result () {
- try {
- return fs.readFileSync(FILE_NAME, { encoding: 'utf8' })
- } catch (err) {
- if (err.code === 'ENOENT') {
- return null
- }
- throw err
- }
- }
- /**
- * Appends text to `test.txt`.
- *
- * @param {string} content - A text to append.
- * @returns {void}
- */
- module.exports.appendResult = function appendResult (content) {
- fs.appendFileSync(FILE_NAME, content)
- }
- /**
- * Removes `test.txt`.
- *
- * @returns {void}
- */
- module.exports.removeResult = function removeResult () {
- try {
- fs.unlinkSync(FILE_NAME)
- } catch (err) {
- if (err.code === 'ENOENT') {
- return
- }
- throw err
- }
- }
- /**
- * Delay.
- *
- * @param {number} timeoutInMillis - The time to delay.
- * @returns {Promise<void>} The promise which fulfilled after the given time.
- */
- module.exports.delay = function delay (timeoutInMillis) {
- return new Promise(resolve => {
- setTimeout(resolve, timeoutInMillis)
- })
- }
- /**
- * Executes `npm-run-all` with the given arguments.
- *
- * @param {string[]} args - The arguments to execute.
- * @param {Writable} [stdout] - The writable stream to receive stdout.
- * @param {Writable} [stderr] - The writable stream to receive stderr.
- * @returns {Promise<void>} The promise which becomes fulfilled if the child
- * process finished.
- */
- module.exports.runAll = function runAll (args, stdout, stderr) {
- return spawn(NPM_RUN_ALL, args, stdout, stderr)
- }
- /**
- * Executes `run-p` with the given arguments.
- *
- * @param {string[]} args - The arguments to execute.
- * @param {Writable} [stdout] - The writable stream to receive stdout.
- * @param {Writable} [stderr] - The writable stream to receive stderr.
- * @returns {Promise<void>} The promise which becomes fulfilled if the child
- * process finished.
- */
- module.exports.runPar = function runPar (args, stdout, stderr) {
- return spawn(RUN_P, args, stdout, stderr)
- }
- /**
- * Executes `run-s` with the given arguments.
- *
- * @param {string[]} args - The arguments to execute.
- * @param {Writable} [stdout] - The writable stream to receive stdout.
- * @param {Writable} [stderr] - The writable stream to receive stderr.
- * @returns {Promise<void>} The promise which becomes fulfilled if the child
- * process finished.
- */
- module.exports.runSeq = function runSeq (args, stdout, stderr) {
- return spawn(RUN_S, args, stdout, stderr)
- }
|