• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2022 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 #ifndef ECMASCRIPT_TESTS_CONTAINERS_TEST_HELPER_H
17 #define ECMASCRIPT_TESTS_CONTAINERS_TEST_HELPER_H
18 
19 #include "ecmascript/containers/containers_private.h"
20 #include "ecmascript/ecma_runtime_call_info.h"
21 #include "ecmascript/global_env.h"
22 #include "ecmascript/js_api/js_api_list.h"
23 #include "ecmascript/js_api/js_api_list_iterator.h"
24 #include "ecmascript/js_handle.h"
25 #include "ecmascript/js_tagged_value-inl.h"
26 #include "ecmascript/js_thread.h"
27 #include "ecmascript/object_factory.h"
28 #include "ecmascript/tests/test_helper.h"
29 #include "ecmascript/ecma_vm.h"
30 #include "ecmascript/global_env.h"
31 #include "ecmascript/js_function.h"
32 #include "ecmascript/js_proxy.h"
33 
34 namespace panda::ecmascript {
JSObjectTestCreate(JSThread * thread)35     static JSFunction *JSObjectTestCreate(JSThread *thread)
36     {
37         EcmaVM *ecmaVM = thread->GetEcmaVM();
38         JSHandle<GlobalEnv> globalEnv = ecmaVM->GetGlobalEnv();
39         return globalEnv->GetObjectFunction().GetObject<JSFunction>();
40     }
CreateJSProxyHandle(JSThread * thread)41     [[maybe_unused]] static JSHandle<JSProxy> CreateJSProxyHandle(JSThread *thread)
42     {
43         JSHandle<JSTaggedValue> hclass(thread, JSObjectTestCreate(thread));
44         JSHandle<JSTaggedValue> targetHandle(
45             thread->GetEcmaVM()->GetFactory()->NewJSObjectByConstructor(JSHandle<JSFunction>::Cast(hclass), hclass));
46         JSHandle<JSTaggedValue> handlerHandle(
47             thread->GetEcmaVM()->GetFactory()->NewJSObjectByConstructor(JSHandle<JSFunction>::Cast(hclass), hclass));
48         return JSProxy::ProxyCreate(thread, targetHandle, handlerHandle);
49     }
50 } // namespace panda::ecmascript
51 
52 namespace panda::test {
53 using panda::ecmascript::EcmaRuntimeCallInfo;
54 
55 // NOLINTNEXTLINE(cppcoreguidelines-macro-usage)
56 #define CONTAINERS_API_EXCEPTION_TEST(className, methodName, callInfoName)          \
57 {                                                                                   \
58     [[maybe_unused]] auto testPrev = TestHelper::SetupFrame(thread, callInfoName);  \
59     JSTaggedValue testResult = className::methodName(callInfoName);                 \
60     TestHelper::TearDownFrame(thread, testPrev);                                    \
61     EXPECT_EQ(testResult, JSTaggedValue::Exception());                              \
62     EXPECT_EXCEPTION();                                                             \
63 }
64 
65 // NOLINTNEXTLINE(cppcoreguidelines-macro-usage)
66 #define CONTAINERS_API_TYPE_MISMATCH_EXCEPTION_TEST(className, methodName)   \
67 {                                                                            \
68     auto callInfo = NewEmptyCallInfo(thread);                                \
69     CONTAINERS_API_EXCEPTION_TEST(className, methodName, callInfo);          \
70 }
71 
NewEmptyCallInfo(JSThread * thread)72 [[maybe_unused]] static EcmaRuntimeCallInfo* NewEmptyCallInfo(JSThread *thread)
73 {
74     auto callInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread, JSTaggedValue::Undefined(), 8);
75     callInfo->SetFunction(JSTaggedValue::Undefined());
76     callInfo->SetThis(JSTaggedValue::Undefined());
77     callInfo->SetCallArg(0, JSTaggedValue::Hole());
78     callInfo->SetCallArg(1, JSTaggedValue::Hole());
79     return callInfo;
80 }
81 } // namespace panda::test
82 
83 #endif // ECMASCRIPT_TESTS_CONTAINERS_TEST_HELPER_H
84