1 /*
2 * Copyright (c) 2024 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 #include <string>
17 #include "jsvmtest.h"
18
19 static std::string g_scriptEvalMicrotask = R"JS(
20 evaluateMicrotask = false;
21 Promise.resolve().then(()=>{
22 evaluateMicrotask = true;
23 });
24 evaluateMicrotask
25 )JS";
26
27 // Default microtask policy is JSVM_MICROTASK_AUTO
TEST(MicrotaskPolicyDefault)28 TEST(MicrotaskPolicyDefault)
29 {
30 auto result = jsvm::Run(g_scriptEvalMicrotask.c_str());
31 CHECK(jsvm::IsFalse(result));
32 result = jsvm::GetProperty(jsvm::Global(), "evaluateMicrotask");
33 CHECK(jsvm::IsTrue(result));
34 }
35
36 // Test Set Microtask Policy to explicit
TEST(MicrotaskPolicyExplicit)37 TEST(MicrotaskPolicyExplicit)
38 {
39 OH_JSVM_SetMicrotaskPolicy(vm, JSVM_MicrotaskPolicy::JSVM_MICROTASK_EXPLICIT);
40 auto result = jsvm::Run(g_scriptEvalMicrotask.c_str());
41 CHECK(jsvm::IsFalse(result));
42 result = jsvm::GetProperty(jsvm::Global(), "evaluateMicrotask");
43 CHECK(jsvm::IsFalse(result));
44 OH_JSVM_PerformMicrotaskCheckpoint(vm);
45 result = jsvm::GetProperty(jsvm::Global(), "evaluateMicrotask");
46 CHECK(jsvm::IsTrue(result));
47 }
48
49 // Test Set Microtask Policy to auto
TEST(MicrotaskPolicyAuto)50 TEST(MicrotaskPolicyAuto)
51 {
52 OH_JSVM_SetMicrotaskPolicy(vm, JSVM_MicrotaskPolicy::JSVM_MICROTASK_EXPLICIT);
53 OH_JSVM_SetMicrotaskPolicy(vm, JSVM_MicrotaskPolicy::JSVM_MICROTASK_AUTO);
54 auto result = jsvm::Run(g_scriptEvalMicrotask.c_str());
55 CHECK(jsvm::IsFalse(result));
56 result = jsvm::GetProperty(jsvm::Global(), "evaluateMicrotask");
57 CHECK(jsvm::IsTrue(result));
58 }
59
TEST(SetInvalidPolicy)60 TEST(SetInvalidPolicy)
61 {
62 JSVM_MicrotaskPolicy invalidPolicy = (JSVM_MicrotaskPolicy)2;
63 auto status = OH_JSVM_SetMicrotaskPolicy(vm, invalidPolicy);
64 CHECK(status != JSVM_OK);
65 }
66