summaryrefslogtreecommitdiffstats
path: root/spec/spec.js
blob: 221d32ec291116f4880397301320a6ca35eeabd4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
describe('spec', function() {
  // NOP Under non-node environments
  if (typeof process === 'undefined') {
    return;
  }

  var _ = require('underscore'),
      fs = require('fs');

  var specDir = __dirname + '/mustache/specs/';
  var specs = _.filter(fs.readdirSync(specDir), function(name) {
    return (/.*\.json$/).test(name);
  });

  _.each(specs, function(name) {
    var spec = require(specDir + name);
    _.each(spec.tests, function(test) {
      // Our lambda implementation knowingly deviates from the optional Mustace lambda spec
      // We also do not support alternative delimeters
      if (name === '~lambdas.json'

          // We also choose to throw if paritals are not found
          || (name === 'partials.json' && test.name === 'Failed Lookup')

          // We nest the entire response from partials, not just the literals
          || (name === 'partials.json' && test.name === 'Standalone Indentation')

          || (/\{\{\=/).test(test.template)
          || _.any(test.partials, function(partial) { return (/\{\{\=/).test(partial); })) {
        it.skip(name + ' - ' + test.name);
        return;
      }

      var data = _.clone(test.data);
      if (data.lambda) {
        // Blergh
        /* eslint-disable no-eval */
        data.lambda = eval('(' + data.lambda.js + ')');
        /* eslint-enable no-eval */
      }
      it(name + ' - ' + test.name, function() {
        if (test.partials) {
          shouldCompileToWithPartials(test.template, [data, {}, test.partials, true], true, test.expected, test.desc + ' "' + test.template + '"');
        } else {
          shouldCompileTo(test.template, [data, {}, {}, true], test.expected, test.desc + ' "' + test.template + '"');
        }
      });
    });
  });
});