• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1/*
2 * Copyright (c) 2021 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 *     http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15
16/*
17 * @tc.name:promise
18 * @tc.desc:test Promise
19 * @tc.type: FUNC
20 * @tc.require: issueI5NO8G
21 */
22var p = new Promise((resolve, reject) => {
23    resolve(1479);
24})
25var p1 = Promise.reject(1357);
26var p2 = Promise.resolve(2468);
27var p3 = Promise.race([p1, p2]);
28p3.then(
29    (value) => {
30        print("resolve");
31        print(value);
32    },
33    (value) => {
34        print("reject");
35        print(value);
36    }
37)
38
39p3.catch((value) => {
40    print("catch");
41    print(value);
42})
43
44var p4 = Promise.all([p, p2]);
45p4.then(
46    (value) => {
47        print("resolve");
48        print(value);
49    },
50    (value) => {
51        print("reject");
52        print(value);
53    }
54)
55
56const original = Promise.resolve(33);
57const cast = Promise.resolve(original);
58cast.then((value) => {
59  print(`value:${value}`);
60});
61print(`original === cast ? ${original === cast}`);
62
63function testCase(description, testFn) {
64    print(`test:${description}`);
65    try {
66        testFn();
67        print("success");
68    } catch (error) {
69        console.error(`fail: ${error.message}`);
70    }
71}
72
73async function checkResolved(promise, expected) {
74    const result = await promise;
75    if (result !== expected) {
76        throw new Error(`expected ${expected},actual ${result}`);
77    }
78}
79
80async function checkRejected(promise, expectedError) {
81    try {
82        await promise;
83        throw new Error("Expected promise rejected, but actually resolved");
84    } catch (error) {
85        if (error !== expectedError && error.message !== expectedError.message) {
86            throw new Error(`expected ${expectedError},actual ${error}`);
87        }
88    }
89}
90
91
92async function runTests() {
93    testCase("1", async () => {
94        const original = Promise.resolve("original");
95        await checkResolved(Promise.resolve(original), "original");
96    });
97
98    testCase("2", async () => {
99        const rejected = Promise.reject("error");
100        await checkRejected(Promise.resolve(rejected), "error");
101    });
102
103    testCase("3", async () => {
104        const thenable = {
105            then: function(resolve) {
106                resolve("thenable");
107            }
108        };
109        await checkResolved(Promise.resolve(thenable), "thenable");
110    });
111
112    testCase("4", async () => {
113        const result = Promise.resolve(10)
114            .then(x => x * 2)
115            .then(x => x + 5);
116        await checkResolved(result, 25);
117    });
118
119    testCase("5", async () => {
120        const asyncAdd = (a, b) =>
121            new Promise(resolve => setTimeout(() => resolve(a + b), 10));
122        const result = Promise.resolve(10)
123            .then(x => asyncAdd(x, 5))
124            .then(x => asyncAdd(x, 3));
125        await checkResolved(result, 18);
126    });
127}
128runTests();