Skip to content

Commit 04b2639

Browse files
edusperonivmutafov
authored andcommitted
test: add timer tests
1 parent 096b51d commit 04b2639

File tree

2 files changed

+125
-1
lines changed

2 files changed

+125
-1
lines changed

test-app/app/src/main/assets/app/mainpage.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,4 +66,5 @@ require("./tests/kotlin/extensions/testExtensionFunctionsSupport");
6666
require("./tests/kotlin/enums/testEnumsSupport");
6767
require("./tests/kotlin/access/testInternalLanguageFeaturesSupport");
6868
require("./tests/testPackagePrivate");
69-
require("./tests/kotlin/properties/testPropertiesSupport.js")
69+
require("./tests/kotlin/properties/testPropertiesSupport.js");
70+
require('./tests/testNativeTimers');
Lines changed: 123 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,123 @@
1+
describe('native timer', () => {
2+
3+
/** @type {global.setTimeout} */
4+
let setTimeout = global.__ns__setTimeout;
5+
/** @type {global.setInterval} */
6+
let setInterval = global.__ns__setInterval; /** @type global.setTimeout */
7+
/** @type {global.clearTimeout} */
8+
let clearTimeout = global.__ns__clearTimeout;
9+
/** @type {global.clearInterval} */
10+
let clearInterval = global.__ns__clearInterval;
11+
12+
it('exists', () => {
13+
expect(setTimeout).toBeDefined();
14+
expect(setInterval).toBeDefined();
15+
expect(clearTimeout).toBeDefined();
16+
expect(clearInterval).toBeDefined();
17+
});
18+
19+
it('triggers timeout', (done) => {
20+
const now = Date.now();
21+
setTimeout(() => {
22+
expect(Date.now() - now).not.toBeLessThan(100);
23+
done();
24+
}, 100);
25+
});
26+
27+
it('triggers timeout', (done) => {
28+
const now = Date.now();
29+
setTimeout(() => {
30+
expect(Date.now() - now).not.toBeLessThan(100);
31+
done();
32+
}, 100);
33+
});
34+
35+
it('triggers interval', (done) => {
36+
let calls = 0;
37+
const itv = setInterval(() => {
38+
calls++;
39+
}, 100);
40+
setTimeout(() => {
41+
clearInterval(itv);
42+
expect(calls).toBe(10);
43+
done();
44+
}, 1000);
45+
});
46+
47+
it('cancels timeout', (done) => {
48+
let triggered = false;
49+
const now = Date.now();
50+
const timeout = setTimeout(() => {
51+
triggered = true;
52+
}, 100);
53+
clearTimeout(timeout);
54+
setTimeout(() => {
55+
expect(triggered).toBe(false);
56+
done();
57+
}, 200);
58+
});
59+
60+
it('cancels interval', (done) => {
61+
let triggered = false;
62+
const now = Date.now();
63+
const timeout = setInterval(() => {
64+
triggered = true;
65+
}, 100);
66+
clearInterval(timeout);
67+
setTimeout(() => {
68+
expect(triggered).toBe(false);
69+
done();
70+
}, 200);
71+
});
72+
73+
it('cancels interval inside function', (done) => {
74+
let calls = 0;
75+
const itv = setInterval(() => {
76+
calls++;
77+
clearInterval(itv);
78+
}, 10);
79+
setTimeout(() => {
80+
expect(calls).toBe(1);
81+
done();
82+
}, 100);
83+
});
84+
85+
it('preserves order', (done) => {
86+
let calls = 0;
87+
setTimeout(() => {
88+
expect(calls).toBe(0);
89+
calls++;
90+
});
91+
setTimeout(() => {
92+
expect(calls).toBe(1);
93+
calls++;
94+
done();
95+
});
96+
});
97+
it('frees up resources after complete', (done) => {
98+
let timeout = 0;
99+
let interval = 0;
100+
let weakRef;
101+
{
102+
let obj = {
103+
value: 0
104+
};
105+
weakRef = new WeakRef(obj);
106+
timeout = setTimeout(() => {
107+
obj.value++;
108+
}, 100);
109+
interval = setInterval(() => {
110+
obj.value++;
111+
}, 50);
112+
}
113+
setTimeout(() => {
114+
// use !! here because if you pass weakRef.get() it creates a strong reference (side effect of expect)
115+
expect(!!weakRef.get()).toBe(true);
116+
clearInterval(interval);
117+
clearTimeout(timeout);
118+
gc();
119+
expect(!!weakRef.get()).toBe(false);
120+
done();
121+
}, 200);
122+
})
123+
});

0 commit comments

Comments
 (0)