diff --git a/index.js b/index.js index f565aba..3af2512 100644 --- a/index.js +++ b/index.js @@ -4,11 +4,18 @@ var fs = require('graceful-fs') function extractPath (path, cmdshimContents) { if (/[.]cmd$/.test(path)) { return extractPathFromCmd(cmdshimContents) + } else if (/[.]ps1$/.test(path)) { + return extractPathFromPowershell(cmdshimContents) } else { return extractPathFromCygwin(cmdshimContents) } } +function extractPathFromPowershell (cmdshimContents) { + var matches = cmdshimContents.match(/"[$]basedir[/]([^"]+?)"\s+[$]args/) + return matches && matches[1] +} + function extractPathFromCmd (cmdshimContents) { var matches = cmdshimContents.match(/"%(?:~dp0|dp0%)\\([^"]+?)"\s+%[*]/) return matches && matches[1] diff --git a/test/integration.js b/test/integration.js index 0cfa84b..d8e317d 100644 --- a/test/integration.js +++ b/test/integration.js @@ -8,8 +8,10 @@ var readCmdShim = require('../index.js') var workDir = path.join(__dirname, path.basename(__filename, '.js')) var testShbang = path.join(workDir, 'test-shbang') var testShbangCmd = testShbang + '.cmd' +var testShbangPowershell = testShbang + '.ps1' var testShim = path.join(workDir, 'test') var testShimCmd = testShim + '.cmd' +var testShimPowershell = testShim + '.ps1' test('setup', function (t) { rimraf.sync(workDir) @@ -88,6 +90,38 @@ test('sync-read-shbang-cygwin', function (t) { t.done() }) +test('async-read-no-shbang-powershell', function (t) { + t.plan(2) + readCmdShim(testShimPowershell, function (er, dest) { + t.error(er) + t.is(dest, '../integration.js') + t.done() + }) +}) + +test('sync-read-no-shbang-powershell', function (t) { + t.plan(1) + var dest = readCmdShim.sync(testShimPowershell) + t.is(dest, '../integration.js') + t.done() +}) + +test('async-read-shbang-powershell', function (t) { + t.plan(2) + readCmdShim(testShbangPowershell, function (er, dest) { + t.error(er) + t.is(dest, 'test-shbang.js') + t.done() + }) +}) + +test('sync-read-shbang-powershell', function (t) { + t.plan(1) + var dest = readCmdShim.sync(testShbangPowershell) + t.is(dest, 'test-shbang.js') + t.done() +}) + test('async-read-dir', function (t) { t.plan(2) readCmdShim(workDir, function (er) {