laytpl.js 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228
  1. /**
  2. * @file laytpl - 测试
  3. * @author xuexb <fe.xiaowu@gmail.com>
  4. */
  5. /* global layui */
  6. var laytpl = layui.laytpl;
  7. describe('laytpl', function () {
  8. it('param is error', function () {
  9. [
  10. [], {},
  11. null,
  12. 1,
  13. true
  14. ].forEach(function (key) {
  15. expect(laytpl(key)).to.have.string('Laytpl Error');
  16. });
  17. });
  18. it('async render callback', function (done) {
  19. expect(laytpl('').render()).to.have.string('Laytpl Error');
  20. laytpl('{{ d.name }}是一位公猿').render({
  21. name: '贤心'
  22. }, function (result) {
  23. expect(result).to.equal('贤心是一位公猿');
  24. done();
  25. });
  26. });
  27. it('sync result', function () {
  28. var result = laytpl('{{ d.name }}是一位公猿').render({
  29. name: '贤心'
  30. });
  31. expect(result).to.equal('贤心是一位公猿');
  32. });
  33. it('cached', function () {
  34. var compile = laytpl('{{ d.name }}');
  35. expect(compile.render({
  36. name: 1
  37. })).to.equal('1');
  38. expect(compile.render({
  39. name: 2
  40. })).to.equal('2');
  41. });
  42. it('unescape result', function () {
  43. var result = laytpl('{{ d.name }}<div></div>').render({
  44. name: '<em>laytpl</em>'
  45. });
  46. expect(result).to.equal('<em>laytpl</em><div></div>');
  47. });
  48. it('escape result', function () {
  49. var result = laytpl('{{= d.name }}<div></div>').render({
  50. name: '<em>laytpl</em>'
  51. });
  52. expect(result).to.equal('&lt;em&gt;laytpl&lt;/em&gt;<div></div>');
  53. });
  54. describe('typeof result', function () {
  55. it('string', function () {
  56. expect(laytpl('{{ d.name }}').render({
  57. name: 1
  58. })).to.be.a('string');
  59. expect(laytpl([
  60. '{{# ',
  61. ' if (true) {',
  62. ' return "1";',
  63. ' }',
  64. '}}'
  65. ].join('')).render({})).to.be.a('string');
  66. });
  67. // 表达式返回boolean
  68. it('boolean', function () {
  69. expect(laytpl([
  70. '{{# ',
  71. ' if (true) {',
  72. ' return true;',
  73. ' }',
  74. '}}'
  75. ].join('')).render({})).to.be.a('boolean');
  76. });
  77. it('number', function () {
  78. expect(laytpl([
  79. '{{# ',
  80. ' if (true) {',
  81. ' return 1;',
  82. ' }',
  83. '}}'
  84. ].join('')).render({})).to.be.a('number');
  85. });
  86. });
  87. describe('method config', function () {
  88. // reset
  89. afterEach(function () {
  90. laytpl.config({
  91. open: '{{',
  92. close: '}}'
  93. });
  94. });
  95. it('typeof', function () {
  96. expect(laytpl.config).to.be.a('function');
  97. });
  98. it('param is empty', function () {
  99. expect(laytpl.config()).to.be.undefined;
  100. });
  101. it('set open', function () {
  102. laytpl.config({
  103. open: '<%'
  104. });
  105. var result = laytpl([
  106. '<%# var name = "laytpl"; }}',
  107. '你好, <% name }}, <% d.date }}'
  108. ].join('')).render({
  109. date: '2017'
  110. });
  111. expect(result).to.equal('你好, laytpl, 2017');
  112. });
  113. it('set open and close', function () {
  114. laytpl.config({
  115. open: '<%',
  116. close: '%>'
  117. });
  118. var result = laytpl([
  119. '<%# var name = "laytpl"; %>',
  120. '你好, <% name %>, <% d.date %>'
  121. ].join('')).render({
  122. date: '2017'
  123. });
  124. expect(result).to.equal('你好, laytpl, 2017');
  125. });
  126. });
  127. describe('js expression', function () {
  128. it('var', function () {
  129. var result = laytpl('{{# var type = 1; }}{{ type }}{{ d.name }}').render({
  130. name: 2
  131. });
  132. expect(result).to.equal('12');
  133. });
  134. it('function', function () {
  135. var result = laytpl('{{# var fn = function () {return "ok"}; }}{{ fn() }}').render({});
  136. expect(result).to.equal('ok');
  137. });
  138. it('for', function () {
  139. var result = laytpl([
  140. '{{# ',
  141. ' var fn = function () {',
  142. ' var num = 0;',
  143. ' for (var i = 0; i < 10;i++) {',
  144. ' num += 1;',
  145. ' }',
  146. ' return num',
  147. ' };',
  148. '}}',
  149. '{{# ',
  150. ' var name = "laytpl";',
  151. '}}',
  152. '你好, {{ name }}, {{ d.name }}, {{ fn() }}'
  153. ].join('')).render({
  154. name: 'ok'
  155. });
  156. expect(result).to.equal('你好, laytpl, ok, 10');
  157. });
  158. it('if else', function () {
  159. var result;
  160. result = laytpl([
  161. '{{# ',
  162. ' if (true) {',
  163. ' return true;',
  164. ' }',
  165. ' else {',
  166. ' return false',
  167. ' }',
  168. '}}'
  169. ].join('')).render({});
  170. expect(result).to.be.true;
  171. result = laytpl([
  172. '{{# ',
  173. ' if (!true) {',
  174. ' return true;',
  175. ' }',
  176. ' else {',
  177. ' return false',
  178. ' }',
  179. '}}'
  180. ].join('')).render({});
  181. expect(result).to.be.false;
  182. });
  183. });
  184. describe('parse error', function () {
  185. it('error var', function () {
  186. var result = laytpl('{{ data.xxoo }}').render({});
  187. expect(result).to.have.string('data');
  188. expect(result).to.have.string('ReferenceError');
  189. expect(result).to.have.string('Laytpl Error');
  190. });
  191. it('error expression', function () {
  192. var result = laytpl('{{# var xxoo = ; }}').render({});
  193. expect(result).to.have.string('Laytpl Error');
  194. expect(result).to.have.string('SyntaxError');
  195. });
  196. });
  197. });