• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 "ecmascript/ecma_vm.h"
17 #include "ecmascript/global_env.h"
18 #include "ecmascript/object_factory.h"
19 #include "ecmascript/js_function.h"
20 #include "ecmascript/js_hclass.h"
21 #include "ecmascript/js_object-inl.h"
22 #include "ecmascript/jspandafile/class_info_extractor.h"
23 #include "ecmascript/tests/test_helper.h"
24 
25 using namespace panda;
26 
27 using namespace panda::ecmascript;
28 
29 namespace panda::test {
30 class SharedObjectFactoryTest : public BaseTestWithScope<false> {
31 };
32 
HWTEST_F_L0(SharedObjectFactoryTest,NewSModuleNamespaceTest001)33 HWTEST_F_L0(SharedObjectFactoryTest, NewSModuleNamespaceTest001)
34 {
35     auto vm = thread->GetEcmaVM();
36     ObjectFactory *factory = instance->GetFactory();
37     JSHandle<ModuleNamespace> np = factory->NewSModuleNamespace();
38     ModuleNamespace::PreventExtensions();
39     JSHandle<JSTaggedValue> moduleNamespaceTag = JSHandle<JSTaggedValue>::Cast(np);
40     Local<JSValueRef> moduleNamespace = JSNApiHelper::ToLocal<ModuleNamespace>(moduleNamespaceTag);
41     ASSERT_EQ(moduleNamespace->IsModuleNamespaceObject(vm), true);
42 }
43 
HWTEST_F_L0(SharedObjectFactoryTest,NewSImportEntryTest001)44 HWTEST_F_L0(SharedObjectFactoryTest, NewSImportEntryTest001)
45 {
46     ObjectFactory *factory = instance->GetFactory();
47     size_t requestIndex = 1;
48     JSHandle<EcmaString> importName = factory->NewFromASCII("importName");
49     JSHandle<EcmaString> localName = factory->NewFromASCII("localName");
50 
51     JSHandle<ImportEntry> entry = factory->NewSImportEntry(requestIndex,
52                                                            JSHandle<JSTaggedValue>::Cast(importName),
53                                                            JSHandle<JSTaggedValue>::Cast(localName));
54     ASSERT_EQ(entry->GetImportName().GetRawData(), JSHandle<JSTaggedValue>::Cast(importName)->GetRawData());
55     ASSERT_EQ(entry->GetLocalName().GetRawData(), JSHandle<JSTaggedValue>::Cast(localName)->GetRawData());
56     ASSERT_EQ(entry->GetModuleRequestIndex(), 1);
57 }
58 
HWTEST_F_L0(SharedObjectFactoryTest,NewSLocalExportEntryTest001)59 HWTEST_F_L0(SharedObjectFactoryTest, NewSLocalExportEntryTest001)
60 {
61     ObjectFactory *factory = instance->GetFactory();
62     JSHandle<LocalExportEntry> entry =
63         factory->NewSLocalExportEntry(JSHandle<JSTaggedValue>::Cast(factory->NewFromASCII("exportName")),
64                                       JSHandle<JSTaggedValue>::Cast(factory->NewFromASCII("localName")), 1);
65     ASSERT_EQ(entry->GetExportName().GetRawData(),
66               JSHandle<JSTaggedValue>::Cast(factory->NewFromASCII("exportName"))->GetRawData());
67     ASSERT_EQ(entry->GetLocalName().GetRawData(),
68               JSHandle<JSTaggedValue>::Cast(factory->NewFromASCII("localName"))->GetRawData());
69 }
70 
HWTEST_F_L0(SharedObjectFactoryTest,NewSIndirectExportEntryTest001)71 HWTEST_F_L0(SharedObjectFactoryTest, NewSIndirectExportEntryTest001)
72 {
73     ObjectFactory *factory = instance->GetFactory();
74     JSHandle<IndirectExportEntry> entry = factory->NewSIndirectExportEntry(
75         JSHandle<JSTaggedValue>::Cast(factory->NewFromASCII("exportName")), 0,
76         JSHandle<JSTaggedValue>::Cast(factory->NewFromASCII("importName")));
77     ASSERT_EQ(entry->GetExportName().GetRawData(),
78               JSHandle<JSTaggedValue>::Cast(factory->NewFromASCII("exportName"))->GetRawData());
79     ASSERT_EQ(entry->GetImportName().GetRawData(),
80               JSHandle<JSTaggedValue>::Cast(factory->NewFromASCII("importName"))->GetRawData());
81     ASSERT_EQ(entry->GetModuleRequestIndex(), 0);
82 }
83 
HWTEST_F_L0(SharedObjectFactoryTest,NewSStarExportEntryTest001)84 HWTEST_F_L0(SharedObjectFactoryTest, NewSStarExportEntryTest001)
85 {
86     ObjectFactory *factory = instance->GetFactory();
87 
88     JSHandle<StarExportEntry> entry = factory->NewSStarExportEntry(0);
89     ASSERT_EQ(entry->GetModuleRequestIndex(), 0);
90 }
91 
HWTEST_F_L0(SharedObjectFactoryTest,NewSResolvedIndexBindingRecordTest001)92 HWTEST_F_L0(SharedObjectFactoryTest, NewSResolvedIndexBindingRecordTest001)
93 {
94     ObjectFactory *factory = instance->GetFactory();
95     JSHandle<ResolvedIndexBinding> record = factory->NewSResolvedIndexBindingRecord();
96     ASSERT_NE(record->GetModule().GetRawData(), JSTaggedValue::Exception().GetRawData());
97 }
98 
HWTEST_F_L0(SharedObjectFactoryTest,NewSResolvedIndexBindingRecordTest002)99 HWTEST_F_L0(SharedObjectFactoryTest, NewSResolvedIndexBindingRecordTest002)
100 {
101     ObjectFactory *factory = instance->GetFactory();
102     JSHandle<JSTaggedValue> undefinedValue = thread->GlobalConstants()->GetHandledUndefined();
103     JSHandle<SourceTextModule> ecmaModule(undefinedValue);
104     JSHandle<ResolvedIndexBinding> record = factory->NewSResolvedIndexBindingRecord(ecmaModule, 2);
105     ASSERT_NE(record->GetModule().GetRawData(), JSTaggedValue::Exception().GetRawData());
106 }
107 
HWTEST_F_L0(SharedObjectFactoryTest,NewSResolvedBindingRecordTest001)108 HWTEST_F_L0(SharedObjectFactoryTest, NewSResolvedBindingRecordTest001)
109 {
110     ObjectFactory *factory = instance->GetFactory();
111     JSHandle<ResolvedRecordBinding> record = factory->NewSResolvedRecordBindingRecord();
112     JSHandle<JSTaggedValue> undefinedValue = thread->GlobalConstants()->GetHandledUndefined();
113     ASSERT_EQ(record->GetBindingName().GetRawData(), undefinedValue->GetRawData());
114 }
115 
HWTEST_F_L0(SharedObjectFactoryTest,NewSResolvedBindingRecordTest002)116 HWTEST_F_L0(SharedObjectFactoryTest, NewSResolvedBindingRecordTest002)
117 {
118     ObjectFactory *factory = instance->GetFactory();
119     JSHandle<ResolvedRecordBinding> record = factory->NewSResolvedRecordBindingRecord(
120         factory->NewFromASCII("moduleRecord"),
121         JSHandle<JSTaggedValue>::Cast(factory->NewFromASCII("bindName")));
122     ASSERT_EQ(record->GetBindingName().GetRawData(),
123               JSHandle<JSTaggedValue>::Cast(factory->NewFromASCII("bindName"))->GetRawData());
124 }
125 
HWTEST_F_L0(SharedObjectFactoryTest,CopySArrayTest001)126 HWTEST_F_L0(SharedObjectFactoryTest, CopySArrayTest001)
127 {
128     ObjectFactory *factory = instance->GetFactory();
129     JSHandle<TaggedArray> array = factory->NewTaggedArray(5);
130     JSHandle<TaggedArray> result = factory->CopySArray(array, 5, 10);
131     for (size_t i = 0; i < 5; i++)
132     {
133         ASSERT_EQ(array->Get(i).GetRawData(), result->Get(i).GetRawData());
134     }
135     for (size_t i = 5; i < 10; i++)
136     {
137         ASSERT_EQ(result->Get(i).GetRawData(), JSTaggedValue::Hole().GetRawData());
138     }
139 }
140 
HWTEST_F_L0(SharedObjectFactoryTest,CopySArrayTest002)141 HWTEST_F_L0(SharedObjectFactoryTest, CopySArrayTest002)
142 {
143     ObjectFactory *factory = instance->GetFactory();
144     JSHandle<TaggedArray> array = factory->NewTaggedArray(10);
145     JSHandle<TaggedArray> result = factory->CopySArray(array, 10, 5);
146     for (size_t i = 0; i < 5; i++)
147     {
148         ASSERT_EQ(array->Get(i).GetRawData(), result->Get(i).GetRawData());
149     }
150 }
151 
HWTEST_F_L0(SharedObjectFactoryTest,CopySArrayTest003)152 HWTEST_F_L0(SharedObjectFactoryTest, CopySArrayTest003)
153 {
154     ObjectFactory *factory = instance->GetFactory();
155     JSHandle<TaggedArray> array = factory->NewTaggedArray(5);
156     JSHandle<TaggedArray> result = factory->CopySArray(array, 5, 0);
157     ASSERT_EQ(result->GetLength(), 0);
158 }
159 
HWTEST_F_L0(SharedObjectFactoryTest,NewSClassInfoExtractorTest001)160 HWTEST_F_L0(SharedObjectFactoryTest, NewSClassInfoExtractorTest001)
161 {
162     ObjectFactory *factory = instance->GetFactory();
163     JSHandle<ClassInfoExtractor> info =
164         factory->NewSClassInfoExtractor(JSHandle<JSTaggedValue>::Cast(factory->NewFromASCII("method")));
165     ASSERT_EQ(info->GetConstructorMethod().GetRawData(),
166               JSHandle<JSTaggedValue>::Cast(factory->NewFromASCII("method"))->GetRawData());
167 }
168 } // namespace panda::test