| @@ -0,0 +1,80 @@ | |||||
| 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', | |||||
| 'Standalone Indentation' | |||||
| ], | |||||
| sections: [ | |||||
| 'Standalone Without Newline' | |||||
| ], | |||||
| '~lambdas': [ | |||||
| 'Interpolation', | |||||
| 'Interpolation - Expansion', | |||||
| 'Interpolation - Alternate Delimiters', | |||||
| 'Interpolation - Multiple Calls', | |||||
| 'Escaping', | |||||
| 'Section - Expansion', | |||||
| 'Section - Alternate Delimiters' | |||||
| ] | |||||
| }; | |||||
| // You can run the skiped 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; | |||||
| var specFiles; | |||||
| if (fileToRun) { | |||||
| specFiles = [fileToRun]; | |||||
| } else if (fs.existsSync(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); | |||||
| }); | |||||
| }); | |||||
| }); | |||||
| }); | |||||
| }); | |||||