custom-parsers.spec.js 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. /* eslint no-unused-vars:off */
  2. var expect = require('chai').expect
  3. var parse = require('./parse')
  4. describe('parse() with custom tag parsers', function () {
  5. function sample () {
  6. /**
  7. * @tag {type} name description
  8. */
  9. var a
  10. }
  11. it('should use `opts.parsers`', function () {
  12. var parsers = [
  13. function everything (str) {
  14. return {
  15. source: str,
  16. data: {
  17. tag: 'tag',
  18. type: 'type',
  19. name: 'name',
  20. optional: false,
  21. description: 'description'
  22. }
  23. }
  24. }
  25. ]
  26. expect(parse(sample, {parsers: parsers})[0])
  27. .to.eql({
  28. line: 1,
  29. description: '',
  30. source: '@tag {type} name description',
  31. tags: [{
  32. tag: 'tag',
  33. type: 'type',
  34. name: 'name',
  35. description: 'description',
  36. optional: false,
  37. source: '@tag {type} name description',
  38. line: 2
  39. }]
  40. })
  41. })
  42. it('should merge parsers result', function () {
  43. var parsers = [
  44. function parser1 (str) {
  45. return {
  46. source: '',
  47. data: {tag: 'tag'}
  48. }
  49. },
  50. function parser2 (str) {
  51. return {
  52. source: '',
  53. data: {type: 'type'}
  54. }
  55. },
  56. function parser3 (str) {
  57. return {
  58. source: '',
  59. data: {
  60. name: 'name',
  61. description: 'description'
  62. }
  63. }
  64. }
  65. ]
  66. expect(parse(sample, {parsers: parsers})[0])
  67. .to.eql({
  68. line: 1,
  69. description: '',
  70. source: '@tag {type} name description',
  71. tags: [{
  72. tag: 'tag',
  73. type: 'type',
  74. name: 'name',
  75. description: 'description',
  76. optional: false,
  77. source: '@tag {type} name description',
  78. line: 2
  79. }]
  80. })
  81. })
  82. it('should catch parser exceptions and populate `errors` field', function () {
  83. var parsers = [
  84. function parser1 (str) {
  85. return {
  86. source: '',
  87. data: {tag: 'tag'}
  88. }
  89. },
  90. function parser2 (str) {
  91. throw new Error('error 1')
  92. },
  93. function parser3 (str) {
  94. throw new Error('error 2')
  95. },
  96. function parser4 (str) {
  97. return {
  98. source: '',
  99. data: {name: 'name'}
  100. }
  101. }
  102. ]
  103. expect(parse(sample, {parsers: parsers})[0])
  104. .to.eql({
  105. line: 1,
  106. description: '',
  107. source: '@tag {type} name description',
  108. tags: [{
  109. tag: 'tag',
  110. type: '',
  111. name: 'name',
  112. description: '',
  113. optional: false,
  114. source: '@tag {type} name description',
  115. errors: [
  116. 'parser2: error 1',
  117. 'parser3: error 2'
  118. ],
  119. line: 2
  120. }]
  121. })
  122. })
  123. })