No puede seleccionar más de 25 temas Los temas deben comenzar con una letra o número, pueden incluir guiones ('-') y pueden tener hasta 35 caracteres de largo.

68 líneas
6.1KB

  1. var assert = require("assert"),
  2. vows = require("vows"),
  3. parse = require("./../mustache").parse;
  4. // A map of templates to their expected token output.
  5. var expectations = {
  6. "{{hi}}" : [ { type: 'name', value: 'hi' } ],
  7. "{{hi.world}}" : [ { type: 'name', value: 'hi.world' } ],
  8. "{{hi . world}}" : [ { type: 'name', value: 'hi . world' } ],
  9. "{{ hi}}" : [ { type: 'name', value: 'hi' } ],
  10. "{{hi }}" : [ { type: 'name', value: 'hi' } ],
  11. "{{ hi }}" : [ { type: 'name', value: 'hi' } ],
  12. "{{{hi}}}" : [ { type: '{', value: 'hi' } ],
  13. "{{!hi}}" : [ { type: '!', value: 'hi' } ],
  14. "{{! hi}}" : [ { type: '!', value: 'hi' } ],
  15. "{{! hi }}" : [ { type: '!', value: 'hi' } ],
  16. "{{ !hi}}" : [ { type: '!', value: 'hi' } ],
  17. "{{ ! hi}}" : [ { type: '!', value: 'hi' } ],
  18. "{{ ! hi }}" : [ { type: '!', value: 'hi' } ],
  19. "a{{hi}}" : [ { type: 'text', value: 'a' }, { type: 'name', value: 'hi' } ],
  20. "a {{hi}}" : [ { type: 'text', value: 'a ' }, { type: 'name', value: 'hi' } ],
  21. " a{{hi}}" : [ { type: 'text', value: ' a' }, { type: 'name', value: 'hi' } ],
  22. " a {{hi}}" : [ { type: 'text', value: ' a ' }, { type: 'name', value: 'hi' } ],
  23. "a{{hi}}b" : [ { type: 'text', value: 'a' }, { type: 'name', value: 'hi' }, { type: 'text', value: 'b' } ],
  24. "a{{hi}} b" : [ { type: 'text', value: 'a' }, { type: 'name', value: 'hi' }, { type: 'text', value: ' b' } ],
  25. "a{{hi}}b " : [ { type: 'text', value: 'a' }, { type: 'name', value: 'hi' }, { type: 'text', value: 'b ' } ],
  26. "a\n{{hi}} b \n" : [ { type: 'text', value: 'a\n' }, { type: 'name', value: 'hi' }, { type: 'text', value: ' b \n' } ],
  27. "a\n {{hi}} \nb" : [ { type: 'text', value: 'a\n ' }, { type: 'name', value: 'hi' }, { type: 'text', value: ' \nb' } ],
  28. "a\n {{!hi}} \nb" : [ { type: 'text', value: 'a\n' }, { type: '!', value: 'hi' }, { type: 'text', value: 'b' } ],
  29. "a\n{{#a}}{{/a}}\nb" : [ { type: 'text', value: 'a\n' }, { type: '#', value: 'a', tokens: [] }, { type: 'text', value: 'b' } ],
  30. "a\n {{#a}}{{/a}}\nb" : [ { type: 'text', value: 'a\n' }, { type: '#', value: 'a', tokens: [] }, { type: 'text', value: 'b' } ],
  31. "a\n {{#a}}{{/a}} \nb" : [ { type: 'text', value: 'a\n' }, { type: '#', value: 'a', tokens: [] }, { type: 'text', value: 'b' } ],
  32. "a\n{{#a}}\n{{/a}}\nb" : [ { type: 'text', value: 'a\n' }, { type: '#', value: 'a', tokens: [] }, { type: 'text', value: 'b' } ],
  33. "a\n {{#a}}\n{{/a}}\nb" : [ { type: 'text', value: 'a\n' }, { type: '#', value: 'a', tokens: [] }, { type: 'text', value: 'b' } ],
  34. "a\n {{#a}}\n{{/a}} \nb" : [ { type: 'text', value: 'a\n' }, { type: '#', value: 'a', tokens: [] }, { type: 'text', value: 'b' } ],
  35. "a\n{{#a}}\n{{/a}}\n{{#b}}\n{{/b}}\nb" : [ { type: 'text', value: 'a\n' }, { type: '#', value: 'a', tokens: [] }, { type: '#', value: 'b', tokens: [] }, { type: 'text', value: 'b' } ],
  36. "a\n {{#a}}\n{{/a}}\n{{#b}}\n{{/b}}\nb" : [ { type: 'text', value: 'a\n' }, { type: '#', value: 'a', tokens: [] }, { type: '#', value: 'b', tokens: [] }, { type: 'text', value: 'b' } ],
  37. "a\n {{#a}}\n{{/a}}\n{{#b}}\n{{/b}} \nb" : [ { type: 'text', value: 'a\n' }, { type: '#', value: 'a', tokens: [] }, { type: '#', value: 'b', tokens: [] }, { type: 'text', value: 'b' } ],
  38. "a\n{{#a}}\n{{#b}}\n{{/b}}\n{{/a}}\nb" : [ { type: 'text', value: 'a\n' }, { type: '#', value: 'a', tokens: [ { type: '#', value: 'b', tokens: [] } ] }, { type: 'text', value: 'b' } ],
  39. "a\n {{#a}}\n{{#b}}\n{{/b}}\n{{/a}}\nb" : [ { type: 'text', value: 'a\n' }, { type: '#', value: 'a', tokens: [ { type: '#', value: 'b', tokens: [] } ] }, { type: 'text', value: 'b' } ],
  40. "a\n {{#a}}\n{{#b}}\n{{/b}}\n{{/a}} \nb" : [ { type: 'text', value: 'a\n' }, { type: '#', value: 'a', tokens: [ { type: '#', value: 'b', tokens: [] } ] }, { type: 'text', value: 'b' } ],
  41. "{{>abc}}" : [ { type: '>', value: 'abc' } ],
  42. "{{> abc }}" : [ { type: '>', value: 'abc' } ],
  43. "{{ > abc }}" : [ { type: '>', value: 'abc' } ],
  44. "{{=<% %>=}}" : [ { type: '=', value: '<% %>' } ],
  45. "{{= <% %> =}}" : [ { type: '=', value: '<% %>' } ],
  46. "{{=<% %>=}}<%={{ }}=%>" : [ { type: '=', value: '<% %>' }, { type: '=', value: '{{ }}' } ],
  47. "{{=<% %>=}}<%hi%>" : [ { type: '=', value: '<% %>' }, { type: 'name', value: 'hi' } ],
  48. "{{#a}}{{/a}}hi{{#b}}{{/b}}\n" : [ { type: '#', value: 'a', tokens: [] }, { type: 'text', value: 'hi' }, { type: '#', value: 'b', tokens: [] }, { type: 'text', value: '\n' } ],
  49. "{{a}}\n{{b}}\n\n{{#c}}\n{{/c}}\n" : [ { type: 'name', value: 'a' }, { type: 'text', value: '\n' }, { type: 'name', value: 'b' }, { type: 'text', value: '\n\n' }, { type: '#', value: 'c', tokens: [] } ],
  50. "{{#foo}}\n {{#a}}\n {{b}}\n {{/a}}\n{{/foo}}\n"
  51. : [ { type: "#", value: "foo", tokens: [ { type: "#", value: "a", tokens: [ { type: "text", value: " " }, { type: "name", value: "b" }, { type: "text", value: "\n" } ] } ] } ]
  52. };
  53. var spec = {};
  54. for (var template in expectations) {
  55. (function (template, tokens) {
  56. spec["knows how to parse " + JSON.stringify(template)] = function () {
  57. assert.deepEqual(parse(template), tokens);
  58. };
  59. })(template, expectations[template]);
  60. }
  61. vows.describe("Mustache.parse").addBatch({
  62. "parse": spec
  63. }).export(module);