版博士V2.0程序
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

179 lines
6.1 KiB

  1. const $ = require('../index');
  2. const config = require('./config');
  3. const jc1 = require('./code/simple1');
  4. const jc2 = require('./code/simple2');
  5. const hc1 = require('./code/simple1.html');
  6. test('$.generate: simple js code', () => {
  7. expect(()=>{
  8. $('var a = 1;').generate();
  9. }).not.toThrow();
  10. })
  11. test('$.generate: this[0] is null', () => {
  12. expect(()=>{
  13. const G = $('var a = 1;');
  14. G[0] = null
  15. G.generate();
  16. }).not.toThrow();
  17. })
  18. test('$.generate:simple js code 1', () => {
  19. const str = $('var a = 1;').generate();
  20. expect(str).toBe('var a = 1;');
  21. })
  22. test('$.generate:simple js code 2', () => {
  23. const str =$('function a() {}').generate();
  24. expect(str).toBe('function a() {}');
  25. })
  26. test('$.generate: append result object should not throw', () => {
  27. const CODE = `
  28. function a(){
  29. var a = 1;
  30. }
  31. `;
  32. const code = $(CODE).append($('var a = 1;').node).generate()
  33. expect(code.indexOf('var a = 1;') > -1).toBeTruthy();
  34. })
  35. test('$.generate: simple html code', () => {
  36. expect(()=>{
  37. $('<div class="test" ><a href=""/></div>',config.html).generate();
  38. }).not.toThrow();
  39. })
  40. test('$.generate: simple html code 1 result should be ok', () => {
  41. const str = $('<div class="test" >test</div>',config.html).generate();
  42. expect(str).toBe('<div class=\"test\">test</div>');
  43. })
  44. test('$.generate: simple1 html code result should be ok', () => {
  45. const str = $(hc1,config.html).generate();
  46. expect(str.length > 1).toBeTruthy();
  47. })
  48. test('$.generate: simple1 html code result should be ok', () => {
  49. const res = $(`
  50. import a from 'a';console.log('get A');var b = console.log();console.log.bind();var c = console.log;console.log = func;
  51. `)
  52. .replace(`var $_$ = console.log()`, `var $_$ = void 0;`)
  53. .replace(`var $_$ = console.log`, `var $_$ = function(){};`)
  54. .find(`console.log()`)
  55. .remove()
  56. .generate({ isPretty: true });
  57. expect(res == `import a from "a";
  58. var b = void 0;
  59. console.log.bind();
  60. var c = function() {};
  61. console.log = func;`).toBeTruthy();
  62. })
  63. // todo magix attr
  64. // test('$.generate: simple html code 2 {{ test', () => {
  65. // const code = `<span class="{{= body_stateColor(this,crowd) }}" {{= body_updateState(this,crowd) }}>{{= body_stateText(this,crowd) }}</span>`;
  66. // const str = $(code, config.html).generate();
  67. // expect(str).toBe('<span class="{{= body_stateColor(this,crowd) }}" {{= body_updateState(this,crowd) }}>{{= body_stateText(this,crowd) }}</span>');
  68. // })
  69. test('$.generate: simple1 html code result should be ok', () => {
  70. const res = $(`
  71. <s-end
  72. a:elif="{{gameSta
  73. tus === 3}}"
  74. pic="{{level.p}}"
  75. last="{{(level.i + 1) >= levelTotal}}"
  76. award="{{award}}"
  77. nextAward="{{nextAward}}"
  78. lastAward="{{lastAward}}"
  79. used="{{used}}"
  80. onUse="handleEndUseTap"
  81. onNext="handleEndNextTap"
  82. />
  83. `, { parseOptions: { language: 'html' } } )
  84. .generate();
  85. expect(!!res.match(`/>`)).toBeTruthy();
  86. })
  87. test('$.generate: tag generate should be ok', () => {
  88. const str = $(`<template>
  89. <A></A>
  90. </template>`, { parseOptions: { language: 'vue' } }).find('<template></template>')
  91. .generate();
  92. expect(str.match('A')).toBeTruthy();
  93. })
  94. test('$.generate: html generate should be ok', () => {
  95. const str = $(`<image src={{a + 'b/c.png'}} style="s"/>`, { parseOptions: { language: 'html' } })
  96. .generate();
  97. expect(str.indexOf(`{{a + 'b/c.png'}}`) > -1).toBeTruthy();
  98. })
  99. test('$.generate: UpperCase tag generate should be ok', () => {
  100. const str = $(`<Image a="1" />`, { parseOptions: { language: 'html' } })
  101. .generate();
  102. expect(str.indexOf(`Image`) > -1).toBeTruthy();
  103. })
  104. test('$.generate: selfclose tag generate should be ok', () => {
  105. const str = $(`<div >
  106. <div / >
  107. <span />
  108. <span></span>
  109. </div>`, { parseOptions: { language: 'html' } })
  110. .generate();
  111. expect(str.indexOf(`<div>`) > -1 && str.indexOf(`<div/>`) > -1).toBeTruthy();
  112. })
  113. test('$.generate: selfclose tag generate should be ok', () => {
  114. const str = $(`<view class="h-guide-game {{className}}">
  115. <view class="h-guide-game-arrow-v" />
  116. <view class="h-guide-game-hand" />
  117. </view>`, { parseOptions: { language: 'html' } })
  118. .generate();
  119. expect(str.indexOf(`</view>`) > -1 && str.indexOf(`/>`) > -1).toBeTruthy();
  120. })
  121. test('$.generate: selfclose tag generate should be ok', () => {
  122. const str = $(`<!-- sdd -->`, { parseOptions: { language: 'html' } })
  123. .generate();
  124. expect(str.indexOf(`<!-- sdd -->`) > -1).toBeTruthy();
  125. })
  126. test('$.generate: selfclose tag generate should be ok', () => {
  127. const str = $(`<a-table :columns="columns"></a-table>`, { parseOptions: { language: 'html' } })
  128. .find('<$_$ $_$1=$_$2></$_$>')
  129. .each((item) => {
  130. const attrs = item.attr('content.attributes')
  131. attrs.forEach((attr, index) => {
  132. if (attr.key && attr.key.content && attr.key.content.startsWith(':')) {
  133. attr.key.content = attr.key.content.slice('1')
  134. attr.value.content = `{${attr.value.content}}`
  135. delete attr.startWrapper
  136. delete attr.endWrapper
  137. }
  138. })
  139. })
  140. .generate();
  141. expect(str.indexOf(`columns={columns}`) > -1).toBeTruthy();
  142. })
  143. test('$.generate: selfclose tag generate should be ok', () => {
  144. const str = $(`<a-table :columns="columns"></a-table>`, { parseOptions: { language: 'html' } })
  145. .find('<$_$ $_$1=$_$2></$_$>')
  146. .each((item) => {
  147. const attrs = item.attr('content.attributes')
  148. attrs.forEach((attr, index) => {
  149. if (attr.key && attr.key.content && attr.key.content.startsWith(':')) {
  150. attr.key.content = attr.key.content.slice('1')
  151. attr.startWrapper.content = '{'
  152. attr.endWrapper.content = '}'
  153. }
  154. })
  155. })
  156. .generate();
  157. expect(str.indexOf(`columns={columns}`) > -1).toBeTruthy();
  158. })
  159. // test('$.generate: import generate should be ok', () => {
  160. // const res = $(`const baseUrl = import.meta.env.VITE_APP_WEB_API_URL;`)
  161. // .generate();
  162. // expect(res.indexOf(`import`) > -1).toBeTruthy();
  163. // todo
  164. // })