• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1
2/*
3 * Copyright (c) 2025 Huawei Device Co., Ltd.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17import { launch } from "std/concurrency"
18
19type Test = () => void;
20
21let tests = new Array<Test>(
22    setTimeoutTest,
23    clearTimeoutTest,
24    clearIntervalTestFromCallback,
25    clearIntervalFromAnotherTimer,
26    clearTimeoutFromAnotherWorkerTest,
27    sameWorkerIdTest,
28);
29
30let zeroTimeout = 0;
31let shortTimeout = 10;
32let mediumTimeout = 100;
33let longTimeout = 1000;
34
35function setTimeoutTest() {
36    let flag = false;
37    let start = Date.now();
38    setTimeout(() => {
39        arktest.assertTrue(flag);
40        arktest.assertTrue(Date.now() - start >= shortTimeout);
41    }, shortTimeout);
42    flag = true;
43}
44
45function firstTimerIdTest() {
46    let id = setTimeout(() => {}, 0);
47    arktest.assertTrue(id == 1);
48}
49
50function clearTimeoutTest() {
51    let id = setTimeout(() => { arktest.assertTrue(false); }, mediumTimeout);
52    clearTimeout(id);
53}
54
55function clearIntervalTestFromCallback() {
56    let flag = true;
57    let id: number = -1;
58    id = setInterval(() => {
59        arktest.assertTrue(flag);
60        flag = false;
61        arktest.assertTrue(id != -1);
62        clearInterval(id);
63    }, zeroTimeout);
64}
65
66function clearIntervalFromAnotherTimer() {
67    let flag = false;
68    let id = setInterval(() => { flag = true; }, shortTimeout);
69    setTimeout(() => {
70        arktest.assertTrue(flag);
71        clearInterval(id);
72    }, mediumTimeout);
73}
74
75function clearTimeoutFromAnotherWorkerTest() {
76    let id = setTimeout(() => { arktest.assertTrue(false); }, longTimeout);
77    launch<void, (i: number) => void>(clearTimeout, id);
78}
79
80function sameWorkerIdTest() {
81    let parentWorkerId = CoroutineExtras.getWorkerId();
82    setTimeout(() => { arktest.assertTrue(CoroutineExtras.getWorkerId() == parentWorkerId) }, zeroTimeout);
83}
84
85function main() {
86    firstTimerIdTest();
87    CoroutineExtras.setSchedulingPolicy(CoroutineExtras.POLICY_NON_MAIN);
88    for (let test of tests) {
89        test();
90    }
91    for (let test of tests) {
92        launch<void, () => void>(test);
93    }
94}
95