File: /var/www/zaklada/html/node_modules/babel-jest/node_modules/json5/test/parse.js
// 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);
    });
});