addon-sdk/source/test/fixtures/child-process-scripts.js

changeset 0
6474c204b198
     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;

mercurial