redeyed-string-config.js 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. 'use strict';
  2. /*jshint asi: true*/
  3. var test = require('tap').test
  4. , util = require('util')
  5. , redeyed = require('..')
  6. function inspect (obj) {
  7. return util.inspect(obj, false, 5, true)
  8. }
  9. test('adding custom asserts ... ', function (t) {
  10. t.constructor.prototype.assertSurrounds = function (code, opts, expected) {
  11. var result = redeyed(code, opts).code
  12. this.equals(result, expected, inspect(code) + ' => ' + inspect(expected))
  13. return this;
  14. }
  15. t.end()
  16. })
  17. test('\nstring config, keywords', function (t) {
  18. var opts001 = { Keyword: { _default: '*:&' } };
  19. t.test('\n# ' + inspect(opts001), function (t) {
  20. t.assertSurrounds('this', opts001, '*this&')
  21. t.assertSurrounds('if (a == 1) return', opts001, '*if& (a == 1) *return&')
  22. t.assertSurrounds('var n = new Test();', opts001, '*var& n = *new& Test();')
  23. t.end()
  24. })
  25. var opts002 = {
  26. Keyword: {
  27. 'function': '^:'
  28. , 'return': '(:)'
  29. , _default: '*:&'
  30. }
  31. };
  32. t.test('\n# ' + inspect(opts002), function (t) {
  33. t.assertSurrounds(
  34. [ 'function foo (bar) {'
  35. , ' var a = 3;'
  36. , ' return bar + a;'
  37. , '}'
  38. ].join('\n')
  39. , opts002
  40. , [ '^function& foo (bar) {'
  41. , ' *var& a = 3;'
  42. , ' (return) bar + a;'
  43. , '}'
  44. ].join('\n'))
  45. t.end()
  46. })
  47. })
  48. test('\nstring configs resolve from type and root', function (t) {
  49. var code = 'var a = new Test();'
  50. function run(t, conf, expected, code_) {
  51. t.test('\n# ' + inspect(conf), function (t) {
  52. t.assertSurrounds(code_ || code, conf, expected);
  53. t.end()
  54. })
  55. }
  56. // at least the token kind has to be configured in order for the root_default to be applied
  57. // otherwise a root._default would affect all tokens, even the ones we want to leave unchanged
  58. run(t, { _default: '*:' }, 'var a = new Test();')
  59. t.test('\n\n# only before or after specified, but no root._default', function (t) {
  60. run(t, { Keyword: { _default: '*:' } }, '*var a = *new Test();')
  61. run(t, { Keyword: { _default: ':-' } }, 'var- a = new- Test();')
  62. t.end()
  63. })
  64. t.test('\n\n# resolve missing from root._default', function (t) {
  65. run(t, { Keyword: { _default: '*:' }, _default: '(:-' }, '*var- a = *new- Test();')
  66. run(t, { Keyword: { _default: ':-' }, _default: '*:)' }, '*var- a = *new- Test();')
  67. t.end()
  68. })
  69. t.test('\n\n# no resolve if all specified', function (t) {
  70. run(t, { Keyword: { _default: '+:-' }, _default: '*:)' }, '+var- a = +new- Test();')
  71. run(t, { Keyword: { _default: ':-' }, _default: ':)' }, 'var- a = new- Test();')
  72. t.end()
  73. })
  74. t.test('\n\n# resolve specific token no defaults', function (t) {
  75. run(t, { Keyword: { 'var': '*:' } }, '*var a = new Test();')
  76. run(t, { Keyword: { 'var': ':-' } }, 'var- a = new Test();')
  77. t.end()
  78. })
  79. t.test('\n\n# resolve specific token with type defaults', function (t) {
  80. run(t, { Keyword: { 'var': '*:', _default: ':-' } }, '*var- a = new- Test();')
  81. run(t, { Keyword: { 'var': '*:', _default: '(:-' } }, '*var- a = (new- Test();')
  82. run(t, { Keyword: { 'var': ':-', _default: '*:' } }, '*var- a = *new Test();')
  83. run(t, { Keyword: { 'var': ':-', _default: '*:)' } }, '*var- a = *new) Test();')
  84. run(t, { Keyword: { 'var': ':-', 'new': ':&', _default: '*:' } }, '*var- a = *new& Test();')
  85. t.end()
  86. })
  87. t.test(
  88. '\n\n# resolve specific token with root defaults, but no type default - root default not applied to unspecified tokens'
  89. , function (t) {
  90. run(t, { Keyword: { 'var': '*:' }, _default: ':-' }, '*var- a = new Test();')
  91. run(t, { Keyword: { 'var': ':-' }, _default: '*:' }, '*var- a = new Test();')
  92. t.end()
  93. }
  94. )
  95. t.test('\n\n# resolve specific token with type and root defaults', function (t) {
  96. run(t, { Keyword: { 'var': '*:', _default: '+:-' }, _default: ':)' }, '*var- a = +new- Test();')
  97. run(t, { Keyword: { 'var': ':-', _default: '*:+' }, _default: '(:' }, '*var- a = *new+ Test();')
  98. t.end()
  99. })
  100. t.test('all exact tokens undefined, but type default', function (t) {
  101. run(t, { 'Boolean': { 'true': undefined, 'false': undefined, _default: '+:-' } }, 'return +true- || +false-;', 'return true || false;')
  102. })
  103. t.end()
  104. })