2
0

directive_spec.js 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. var parse = require('src/parsers/directive').parseDirective
  2. describe('Directive Parser', function () {
  3. it('simple', function () {
  4. var res = parse('exp')
  5. expect(res.expression).toBe('exp')
  6. })
  7. it('with filters', function () {
  8. var res = parse('exp | abc de \'ok\' \'\' 123 | bcd')
  9. expect(res.expression).toBe('exp')
  10. expect(res.filters.length).toBe(2)
  11. expect(res.filters[0].name).toBe('abc')
  12. expect(res.filters[0].args.length).toBe(4)
  13. expect(res.filters[0].args[0].value).toBe('de')
  14. expect(res.filters[0].args[0].dynamic).toBe(true)
  15. expect(res.filters[0].args[1].value).toBe('ok')
  16. expect(res.filters[0].args[1].dynamic).toBe(false)
  17. expect(res.filters[0].args[2].value).toBe('')
  18. expect(res.filters[0].args[2].dynamic).toBe(false)
  19. expect(res.filters[0].args[3].value).toBe(123)
  20. expect(res.filters[0].args[3].dynamic).toBe(false)
  21. expect(res.filters[1].name).toBe('bcd')
  22. expect(res.filters[1].args).toBeUndefined()
  23. })
  24. it('reserved filter args', function () {
  25. var res = parse('arr | filterBy a in b')
  26. expect(res.expression).toBe('arr')
  27. expect(res.filters.length).toBe(1)
  28. expect(res.filters[0].args.length).toBe(3)
  29. expect(res.filters[0].args[0].value).toBe('a')
  30. expect(res.filters[0].args[0].dynamic).toBe(true)
  31. expect(res.filters[0].args[1].value).toBe('in')
  32. expect(res.filters[0].args[1].dynamic).toBe(false)
  33. expect(res.filters[0].args[2].value).toBe('b')
  34. expect(res.filters[0].args[2].dynamic).toBe(true)
  35. })
  36. it('double pipe', function () {
  37. var res = parse('a || b | c')
  38. expect(res.expression).toBe('a || b')
  39. expect(res.filters.length).toBe(1)
  40. expect(res.filters[0].name).toBe('c')
  41. expect(res.filters[0].args).toBeUndefined()
  42. })
  43. it('single quote + boolean', function () {
  44. var res = parse('a ? \'b\' : c')
  45. expect(res.expression).toBe('a ? \'b\' : c')
  46. expect(res.filters).toBeUndefined()
  47. })
  48. it('double quote + boolean', function () {
  49. var res = parse('"a:b:c||d|e|f" || d ? a : b')
  50. expect(res.expression).toBe('"a:b:c||d|e|f" || d ? a : b')
  51. expect(res.filters).toBeUndefined()
  52. expect(res.arg).toBeUndefined()
  53. })
  54. it('nested function calls + array/object literals', function () {
  55. var res = parse('test(c.indexOf(d,f),"e,f")')
  56. expect(res.expression).toBe('test(c.indexOf(d,f),"e,f")')
  57. })
  58. it('array literal', function () {
  59. var res = parse('d || [e,f]')
  60. expect(res.expression).toBe('d || [e,f]')
  61. expect(res.filters).toBeUndefined()
  62. })
  63. it('object literal', function () {
  64. var res = parse('{a: 1, b: 2} | p')
  65. expect(res.expression).toBe('{a: 1, b: 2}')
  66. expect(res.filters.length).toBe(1)
  67. expect(res.filters[0].name).toBe('p')
  68. expect(res.filters[0].args).toBeUndefined()
  69. })
  70. it('escape string', function () {
  71. var res = parse("'a\\'b' | test")
  72. expect(res.expression).toBe("'a\\'b'")
  73. expect(res.filters.length).toBe(1)
  74. expect(res.filters[0].name).toBe('test')
  75. expect(res.filters[0].args).toBeUndefined()
  76. })
  77. it('white spaces inside object literal', function () {
  78. var res = parse('abc | filter {a:1} {b: 2}')
  79. expect(res.expression).toBe('abc')
  80. expect(res.filters.length).toBe(1)
  81. expect(res.filters[0].name).toBe('filter')
  82. expect(res.filters[0].args.length).toBe(2)
  83. expect(res.filters[0].args[0].value).toBe('{a:1}')
  84. expect(res.filters[0].args[0].dynamic).toBe(true)
  85. expect(res.filters[0].args[1].value).toBe('{b: 2}')
  86. expect(res.filters[0].args[1].dynamic).toBe(true)
  87. })
  88. it('white spaces inside array literal', function () {
  89. var res = parse('abc | filter0 abc||def | filter1 [ 1, { a: 2 }]')
  90. expect(res.expression).toBe('abc')
  91. expect(res.filters.length).toBe(2)
  92. expect(res.filters[0].name).toBe('filter0')
  93. expect(res.filters[0].args.length).toBe(1)
  94. expect(res.filters[0].args[0].value).toBe('abc||def')
  95. expect(res.filters[0].args[0].dynamic).toBe(true)
  96. expect(res.filters[1].name).toBe('filter1')
  97. expect(res.filters[1].args.length).toBe(1)
  98. expect(res.filters[1].args[0].value).toBe('[ 1, { a: 2 }]')
  99. expect(res.filters[1].args[0].dynamic).toBe(true)
  100. })
  101. it('cache', function () {
  102. var res1 = parse('a || b | c')
  103. var res2 = parse('a || b | c')
  104. expect(res1).toBe(res2)
  105. })
  106. })