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