addons/isl/src/__tests__/serialize.test.tsblame
View source
b69ab311/**
b69ab312 * Copyright (c) Meta Platforms, Inc. and affiliates.
b69ab313 *
b69ab314 * This source code is licensed under the MIT license found in the
b69ab315 * LICENSE file in the root directory of this source tree.
b69ab316 */
b69ab317
b69ab318import {deserialize, serialize} from '../serialize';
b69ab319
b69ab3110describe('serialize', () => {
b69ab3111 it('map', () => {
b69ab3112 const map = new Map([
b69ab3113 [1, 'a'],
b69ab3114 [2, 'b'],
b69ab3115 ]);
b69ab3116 expect(deserialize(serialize(map))).toEqual(map);
b69ab3117 });
b69ab3118 it('set', () => {
b69ab3119 const set = new Set([1, 2, 3, 1]);
b69ab3120 expect(deserialize(serialize(set))).toEqual(set);
b69ab3121 });
b69ab3122
b69ab3123 it('nesting Maps and Sets', () => {
b69ab3124 const complex = new Map([
b69ab3125 ['a', new Set([1, 2, 3, 1])],
b69ab3126 ['b', new Set([10, 20, 10])],
b69ab3127 ]);
b69ab3128 expect(deserialize(serialize(complex))).toEqual(complex);
b69ab3129 });
b69ab3130
b69ab3131 it('Dates', () => {
b69ab3132 const date = new Date('2020-12-01');
b69ab3133 expect(deserialize(serialize(date))?.valueOf()).toBe(date.valueOf());
b69ab3134 });
b69ab3135
b69ab3136 it('nested objects', () => {
b69ab3137 const nested = {
b69ab3138 a: new Date('2020-12-01'),
b69ab3139 b: [new Set([1, 2, 3, 1]), new Set([2, 3, 4, 5])],
b69ab3140 c: {
b69ab3141 d: new Map([
b69ab3142 ['1', 1],
b69ab3143 ['2', 2],
b69ab3144 ]),
b69ab3145 e: 'just a regular primitive',
b69ab3146 f: 2,
b69ab3147 g: [
b69ab3148 {
b69ab3149 a: new Set([1, 2, 3, 4]),
b69ab3150 },
b69ab3151 {a: new Set([1, 2, 3, 4])},
b69ab3152 ],
b69ab3153 },
b69ab3154 };
b69ab3155 expect(deserialize(serialize(nested))).toEqual(nested);
b69ab3156 });
b69ab3157
b69ab3158 it('undefined is preserved', () => {
b69ab3159 expect(deserialize(serialize(undefined))).toEqual(undefined);
b69ab3160 });
b69ab3161
b69ab3162 it('objects without a prototype', () => {
b69ab3163 const o = Object.create(null);
b69ab3164 o.a = 123;
b69ab3165 expect(deserialize(serialize(o))).toEqual({a: 123});
b69ab3166 });
b69ab3167
b69ab3168 it('errors', () => {
b69ab3169 expect(deserialize(serialize(new Error('this is my error\nwow')))).toEqual(
b69ab3170 new Error('this is my error\nwow'),
b69ab3171 );
b69ab3172 });
b69ab3173});