parseargs.js 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169
  1. /*
  2. * Jake JavaScript build tool
  3. * Copyright 2112 Matthew Eernisse (mde@fleegix.org)
  4. *
  5. * Licensed under the Apache License, Version 2.0 (the "License");
  6. * you may not use this file except in compliance with the License.
  7. * You may obtain a copy of the License at
  8. *
  9. * http://www.apache.org/licenses/LICENSE-2.0
  10. *
  11. * Unless required by applicable law or agreed to in writing, software
  12. * distributed under the License is distributed on an "AS IS" BASIS,
  13. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  14. * See the License for the specific language governing permissions and
  15. * limitations under the License.
  16. *
  17. */
  18. const PROJECT_DIR = process.env.PROJECT_DIR;
  19. let parseargs = require(`${PROJECT_DIR}/lib/parseargs`);
  20. let assert = require('assert');
  21. let optsReg = [
  22. { full: 'directory',
  23. abbr: 'C',
  24. preempts: false,
  25. expectValue: true
  26. },
  27. { full: 'jakefile',
  28. abbr: 'f',
  29. preempts: false,
  30. expectValue: true
  31. },
  32. { full: 'tasks',
  33. abbr: 'T',
  34. preempts: true
  35. },
  36. { full: 'tasks',
  37. abbr: 'ls',
  38. preempts: true
  39. },
  40. { full: 'trace',
  41. abbr: 't',
  42. preempts: false,
  43. expectValue: false
  44. },
  45. { full: 'help',
  46. abbr: 'h',
  47. preempts: true
  48. },
  49. { full: 'version',
  50. abbr: 'V',
  51. preempts: true
  52. }
  53. ];
  54. let p = new parseargs.Parser(optsReg);
  55. let z = function (s) { return s.split(' '); };
  56. let res;
  57. suite('parseargs', function () {
  58. test('long preemptive opt and val with equal-sign, ignore further opts', function () {
  59. res = p.parse(z('--tasks=foo --jakefile=asdf'));
  60. assert.equal('foo', res.opts.tasks);
  61. assert.equal(undefined, res.opts.jakefile);
  62. });
  63. test('long preemptive opt and val without equal-sign, ignore further opts', function () {
  64. res = p.parse(z('--tasks foo --jakefile=asdf'));
  65. assert.equal('foo', res.opts.tasks);
  66. assert.equal(undefined, res.opts.jakefile);
  67. });
  68. test('long preemptive opt and no val, ignore further opts', function () {
  69. res = p.parse(z('--tasks --jakefile=asdf'));
  70. assert.equal(true, res.opts.tasks);
  71. assert.equal(undefined, res.opts.jakefile);
  72. });
  73. test('preemptive opt with no val, should be true', function () {
  74. res = p.parse(z('-T'));
  75. assert.equal(true, res.opts.tasks);
  76. });
  77. test('preemptive opt with no val, should be true and ignore further opts', function () {
  78. res = p.parse(z('-T -f'));
  79. assert.equal(true, res.opts.tasks);
  80. assert.equal(undefined, res.opts.jakefile);
  81. });
  82. test('preemptive opt with val, should be val', function () {
  83. res = p.parse(z('-T zoobie -f foo/bar/baz'));
  84. assert.equal('zoobie', res.opts.tasks);
  85. assert.equal(undefined, res.opts.jakefile);
  86. });
  87. test('-f expects a value, -t does not (howdy is task-name)', function () {
  88. res = p.parse(z('-f zoobie -t howdy'));
  89. assert.equal('zoobie', res.opts.jakefile);
  90. assert.equal(true, res.opts.trace);
  91. assert.equal('howdy', res.taskNames[0]);
  92. });
  93. test('different order, -f expects a value, -t does not (howdy is task-name)', function () {
  94. res = p.parse(z('-f zoobie howdy -t'));
  95. assert.equal('zoobie', res.opts.jakefile);
  96. assert.equal(true, res.opts.trace);
  97. assert.equal('howdy', res.taskNames[0]);
  98. });
  99. test('-f expects a value, -t does not (foo=bar is env var)', function () {
  100. res = p.parse(z('-f zoobie -t foo=bar'));
  101. assert.equal('zoobie', res.opts.jakefile);
  102. assert.equal(true, res.opts.trace);
  103. assert.equal('bar', res.envVars.foo);
  104. assert.equal(undefined, res.taskNames[0]);
  105. });
  106. test('-f expects a value, -t does not (foo=bar is env-var, task-name follows)', function () {
  107. res = p.parse(z('-f zoobie -t howdy foo=bar'));
  108. assert.equal('zoobie', res.opts.jakefile);
  109. assert.equal(true, res.opts.trace);
  110. assert.equal('bar', res.envVars.foo);
  111. assert.equal('howdy', res.taskNames[0]);
  112. });
  113. test('-t does not expect a value, -f does (howdy is task-name)', function () {
  114. res = p.parse(z('-t howdy -f zoobie'));
  115. assert.equal(true, res.opts.trace);
  116. assert.equal('zoobie', res.opts.jakefile);
  117. assert.equal('howdy', res.taskNames[0]);
  118. });
  119. test('--trace does not expect a value, -f does (howdy is task-name)', function () {
  120. res = p.parse(z('--trace howdy --jakefile zoobie'));
  121. assert.equal(true, res.opts.trace);
  122. assert.equal('zoobie', res.opts.jakefile);
  123. assert.equal('howdy', res.taskNames[0]);
  124. });
  125. test('--trace does not expect a value (equal), -f does (throw howdy away)', function () {
  126. res = p.parse(z('--trace=howdy --jakefile=zoobie'));
  127. assert.equal(true, res.opts.trace);
  128. assert.equal('zoobie', res.opts.jakefile);
  129. assert.equal(undefined, res.taskNames[0]);
  130. });
  131. /*
  132. , test('task-name with positional args', function () {
  133. res = p.parse(z('foo:bar[asdf,qwer]'));
  134. assert.equal('asdf', p.taskArgs[0]);
  135. assert.equal('qwer', p.taskArgs[1]);
  136. }
  137. , test('opts, env vars, task-name with positional args', function () {
  138. res = p.parse(z('-f ./tests/Jakefile -t default[asdf,qwer] foo=bar'));
  139. assert.equal('./tests/Jakefile', res.opts.jakefile);
  140. assert.equal(true, res.opts.trace);
  141. assert.equal('bar', res.envVars.foo);
  142. assert.equal('default', res.taskName);
  143. assert.equal('asdf', p.taskArgs[0]);
  144. assert.equal('qwer', p.taskArgs[1]);
  145. }
  146. */
  147. });