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();