index.test.js 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. let Parser = require('../index');
  2. const parse = (str) => {
  3. let ans = '';
  4. let parser = new Parser({
  5. onopentag(tagname, attrs, isSelfClosing) {
  6. // console.log('open tag', tagname);
  7. // console.log('attrs', attrs);
  8. ans += `<${tagname}${Object.entries(attrs).map(([key, value]) => ` ${key}="${value}"`)}${isSelfClosing ? ' /' : ''}>`
  9. },
  10. onclosetag(tagname) {
  11. // console.log('close tag', tagname);
  12. ans += `</${tagname}>`
  13. },
  14. ontext(text) {
  15. // console.log('text', text);
  16. ans += text;
  17. },
  18. oncomment(cmt) {
  19. ans += `<!--${cmt}-->`
  20. },
  21. ontemplate(tmp) {
  22. // console.log('template', tmp);
  23. ans += `{{${tmp}}}`
  24. },
  25. onwxs(wxs) {
  26. // console.log('wxs', wxs);
  27. ans += wxs
  28. }
  29. });
  30. parser.write(str)
  31. return ans
  32. }
  33. test('base', () => {
  34. let origin = `
  35. <view a="1"></view>
  36. <!-- test -->
  37. <view>{{ a > 2 ? 'as' : '12' }}</view>
  38. <import src="abc"></import>
  39. <wxs src="./index.wxs" />
  40. <view>zxc{{ middle }}asdasd</view>`
  41. let final = parse(origin)
  42. expect(final).toBe(origin)
  43. })
  44. test('tag name with whitespace', () => {
  45. let origin = `<view>aaa</view
  46. >`
  47. let final = parse(origin)
  48. expect(final).toBe(origin.replace(/\s/g, ''))
  49. })
  50. test('tag name with number', () => {
  51. let origin = `<dialog-v2>aaa</dialog-v2>`
  52. let final = parse(origin)
  53. console.log(final);
  54. expect(final).toBe(origin)
  55. })