1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/addon-sdk/source/test/fixtures/child-process-scripts.js Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,81 @@ 1.4 +/* This Source Code Form is subject to the terms of the Mozilla Public 1.5 + * License, v. 2.0. If a copy of the MPL was not distributed with this 1.6 + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 1.7 + 1.8 +'use strict'; 1.9 + 1.10 +const { platform, pathFor } = require('sdk/system'); 1.11 +const { defer } = require('sdk/core/promise'); 1.12 +const { emit } = require('sdk/event/core'); 1.13 +const { join } = require('sdk/fs/path'); 1.14 +const { writeFile, unlinkSync, existsSync } = require('sdk/io/fs'); 1.15 +const PROFILE_DIR= pathFor('ProfD'); 1.16 +const isWindows = platform.toLowerCase().indexOf('win') === 0; 1.17 +const isOSX = platform.toLowerCase().indexOf('darwin') === 0; 1.18 + 1.19 +let scripts = { 1.20 + 'args.sh': 'echo $1 $2 $3 $4', 1.21 + 'args.bat': 'echo %1 %2 %3 %4', 1.22 + 'check-env.sh': 'echo $CHILD_PROCESS_ENV_TEST', 1.23 + 'check-env.bat': 'echo %CHILD_PROCESS_ENV_TEST%', 1.24 + 'check-pwd.sh': 'echo $PWD', 1.25 + 'check-pwd.bat': 'cd', 1.26 + 'large-err.sh': 'for n in `seq 0 $1` ; do echo "E" 1>&2; done', 1.27 + 'large-err-mac.sh': 'for ((i=0; i<$1; i=i+1)); do echo "E" 1>&2; done', 1.28 + 'large-err.bat': 'FOR /l %%i in (0,1,%1) DO echo "E" 1>&2', 1.29 + 'large-out.sh': 'for n in `seq 0 $1` ; do echo "O"; done', 1.30 + 'large-out-mac.sh': 'for ((i=0; i<$1; i=i+1)); do echo "O"; done', 1.31 + 'large-out.bat': 'FOR /l %%i in (0,1,%1) DO echo "O"', 1.32 + 'wait.sh': 'sleep 2', 1.33 + // Use `ping` to an invalid IP address because `timeout` isn't 1.34 + // on all environments? http://stackoverflow.com/a/1672349/1785755 1.35 + 'wait.bat': 'ping 1.1.1.1 -n 1 -w 2000 > nul' 1.36 +}; 1.37 + 1.38 +Object.keys(scripts).forEach(filename => { 1.39 + if (/\.sh$/.test(filename)) 1.40 + scripts[filename] = '#!/bin/sh\n' + scripts[filename]; 1.41 + else if (/\.bat$/.test(filename)) 1.42 + scripts[filename] = '@echo off\n' + scripts[filename]; 1.43 +}); 1.44 + 1.45 +function getScript (name) { 1.46 + // Use specific OSX script if exists 1.47 + if (isOSX && scripts[name + '-mac.sh']) 1.48 + name = name + '-mac'; 1.49 + let fileName = name + (isWindows ? '.bat' : '.sh'); 1.50 + return createFile(fileName, scripts[fileName]); 1.51 +} 1.52 +exports.getScript = getScript; 1.53 + 1.54 +function createFile (name, data) { 1.55 + let { promise, resolve, reject } = defer(); 1.56 + let fileName = join(PROFILE_DIR, name); 1.57 + writeFile(fileName, data, function (err) { 1.58 + if (err) reject(); 1.59 + else { 1.60 + makeExecutable(fileName); 1.61 + resolve(fileName); 1.62 + } 1.63 + }); 1.64 + return promise; 1.65 +} 1.66 + 1.67 +// TODO Use fs.chmod once implemented, bug 914606 1.68 +function makeExecutable (name) { 1.69 + let { CC } = require('chrome'); 1.70 + let nsILocalFile = CC('@mozilla.org/file/local;1', 'nsILocalFile', 'initWithPath'); 1.71 + let file = nsILocalFile(name); 1.72 + file.permissions = parseInt('0777', 8); 1.73 +} 1.74 + 1.75 +function deleteFile (name) { 1.76 + let file = join(PROFILE_DIR, name); 1.77 + if (existsSync(file)) 1.78 + unlinkSync(file); 1.79 +} 1.80 + 1.81 +function cleanUp () { 1.82 + Object.keys(scripts).forEach(deleteFile); 1.83 +} 1.84 +exports.cleanUp = cleanUp;