PageRenderTime 52ms CodeModel.GetById 24ms RepoModel.GetById 1ms app.codeStats 0ms

/test/normal-template.js

https://github.com/chorfa672m/normal-template
JavaScript | 250 lines | 209 code | 39 blank | 2 comment | 0 complexity | 2bc657cd596d42592dfbf075eaa22eac MD5 | raw file
  1. var assert = require("assert");
  2. var TEMPLATE = require("../lib/normal-template"),
  3. compile = TEMPLATE.compile;
  4. // FIXME: change order of asserts!
  5. exports.testInterpolation = function () {
  6. var t = compile("Hello {=name}, {=article/title} {=article/deep/value}");
  7. var data = {name: "George", article: {title: "News", content: "No news is good news", deep: {value: "found"}}};
  8. assert.equal(t(data), "Hello George, News found");
  9. }
  10. exports.testComments = function () {
  11. var t = compile("Hello {:! this is a comment }Stella");
  12. var data = {};
  13. assert.equal(t(data), "Hello Stella");
  14. }
  15. exports.testSelect = function () {
  16. var t = compile("Hello {:select user}{=name}, {=age}{/:select}");
  17. var data = {user: {name: "George", age: "34"}};
  18. assert.equal(t(data), "Hello George, 34");
  19. t = compile("Hello {:s deep/user}{=name}, {=age}{/:s}");
  20. data = {deep: {user: {name: "Stella", age: "34"}}};
  21. assert.equal(t(data), "Hello Stella, 34");
  22. }
  23. exports.testReduce = function () {
  24. var t = compile("{:r articles}{=title}: {=content} {/:r}");
  25. var data = {articles: [
  26. {title: "Hello1", content: "World1"},
  27. {title: "Hello2", content: "World2"},
  28. {title: "Hello3", content: "World3"}
  29. ]};
  30. assert.equal(t(data), "Hello1: World1 Hello2: World2 Hello3: World3 ");
  31. t = compile("test {:r articles}{=title}: {=content} {/:r}");
  32. data = {articles: []};
  33. assert.equal(t(data), "test ");
  34. t = compile("test {:r articles}{=title}: {=content} {/:r}");
  35. data = {};
  36. assert.equal(t(data), "test ");
  37. }
  38. exports.testCurly = function () {
  39. var t = compile("Hello {=name}, function () { var a = 1 + 2 }");
  40. var data = {name: "George"};
  41. assert.equal(t(data), "Hello George, function () { var a = 1 + 2 }");
  42. }
  43. exports.testIfElse = function () {
  44. var t = compile("{:if cool}cool {=outer}{:e}not cool{/:if}");
  45. var data = {};
  46. assert.equal(t(data), "not cool");
  47. var data = {cool: "ok", outer: "this is outer"};
  48. assert.equal(t(data), "cool this is outer");
  49. }
  50. exports.testSelectElse = function () {
  51. var t = compile("{:s cool}cool{:e}not cool{/:s}");
  52. var data = {};
  53. assert.equal(t(data), "not cool");
  54. }
  55. exports.testInterpolateNone = function () {
  56. var t = compile("Hello {=value}");
  57. var data = {};
  58. assert.equal(t(data), "Hello ");
  59. }
  60. exports.testInterpolateNone = function () {
  61. var t = compile("Hello {=value}");
  62. var data = {value: 0};
  63. assert.equal(t(data), "Hello 0");
  64. }
  65. exports.testDot = function () {
  66. var t = compile("{:s cool}{=.}{:e}not cool{/:s}");
  67. var data = {cool: 34};
  68. assert.equal(t(data), "34");
  69. }
  70. exports.testReduceElse = function () {
  71. var t = compile('{:r articles}<li>{=title}: {=content}</li>{:e}no articles{/:r}');
  72. var data = {articles: [
  73. {title: "Hello1", content: "World1"},
  74. {title: "Hello2", content: "World2"},
  75. {title: "Hello3", content: "World3"}
  76. ]};
  77. assert.equal(t(data), "<li>Hello1: World1</li><li>Hello2: World2</li><li>Hello3: World3</li>");
  78. var data = {};
  79. assert.equal(t(data), "no articles");
  80. var data = {articles: []};
  81. assert.equal(t(data), "no articles");
  82. }
  83. // stupid, but lets test this.
  84. exports.testSelectReduceElse = function () {
  85. var t = compile("{:s articles}{:r .}<li>{=title}: {=content}</li>{/:r}{:e}no articles{/:s}");
  86. var data = {articles: [
  87. {title: "Hello1", content: "World1"},
  88. {title: "Hello2", content: "World2"},
  89. {title: "Hello3", content: "World3"}
  90. ]};
  91. assert.equal(t(data), "<li>Hello1: World1</li><li>Hello2: World2</li><li>Hello3: World3</li>");
  92. var data = {};
  93. assert.equal(t(data), "no articles");
  94. }
  95. exports.testDefaultFilter = function () {
  96. var t = compile("{=name}", {filters: {defaultfilter: TEMPLATE.filters.html}});
  97. var data = {name: "George >> 2"};
  98. assert.equal(t(data), "George &gt;&gt; 2");
  99. }
  100. exports.testCustomFilters = function () {
  101. var t = compile("{=upcase name}", {filters: {
  102. upcase: function (val) {
  103. return val.toString().toUpperCase();
  104. }
  105. }});
  106. var data = {name: "George"};
  107. assert.equal(t(data), "GEORGE");
  108. }
  109. exports.testMultipleFilters = function () {
  110. var t = compile("{=lispy upcase name}", {filters: {
  111. upcase: function (val) {
  112. return val.toString().toUpperCase();
  113. },
  114. lispy: function (val) {
  115. return "((" + val + "))";
  116. }
  117. }});
  118. var data = {name: "George"};
  119. assert.equal(t(data), "((GEORGE))");
  120. }
  121. exports.testNewlinesEscaping = function () {
  122. var t = compile("hello\n {=name}\nworld\n");
  123. var data = {name: "George"};
  124. assert.equal(t(data), "hello\n George\nworld\n");
  125. }
  126. exports.testQuotesEscaping = function () {
  127. var t = compile('hello "{=name}", how "are" you?');
  128. var data = {name: "George"};
  129. assert.equal(t(data), 'hello "George", how "are" you?');
  130. }
  131. exports.testCurlyBrackets = function () {
  132. var t = compile('enclose in {:lb}brackets{:rb}');
  133. var data = {};
  134. assert.equal(t(data), 'enclose in {brackets}');
  135. }
  136. exports.testSyntaxErrors = function () {
  137. try {
  138. compile("{/:s articles}articles")
  139. } catch (e) {
  140. var err = "Unbalanced 'select' close tag";
  141. assert.ok(e.toString().match(new RegExp(err)), err);
  142. }
  143. try {
  144. compile("{:if user}{:s articles}articles{/:if}")
  145. } catch (e) {
  146. var err = "Unbalanced 'if' close tag, expecting 'select'";
  147. assert.ok(e.toString().match(new RegExp(err)), err);
  148. }
  149. try {
  150. compile("{:if user}{:s articles}articles")
  151. } catch (e) {
  152. var err = "Unbalanced 'select' tag, is not closed";
  153. assert.ok(e.toString().match(new RegExp(err)), err);
  154. }
  155. }
  156. exports.testIfBoolean = function () {
  157. var t = compile("{:if bool}true{:e}not true{/:if}");
  158. var data = {bool: false};
  159. assert.equal(t(data), "not true");
  160. }
  161. exports.testInterpolationEscaping = function () {
  162. try {
  163. compile("hello {=name|test}")
  164. } catch (e) {
  165. var err = "Invalid characters in path 'name|test'";
  166. assert.ok(e.toString().match(new RegExp(err)), err);
  167. }
  168. try {
  169. compile("hello {=name;test}")
  170. } catch (e) {
  171. var err = "Invalid characters in path 'name;test'";
  172. assert.ok(e.toString().match(new RegExp(err)), err);
  173. }
  174. }
  175. exports.testBackslashEscaping = function () {
  176. var t = compile("if (/\\/fora\\/topics/.test(e.target.href)) {");
  177. var data = {};
  178. assert.equal(t(data), "if (/\\/fora\\/topics/.test(e.target.href)) {");
  179. }
  180. exports.testReduceSelectInterpolate = function () {
  181. var t = compile("{:r articles}{=title} {:s forum}{=title}{/:s} {=count}{/:r}");
  182. var data = {
  183. articles: [
  184. {title: "Hello1", count: 1, forum: { title: "Forum1" }},
  185. {title: "Hello2", count: 2, forum: { title: "Forum2" }}
  186. ]
  187. };
  188. assert.equal(t(data), "Hello1 Forum1 1Hello2 Forum2 2");
  189. }
  190. exports.testNestedBrackets = function () {
  191. var t = compile("{instance: {=singular}}");
  192. var data = {
  193. singular: "article"
  194. };
  195. assert.equal(t(data), "{instance: article}");
  196. }
  197. exports.testReduceJoin = function () {
  198. var t = compile("{:r articles ','}{=title}: {=content}{/:r}");
  199. var data = {articles: [
  200. {title: "Hello1", content: "World1"},
  201. {title: "Hello2", content: "World2"},
  202. {title: "Hello3", content: "World3"}
  203. ]};
  204. assert.equal(t(data), "Hello1: World1,Hello2: World2,Hello3: World3");
  205. t = compile("test {:r articles ','}{=title}: {=content} {/:r}");
  206. data = {articles: []};
  207. assert.equal(t(data), "test ");
  208. t = compile("test {:r articles ','}{=title}: {=content} {/:r}");
  209. data = {};
  210. assert.equal(t(data), "test ");
  211. }