UNPKG

json-literal

Version:

superset of `JSON` adding date, regex, null and octal literals

108 lines (104 loc) 3.26 kB
var assert = require('assert') var garbage = require('garbage') var JSONL = require('../') describe('parse', function () { it('accepts anything that JSON accepts', function () { for (var i = 0; i < 10000; i++) { var obj = garbage() var str = JSON.stringify(obj) try { assert.deepEqual(JSON.parse(str), JSONL.parse(str, {circular: false})) } catch (ex) { ex.message += '\n' + str throw ex } } }) }) describe('stringify -> parse', function () { it('can handle anything that JSON accepts', function () { for (var i = 0; i < 10000; i++) { var obj = garbage() var str = JSONL.stringify(obj, {circular: false}) try { assert(typeof str === 'string') assert.deepEqual(obj, JSONL.parse(str, {circular: false})) assert.throws(function () { JSON.parse(str) }) } catch (ex) { ex.message += '\n' + JSON.stringify(obj) + '\n' + str throw ex } } }) }) describe('dates', function () { it('stringifies them', function () { assert(JSONL.stringify(new Date('2013-07-13T00:28:00.000Z')) === '(new Date("2013-07-13T00:28:00.000Z"))') }) it('parses them', function () { assert.deepEqual(new Date('2013-07-13T00:28:00.000Z'), JSONL.parse('(new Date("2013-07-13T00:28:00.000Z"))')) }) }) describe('regexps', function () { it('stringifies them', function () { assert(JSONL.stringify(/^[a-z]+$/g) === '(/^[a-z]+$/g)') }) it('parses them', function () { assert.deepEqual(/^[a-z]+$/g, JSONL.parse('(/^[a-z]+$/g)')) }) }) describe('regexps', function () { it('stringifies them', function () { assert(JSONL.stringify(/^[a-z]+$/g) === '(/^[a-z]+$/g)') }) it('parses them', function () { assert.deepEqual(/^[a-z]+$/g, JSONL.parse('(/^[a-z]+$/g)')) }) }) describe('circular', function () { it('accepts anything that JSON accepts', function () { for (var i = 0; i < 10000; i++) { var obj = garbage() var str = JSON.stringify(obj) try { assert.deepEqual(JSON.parse(str), JSONL.parse(str, {circular: true})) } catch (ex) { ex.message += '\n' + str throw ex } } }) describe('stringify -> parse', function () { it('can handle anything that JSON accepts', function () { for (var i = 0; i < 10000; i++) { var obj = garbage() var str = JSONL.stringify(obj, {circular: true}) try { assert(typeof str === 'string') assert.deepEqual(obj, JSONL.parse(str, {circular: true})) assert.throws(function () { JSON.parse(str) }) } catch (ex) { ex.message += '\n' + JSON.stringify(obj) + '\n' + str throw ex } } }) it('can handle circular references', function () { var x = {y: 10, e: {}} x.z = x x.f = x.e var str = JSONL.stringify(x) assert(typeof str === 'string') var obj = JSONL.parse(str) assert(obj.y === 10) assert(obj.z === obj) assert(obj.e === obj.f) obj.e.val = 10 assert(obj.f.val === 10) }) }) })