Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .gitmodules
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
[submodule "test/spec"]
path = test/spec
url = https://github.com/mustache/spec
5 changes: 5 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -357,6 +357,11 @@ The mustache.js test suite uses the [mocha](http://visionmedia.github.com/mocha/

$ npm install -g mocha

You also need to install the sub module containing [Mustache specifications](http://github.com/mustache/spec) in the project root.

$ git submodule init
$ git submodule update

Then run the tests.

$ mocha test
Expand Down
89 changes: 89 additions & 0 deletions test/mustache-spec-test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
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;

// Mustache should work on node 0.6 that doesn't have fs.exisisSync
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);
});
});
});
});
});
1 change: 1 addition & 0 deletions test/spec
Submodule spec added at 72233f