Skip to content

Commit 333fcf0

Browse files
committed
split tests
1 parent 68d78e2 commit 333fcf0

14 files changed

+567
-521
lines changed

jest/tests/AnimationWrapper.test.ts

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
import { describe, expect, test, beforeEach, afterEach } from '@jest/globals';
2+
import { AnimationWrapper } from '../../src/wrapper/AnimationWrapper.ts';
3+
import { TraceUtil } from '../../src/wrapper/TraceUtil.ts';
4+
import { TAG_EXCEPTION } from '../../src/api/clone.ts';
5+
import { TextEncoder } from 'node:util';
6+
7+
global.TextEncoder = TextEncoder;
8+
9+
describe('AnimationWrapper', () => {
10+
const traceUtil = new TraceUtil();
11+
let apiAnimation: AnimationWrapper;
12+
13+
beforeEach(() => {
14+
apiAnimation = new AnimationWrapper(traceUtil);
15+
apiAnimation.wrapRequestAnimationFrame();
16+
apiAnimation.wrapCancelAnimationFrame();
17+
});
18+
19+
afterEach(() => {
20+
apiAnimation.unwrapRequestAnimationFrame();
21+
apiAnimation.unwrapCancelAnimationFrame();
22+
});
23+
24+
test('rafHistory - recorded', async () => {
25+
let typeOfArgument = '';
26+
const handler = await new Promise((resolve) => {
27+
const handler = requestAnimationFrame((time) => {
28+
typeOfArgument = typeof time;
29+
resolve(handler);
30+
});
31+
});
32+
const rec = Array.from(apiAnimation.rafHistory.values())[0];
33+
34+
expect(typeOfArgument).toBe('number');
35+
expect(apiAnimation.rafHistory.size).toBe(1);
36+
expect(rec.handler).toBe(handler);
37+
expect(rec.calls).toBe(1);
38+
expect(rec.trace.length).toBeGreaterThan(1);
39+
expect(rec.traceId.length).toBeGreaterThan(1);
40+
expect(rec.selfTime).not.toBeNull();
41+
expect(apiAnimation.callCounter.requestAnimationFrame).toBe(1);
42+
});
43+
44+
test('cafHistory - recorded', async () => {
45+
const unchanged = 0,
46+
changed = 1;
47+
let changeable = unchanged;
48+
const handler = requestAnimationFrame(() => {
49+
changeable = changed;
50+
});
51+
cancelAnimationFrame(handler);
52+
53+
const rafRec = Array.from(apiAnimation.rafHistory.values())[0];
54+
const cafRec = Array.from(apiAnimation.cafHistory.values())[0];
55+
56+
expect(changeable).toBe(unchanged);
57+
expect(apiAnimation.rafHistory.size).toBe(1);
58+
expect(apiAnimation.cafHistory.size).toBe(1);
59+
expect(cafRec.handler).toBe(handler);
60+
expect(cafRec.calls).toBe(1);
61+
expect(cafRec.trace.length).toBeGreaterThan(1);
62+
expect(cafRec.traceId.length).toBeGreaterThan(1);
63+
expect(apiAnimation.callCounter.cancelAnimationFrame).toBe(1);
64+
expect(rafRec.canceledByTraceIds?.length).toBe(1);
65+
expect(rafRec.canceledCounter).toBe(1);
66+
});
67+
68+
test('cafHistory - invalid handler', () => {
69+
cancelAnimationFrame(0);
70+
71+
const rec = Array.from(apiAnimation.cafHistory?.values())[0];
72+
73+
expect(rec.handler).toBe(TAG_EXCEPTION(0));
74+
});
75+
});

jest/tests/EvalWrapper.test.ts

Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
import { describe, expect, test, beforeEach, afterEach } from '@jest/globals';
2+
import { EvalWrapper } from '../../src/wrapper/EvalWrapper.ts';
3+
import { TimerWrapper } from '../../src/wrapper/TimerWrapper.ts';
4+
import { TraceUtil } from '../../src/wrapper/TraceUtil.ts';
5+
import { TAG_UNDEFINED } from '../../src/api/clone.ts';
6+
import { TextEncoder } from 'node:util';
7+
import {
8+
TAG_EVAL_RETURN_SET_INTERVAL,
9+
TAG_EVAL_RETURN_SET_TIMEOUT,
10+
} from '../../src/api/const.ts';
11+
12+
global.TextEncoder = TextEncoder;
13+
14+
describe('EvalWrapper', () => {
15+
const traceUtil = new TraceUtil();
16+
let apiEval: EvalWrapper;
17+
let apiTimer: TimerWrapper;
18+
19+
beforeEach(() => {
20+
apiEval = new EvalWrapper(traceUtil);
21+
apiEval.wrap();
22+
apiTimer = new TimerWrapper(traceUtil, apiEval);
23+
apiTimer.wrapSetTimeout();
24+
apiTimer.wrapSetInterval();
25+
});
26+
27+
afterEach(() => {
28+
apiEval.unwrap();
29+
apiTimer.unwrapSetTimeout();
30+
apiTimer.unwrapSetInterval();
31+
});
32+
33+
test('evalHistory - recorded', () => {
34+
const NUMBER_OF_INVOCATIONS = 2;
35+
const CODE = '(1+2)';
36+
const RESULT = 3;
37+
38+
for (let i = 0, I = NUMBER_OF_INVOCATIONS; i < I; i++) {
39+
window.eval(CODE);
40+
}
41+
expect(apiEval.evalHistory.size).toBe(1);
42+
43+
const rec = Array.from(apiEval.evalHistory.values())[0];
44+
45+
expect(rec.calls).toBe(NUMBER_OF_INVOCATIONS);
46+
expect(rec.usesLocalScope).toBe(false);
47+
expect(rec.code).toBe(CODE);
48+
expect(rec.returnedValue).toBe(RESULT);
49+
expect(rec.trace.length).toBeGreaterThan(1);
50+
expect(rec.traceId.length).toBeGreaterThan(0);
51+
expect(rec.selfTime).not.toBeNull();
52+
});
53+
54+
test('evalHistory - detects local scope usage', () => {
55+
const local_variable = 0;
56+
window.eval('(local_variable++)');
57+
58+
const rec = Array.from(apiEval.evalHistory.values())[0];
59+
60+
expect(rec.calls).toBe(1);
61+
expect(local_variable).toBe(0);
62+
expect(rec.usesLocalScope).toBe(true);
63+
expect(rec.returnedValue).toBe(TAG_UNDEFINED);
64+
});
65+
66+
test('setTimeoutHistory - isEval recorded', () => {
67+
const CODE = '(1+2)';
68+
setTimeout(CODE);
69+
const timerRec = Array.from(apiTimer.setTimeoutHistory.values())[0];
70+
const evalRec = Array.from(apiEval.evalHistory.values())[0];
71+
72+
expect(timerRec.isEval).toBe(true);
73+
expect(evalRec.code).toBe(CODE);
74+
expect(evalRec.returnedValue).toBe(TAG_EVAL_RETURN_SET_TIMEOUT);
75+
});
76+
77+
test('setIntervalHistory - isEval recorded', () => {
78+
const CODE = '(1+2)';
79+
const handler = setInterval(CODE, 123);
80+
const timerRec = Array.from(apiTimer.setIntervalHistory.values())[0];
81+
const evalRec = Array.from(apiEval.evalHistory.values())[0];
82+
83+
expect(timerRec.isEval).toBe(true);
84+
expect(evalRec.code).toBe(CODE);
85+
expect(evalRec.returnedValue).toBe(TAG_EVAL_RETURN_SET_INTERVAL);
86+
87+
clearInterval(handler);
88+
});
89+
});

0 commit comments

Comments
 (0)