Path: blob/main/commons/test/TypeSerializer.test.ts
1028 views
import Puppet from '@secret-agent/puppet';1import BrowserEmulator from '@secret-agent/default-browser-emulator';2import TypeSerializer, { stringifiedTypeSerializerClass } from '../TypeSerializer';3import { CanceledPromiseError } from '../interfaces/IPendingWaitEvent';4import logger from '../Logger';56const { log } = logger(module);78let testObject: any;9beforeAll(() => {10testObject = {11name: 'original',12map: new Map<string, number>([13['1', 1],14['2', 2],15]),16set: new Set([1, 2, 3, 4]),17regex: /test13234/gi,18date: new Date('2021-03-17T15:41:06.513Z'),19buffer: Buffer.from('This is a test buffer'),20error: new CanceledPromiseError('This is canceled'),21};2223testObject.nestedObject = { ...testObject, name: 'nested' };24testObject.nestedArray = [25{ ...testObject, name: 'item1' },26{ ...testObject, name: 'item2' },27];28});2930test('it should be able to serialize a complex object in nodejs', () => {31const result = TypeSerializer.stringify(testObject);32expect(typeof result).toBe('string');33const decoded = TypeSerializer.parse(result);34expect(decoded).toEqual(testObject);35});3637test('should be able to serialize and deserialize in a browser window', async () => {38const { browserEngine } = BrowserEmulator.selectBrowserMeta();39const puppet = new Puppet(browserEngine);40try {41await puppet.start();42const context = await puppet.newContext(43{44userAgentString: 'Page tests',45async onNewPuppetPage(): Promise<any> {46return null;47},48} as any,49log,50);51const page = await context.newPage();52await page.evaluate(`${stringifiedTypeSerializerClass}`);53const serialized = TypeSerializer.stringify(testObject);5455const result = await page.evaluate<any>(`(function() {56const decodedInClient = TypeSerializer.parse(JSON.stringify(${serialized}));57return TypeSerializer.stringify(decodedInClient);58})()`);59expect(typeof result).toBe('string');60const decoded = TypeSerializer.parse(result);61expect(decoded).toEqual(testObject);62} finally {63await puppet.close();64}65});666768