| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- require('./helper');
- var fs = require('fs');
- var path = require('path');
- var specsDir = path.join(__dirname, 'spec/specs');
- var skipTests = {
- comments: [
- 'Standalone Without Newline'
- ],
- delimiters: [
- 'Standalone Without Newline'
- ],
- inverted: [
- 'Standalone Without Newline'
- ],
- partials: [
- 'Standalone Without Previous Line',
- 'Standalone Without Newline'
- ],
- sections: [
- 'Standalone Without Newline'
- ],
- '~lambdas': [
- 'Interpolation',
- 'Interpolation - Expansion',
- 'Interpolation - Alternate Delimiters',
- 'Interpolation - Multiple Calls',
- 'Escaping',
- 'Section - Expansion',
- 'Section - Alternate Delimiters'
- ]
- };
- // You can run the skipped tests by setting the NOSKIP environment variable to
- // true (e.g. NOSKIP=true mocha test/mustache-spec-test.js)
- var noSkip = process.env.NOSKIP;
- // You can put the name of a specific test file to run in the TEST environment
- // variable (e.g. TEST=interpolation mocha test/mustache-spec-test.js)
- var fileToRun = process.env.TEST;
- // Mustache should work on node 0.6 that doesn't have fs.existsSync
- function existsDir (path) {
- try {
- return fs.statSync(path).isDirectory();
- } catch (x) {
- return false;
- }
- }
- var specFiles;
- if (fileToRun) {
- specFiles = [fileToRun];
- } else if (existsDir(specsDir)) {
- specFiles = fs.readdirSync(specsDir).filter(function (file) {
- return (/\.json$/).test(file);
- }).map(function (file) {
- return path.basename(file).replace(/\.json$/, '');
- }).sort();
- } else {
- specFiles = [];
- }
- function getSpecs (specArea) {
- return JSON.parse(fs.readFileSync(path.join(specsDir, specArea + '.' + 'json'), 'utf8'));
- }
- describe('Mustache spec compliance', function () {
- beforeEach(function () {
- Mustache.clearCache();
- });
- specFiles.forEach(function (specArea) {
- describe('- ' + specArea + ':', function () {
- var specs = getSpecs(specArea);
- specs.tests.forEach(function (test) {
- var it_ = (!noSkip && skipTests[specArea] && skipTests[specArea].indexOf(test.name) >= 0) ? it.skip : it;
- it_(test.name + ' - ' + test.desc, function () {
- if (test.data.lambda && test.data.lambda.__tag__ === 'code')
- test.data.lambda = eval('(function() { return ' + test.data.lambda.js + '; })');
- var output = Mustache.render(test.template, test.data, test.partials);
- assert.equal(output, test.expected);
- });
- });
- });
- });
- });
|