UNPKG

circular-serializer

Version:

Safe serialize and deserialize json objects, Date support, extensible custom types

80 lines (68 loc) 2.65 kB
var expect = require('./test-helpers').expect; var Serializer = require('../lib/circular-serializer'); describe('serializer', function () { function MyType(name) { this.name = name; }; var typeMap = Object.create(Serializer.defaultTypeMap); typeMap.MyType = { detect: function (x) { return x instanceof MyType; }, pack: function(x) { return {name: x.name}; }, unpack: function(x) { return new MyType(x.name); } }; var serializer = Serializer({typeMap: typeMap}); var testObject = { k: [1, 2, 'rrr'], b: 'test', n: null, nn: NaN, u: {v: undefined}, my: new MyType('test'), c: new Date('2014-10-11T11:51:56.822Z') }; testObject.d = testObject; var serializedTestObject = '{\"k\":[1,2,\"rrr\"],\"b\":\"test\",\"n\":null,\"nn\":{\"@#csV\":\".\",\"@#csL\":\"nan\"},\"u\":{\"v\":{\"@#csV\":\".\",\"@#csL\":\"undef\"}},\"my\":{\"@#csV\":{\"name\":\"test\"},\"@#csL\":\"MyType\"},\"c\":{\"@#csV\":\"2014-10-11T11:51:56.822Z\",\"@#csL\":\"Date\"},\"d\":\"[Circular#d]\"}'; var testArray = [1, 2, 'test', {a: 1}]; var serializedTestArray = '[1,2,\"test\",{\"a\":1}]'; describe('#serialize', function () { var serialize = serializer.serialize.bind(serializer); it('should not serialize simple types', function () { expect(serialize(null)).to.be.equal(null); expect(serialize(false)).to.be.equal(false); expect(serialize(true)).to.be.equal(true); expect(serialize(123.33)).to.be.equal(123.33); expect(serialize(undefined)).to.be.equal(undefined); }); it('should serialize string', function () { var ts = 'test-string'; expect(serialize(ts)).to.be.equal('"' + ts + '"'); }); it('should serialize object', function () { expect(serialize(testObject)).to.be.equal(serializedTestObject); }); it('should serialize array', function () { expect(serialize(testArray)).to.be.equal(serializedTestArray); }); }); describe('#deserialize', function () { var deserialize = serializer.deserialize.bind(serializer); it('should not deserialize simple types', function () { expect(deserialize(null)).to.be.equal(null); expect(deserialize(false)).to.be.equal(false); expect(deserialize(true)).to.be.equal(true); expect(deserialize(123.33)).to.be.equal(123.33); expect(deserialize(undefined)).to.be.equal(undefined); }); it('should deserialize object', function () { var to = Object.create(testObject); to.d = '[Circular#d]'; expect(deserialize(serializedTestObject)).to.be.deep.equal(to); }); }); });