env.js 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. 'use strict';
  2. var test = require('tape');
  3. var parse = require('../').parse;
  4. test('expand environment variables', function (t) {
  5. t.same(parse('a $XYZ c', { XYZ: 'b' }), ['a', 'b', 'c']);
  6. t.same(parse('a${XYZ}c', { XYZ: 'b' }), ['abc']);
  7. t.same(parse('a${XYZ}c $XYZ', { XYZ: 'b' }), ['abc', 'b']);
  8. t.same(parse('"-$X-$Y-"', { X: 'a', Y: 'b' }), ['-a-b-']);
  9. t.same(parse("'-$X-$Y-'", { X: 'a', Y: 'b' }), ['-$X-$Y-']);
  10. t.same(parse('qrs"$zzz"wxy', { zzz: 'tuv' }), ['qrstuvwxy']);
  11. t.same(parse("qrs'$zzz'wxy", { zzz: 'tuv' }), ['qrs$zzzwxy']);
  12. t.same(parse('qrs${zzz}wxy'), ['qrswxy']);
  13. t.same(parse('qrs$wxy $'), ['qrs', '$']);
  14. t.same(parse('grep "xy$"'), ['grep', 'xy$']);
  15. t.same(parse('ab$x', { x: 'c' }), ['abc']);
  16. t.same(parse('ab\\$x', { x: 'c' }), ['ab$x']);
  17. t.same(parse('ab${x}def', { x: 'c' }), ['abcdef']);
  18. t.same(parse('ab\\${x}def', { x: 'c' }), ['ab${x}def']);
  19. t.same(parse('"ab\\${x}def"', { x: 'c' }), ['ab${x}def']);
  20. t.end();
  21. });
  22. test('environment variables with metacharacters', function (t) {
  23. t.same(parse('a $XYZ c', { XYZ: '"b"' }), ['a', '"b"', 'c']);
  24. t.same(parse('a $XYZ c', { XYZ: '$X', X: 5 }), ['a', '$X', 'c']);
  25. t.same(parse('a"$XYZ"c', { XYZ: "'xyz'" }), ["a'xyz'c"]);
  26. t.end();
  27. });
  28. test('special shell parameters', function (t) {
  29. var chars = '*@#?-$!0_'.split('');
  30. t.plan(chars.length);
  31. chars.forEach(function (c) {
  32. var env = {};
  33. env[c] = 'xxx';
  34. t.same(parse('a $' + c + ' c', env), ['a', 'xxx', 'c']);
  35. });
  36. });