Skip to content

Instantly share code, notes, and snippets.

@morkai
Created October 5, 2012 13:22
Show Gist options
  • Save morkai/3839778 to your computer and use it in GitHub Desktop.
Save morkai/3839778 to your computer and use it in GitHub Desktop.
node.js cwd on Windows
root@ubuntu:/workspace/node/cwd# uname -a
Linux ubuntu 2.6.35-30-generic #61-Ubuntu SMP Tue Oct 11 15:29:15 UTC 2011 i686 GNU/Linux
root@ubuntu:/workspace/node/cwd# node -v
v0.8.11
root@ubuntu:/workspace/node/cwd# node test-node.js
Test 1
exec cmd = node cwd.js
exec cwd = undefined
FAILED (AS IT SHOULD) :>
expected process cwd =
actual process cwd =
Test 2
exec cmd = node cwd.js
exec cwd = /workspace/node/cwd/scripts
PASSED :)
expected process cwd = /workspace/node/cwd/scripts
actual process cwd = /workspace/node/cwd/scripts
Test 3
exec cmd = node scripts/cwd.js
exec cwd = undefined
PASSED :)
expected process cwd = /workspace/node/cwd
actual process cwd = /workspace/node/cwd
Test 4
exec cmd = node scripts/cwd.js
exec cwd = /workspace/node/cwd/scripts
FAILED (AS IT SHOULD) :>
expected process cwd =
actual process cwd =
Test 5
exec cmd = node /workspace/node/cwd/scripts/cwd.js
exec cwd = undefined
PASSED :)
expected process cwd = /workspace/node/cwd
actual process cwd = /workspace/node/cwd
Test 6
exec cmd = node /workspace/node/cwd/scripts/cwd.js
exec cwd = /workspace/node/cwd/scripts
PASSED :)
expected process cwd = /workspace/node/cwd/scripts
actual process cwd = /workspace/node/cwd/scripts
root@ubuntu:/workspace/node/cwd# node test-simple.js
Test 1
exec cmd = pwd
exec cwd = /workspace/node/cwd/scripts
PASSED :)
expected process cwd = /workspace/node/cwd/scripts
actual process cwd = /workspace/node/cwd/scripts
Test 2
exec cmd = pwd
exec cwd = undefined
PASSED :)
expected process cwd = /workspace/node/cwd
actual process cwd = /workspace/node/cwd
C:\Workspace\node\cwd>uname -a
WindowsNT omghi2u2 1 6 x86
C:\Workspace\node\cwd>node -v
v0.8.11
C:\Workspace\node\cwd>node test-node.js
Test 1
exec cmd = node cwd.js
exec cwd = undefined
FAILED (AS IT SHOULD) :>
expected process cwd =
actual process cwd =
Test 2
exec cmd = node cwd.js
exec cwd = C:\Workspace\node\cwd\scripts
FAILED :(
expected process cwd = C:\Workspace\node\cwd\scripts
actual process cwd =
Test 3
exec cmd = node scripts\cwd.js
exec cwd = undefined
FAILED :(
expected process cwd = C:\Workspace\node\cwd
actual process cwd =
Test 4
exec cmd = node scripts\cwd.js
exec cwd = C:\Workspace\node\cwd\scripts
FAILED (AS IT SHOULD) :>
expected process cwd =
actual process cwd =
Test 5
exec cmd = node C:\Workspace\node\cwd\scripts\cwd.js
exec cwd = undefined
FAILED :(
expected process cwd = C:\Workspace\node\cwd
actual process cwd = C:\
Test 6
exec cmd = node C:\Workspace\node\cwd\scripts\cwd.js
exec cwd = C:\Workspace\node\cwd\scripts
FAILED :(
expected process cwd = C:\Workspace\node\cwd\scripts
actual process cwd = C:\
C:\Workspace\node\cwd>node test-simple.js
Test 1
exec cmd = echo %CD%
exec cwd = C:\Workspace\node\cwd\scripts
FAILED :(
expected process cwd = C:\Workspace\node\cwd\scripts
actual process cwd = C:\
Test 2
exec cmd = echo %CD%
exec cwd = undefined
FAILED :(
expected process cwd = C:\Workspace\node\cwd
actual process cwd = C:\
process.stdout.write(process.cwd());
var exec = require('child_process').exec;
var path = require('path');
function test(i, expectedProcessCwd, cmd, cwd)
{
exec('node ' + cmd, {cwd: cwd}, function(err, actualProcessCwd)
{
console.log('Test %d', i);
console.log('exec cmd = node %s', cmd);
console.log('exec cwd = %s', cwd);
if (expectedProcessCwd === actualProcessCwd)
{
if (err)
{
console.log('FAILED (AS IT SHOULD) :>');
}
else
{
console.log('PASSED :)');
}
}
else
{
console.log('FAILED :(');
}
console.log('expected process cwd = %s', expectedProcessCwd);
console.log('actual process cwd = %s', actualProcessCwd);
console.log();
});
}
var cwd = process.cwd();
var baseDir = path.dirname(process.argv[1]).substr(cwd.length + 1);
var scriptFile = 'cwd.js';
var scriptsPath = path.join(__dirname, 'scripts');
var relativeScriptPath = path.join(baseDir, 'scripts', scriptFile);
var absoluteScriptPath = path.join(__dirname, 'scripts', scriptFile);
var i = 0;
test(++i, '' , scriptFile , undefined);
test(++i, scriptsPath, scriptFile , scriptsPath);
test(++i, cwd , relativeScriptPath, undefined);
test(++i, '' , relativeScriptPath, scriptsPath);
test(++i, cwd , absoluteScriptPath, undefined);
test(++i, scriptsPath, absoluteScriptPath, scriptsPath);
var exec = require('child_process').exec;
var join = require('path').join;
function test(i, expectedProcessCwd, cwd)
{
var cmd = process.platform === 'win32' ? 'echo %CD%' : 'pwd';
exec(cmd, {cwd: cwd}, function(err, actualProcessCwd)
{
actualProcessCwd = actualProcessCwd.trim();
console.log('Test %d', i);
console.log('exec cmd = %s', cmd);
console.log('exec cwd = %s', cwd);
if (expectedProcessCwd === actualProcessCwd)
{
if (err)
{
console.log('FAILED (AS IT SHOULD) :>');
}
else
{
console.log('PASSED :)');
}
}
else
{
console.log('FAILED :(');
}
console.log('expected process cwd = %s', expectedProcessCwd);
console.log('actual process cwd = %s', actualProcessCwd);
console.log();
});
}
var scriptsPath = join(__dirname, 'scripts');
var i = 0;
test(++i, scriptsPath , scriptsPath);
test(++i, process.cwd(), undefined);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment