parseargs.js 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. var parseargs = require('../lib/parseargs')
  2. , assert = require('assert')
  3. , optsReg = [
  4. { full: 'directory'
  5. , abbr: 'C'
  6. , preempts: false
  7. , expectValue: true
  8. }
  9. , { full: 'jakefile'
  10. , abbr: 'f'
  11. , preempts: false
  12. , expectValue: true
  13. }
  14. , { full: 'tasks'
  15. , abbr: 'T'
  16. , preempts: true
  17. }
  18. , { full: 'tasks'
  19. , abbr: 'ls'
  20. , preempts: true
  21. }
  22. , { full: 'trace'
  23. , abbr: 't'
  24. , preempts: false
  25. , expectValue: false
  26. }
  27. , { full: 'help'
  28. , abbr: 'h'
  29. , preempts: true
  30. }
  31. , { full: 'version'
  32. , abbr: 'V'
  33. , preempts: true
  34. }
  35. ]
  36. , p = new parseargs.Parser(optsReg)
  37. , z = function (s) { return s.split(' '); }
  38. , res;
  39. var tests = {
  40. 'test long preemptive opt and val with equal-sign, ignore further opts': function () {
  41. res = p.parse(z('--tasks=foo --jakefile=asdf'));
  42. assert.equal('foo', res.opts.tasks);
  43. assert.equal(undefined, res.opts.jakefile);
  44. }
  45. , 'test long preemptive opt and val without equal-sign, ignore further opts': function () {
  46. res = p.parse(z('--tasks foo --jakefile=asdf'));
  47. assert.equal('foo', res.opts.tasks);
  48. assert.equal(undefined, res.opts.jakefile);
  49. }
  50. , 'test long preemptive opt and no val, ignore further opts': function () {
  51. res = p.parse(z('--tasks --jakefile=asdf'));
  52. assert.equal(true, res.opts.tasks);
  53. assert.equal(undefined, res.opts.jakefile);
  54. }
  55. , 'test preemptive opt with no val, should be true': function () {
  56. res = p.parse(z('-T'));
  57. assert.equal(true, res.opts.tasks);
  58. }
  59. , 'test preemptive opt with no val, should be true and ignore further opts': function () {
  60. res = p.parse(z('-T -f'));
  61. assert.equal(true, res.opts.tasks);
  62. assert.equal(undefined, res.opts.jakefile);
  63. }
  64. , 'test preemptive opt with val, should be val': function () {
  65. res = p.parse(z('-T zoobie -f foo/bar/baz'));
  66. assert.equal('zoobie', res.opts.tasks);
  67. assert.equal(undefined, res.opts.jakefile);
  68. }
  69. , 'test -f expects a value, -t does not (howdy is task-name)': function () {
  70. res = p.parse(z('-f zoobie -t howdy'));
  71. assert.equal('zoobie', res.opts.jakefile);
  72. assert.equal(true, res.opts.trace);
  73. assert.equal('howdy', res.taskNames[0]);
  74. }
  75. , 'test different order, -f expects a value, -t does not (howdy is task-name)': function () {
  76. res = p.parse(z('-f zoobie howdy -t'));
  77. assert.equal('zoobie', res.opts.jakefile);
  78. assert.equal(true, res.opts.trace);
  79. assert.equal('howdy', res.taskNames[0]);
  80. }
  81. , 'test -f expects a value, -t does not (foo=bar is env var)': function () {
  82. res = p.parse(z('-f zoobie -t foo=bar'));
  83. assert.equal('zoobie', res.opts.jakefile);
  84. assert.equal(true, res.opts.trace);
  85. assert.equal('bar', res.envVars.foo);
  86. assert.equal(undefined, res.taskName);
  87. }
  88. , 'test -f expects a value, -t does not (foo=bar is env-var, task-name follows)': function () {
  89. res = p.parse(z('-f zoobie -t howdy foo=bar'));
  90. assert.equal('zoobie', res.opts.jakefile);
  91. assert.equal(true, res.opts.trace);
  92. assert.equal('bar', res.envVars.foo);
  93. assert.equal('howdy', res.taskNames[0]);
  94. }
  95. , 'test -t does not expect a value, -f does (throw howdy away)': function () {
  96. res = p.parse(z('-t howdy -f zoobie'));
  97. assert.equal(true, res.opts.trace);
  98. assert.equal('zoobie', res.opts.jakefile);
  99. assert.equal(undefined, res.taskName);
  100. }
  101. , 'test --trace does not expect a value, -f does (throw howdy away)': function () {
  102. res = p.parse(z('--trace howdy --jakefile zoobie'));
  103. assert.equal(true, res.opts.trace);
  104. assert.equal('zoobie', res.opts.jakefile);
  105. assert.equal(undefined, res.taskName);
  106. }
  107. , 'test --trace does not expect a value (equal), -f does (throw howdy away)': function () {
  108. res = p.parse(z('--trace=howdy --jakefile=zoobie'));
  109. assert.equal(true, res.opts.trace);
  110. assert.equal('zoobie', res.opts.jakefile);
  111. assert.equal(undefined, res.taskName);
  112. }
  113. /*
  114. , 'test task-name with positional args': function () {
  115. res = p.parse(z('foo:bar[asdf,qwer]'));
  116. assert.equal('asdf', p.taskArgs[0]);
  117. assert.equal('qwer', p.taskArgs[1]);
  118. }
  119. , 'test opts, env vars, task-name with positional args': function () {
  120. res = p.parse(z('-f ./tests/Jakefile -t default[asdf,qwer] foo=bar'));
  121. assert.equal('./tests/Jakefile', res.opts.jakefile);
  122. assert.equal(true, res.opts.trace);
  123. assert.equal('bar', res.envVars.foo);
  124. assert.equal('default', res.taskName);
  125. assert.equal('asdf', p.taskArgs[0]);
  126. assert.equal('qwer', p.taskArgs[1]);
  127. }
  128. */
  129. };
  130. module.exports = tests;