mirror of
https://github.com/Alfresco/alfresco-ng2-components.git
synced 2025-05-12 17:04:57 +00:00
90 lines
3.2 KiB
JavaScript
90 lines
3.2 KiB
JavaScript
// parse.js
|
|
// Tests parse(). See readme.txt for details.
|
|
|
|
var assert = require('assert');
|
|
var FS = require('fs');
|
|
var JSON5 = require('..');
|
|
var Path = require('path');
|
|
|
|
// Test JSON5.parse() by comparing its output for each case with either the
|
|
// native JSON.parse() or ES5 strict-mode eval(). See readme.txt for details.
|
|
// For eval(), remember to wrap the input in parentheses before eval()'ing,
|
|
// since {...} is ambiguous in JavaScript. Also ensure the parentheses are on
|
|
// lines of their own, to support inline comments.
|
|
|
|
// TODO More test cases, and ones that test specific features and edge cases.
|
|
// Mozilla's test cases are a great inspiration and reference here:
|
|
// http://mxr.mozilla.org/mozilla-central/source/js/src/tests/ecma_5/JSON/
|
|
|
|
var dirsPath = Path.resolve(__dirname, 'parse-cases');
|
|
var dirs = FS.readdirSync(dirsPath);
|
|
|
|
function createTest(fileName, dir) {
|
|
var ext = Path.extname(fileName);
|
|
var filePath = Path.join(dirsPath, dir, fileName);
|
|
var str = FS.readFileSync(filePath, 'utf8');
|
|
|
|
function parseJSON5() {
|
|
return JSON5.parse(str);
|
|
}
|
|
|
|
function parseJSON() {
|
|
return JSON.parse(str);
|
|
}
|
|
|
|
function parseES5() {
|
|
return eval('"use strict"; (\n' + str + '\n)');
|
|
}
|
|
|
|
exports[dir][fileName] = function test() {
|
|
switch (ext) {
|
|
case '.json':
|
|
assert.deepEqual(parseJSON5(), parseJSON(),
|
|
'Expected parsed JSON5 to equal parsed JSON.');
|
|
break;
|
|
case '.json5':
|
|
assert.throws(parseJSON, // test validation
|
|
'Test case bug: expected JSON parsing to fail.');
|
|
// Need special case for NaN as NaN != NaN
|
|
if ( fileName === 'nan.json5' ) {
|
|
assert.equal( isNaN( parseJSON5() ), isNaN( parseES5() ),
|
|
'Expected parsed JSON5 to equal parsed ES5.');
|
|
}
|
|
else {
|
|
assert.deepEqual( parseJSON5(), parseES5(),
|
|
'Expected parsed JSON5 to equal parsed ES5.');
|
|
}
|
|
break;
|
|
case '.js':
|
|
assert.throws(parseJSON, // test validation
|
|
'Test case bug: expected JSON parsing to fail.');
|
|
assert.doesNotThrow(parseES5, // test validation
|
|
'Test case bug: expected ES5 parsing not to fail.');
|
|
assert.throws(parseJSON5,
|
|
'Expected JSON5 parsing to fail.');
|
|
break;
|
|
case '.txt':
|
|
assert.throws(parseES5, // test validation
|
|
'Test case bug: expected ES5 parsing to fail.');
|
|
assert.throws(parseJSON5,
|
|
'Expected JSON5 parsing to fail.');
|
|
break;
|
|
}
|
|
};
|
|
}
|
|
|
|
dirs.forEach(function (dir) {
|
|
// create a test suite for this group of tests:
|
|
exports[dir] = {};
|
|
|
|
// skip the TODO directory -- these tests are expected to fail:
|
|
if (dir === 'todo') {
|
|
return;
|
|
}
|
|
|
|
// otherwise create a test for each file in this group:
|
|
FS.readdirSync(Path.join(dirsPath, dir)).forEach(function (file) {
|
|
createTest(file, dir);
|
|
});
|
|
});
|