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 #include "require_module_tdd_test.h"
17 #include "internal/jsi_internal.h"
18 #include "jerryscript.h"
19 #include "jsi.h"
20 #include "module_manager.h"
21
22 namespace OHOS {
23 namespace ACELite {
RequireModuleTddTest()24 RequireModuleTddTest::RequireModuleTddTest() : moduleManager_(nullptr) {}
25
SetUp()26 void RequireModuleTddTest::SetUp()
27 {
28 jerry_init(JERRY_INIT_EMPTY);
29 moduleManager_ = ModuleManager::GetInstance();
30 }
31
TearDown()32 void RequireModuleTddTest::TearDown()
33 {
34 moduleManager_->CleanUpModule();
35 moduleManager_->OnTerminate();
36 jerry_cleanup();
37 }
38
RequireModuleTest001()39 void RequireModuleTddTest::RequireModuleTest001()
40 {
41 TDD_CASE_BEGIN();
42 /**
43 * @tc.steps: step1. require a module with module name registered
44 */
45 const char *moduleName = "system.app";
46 JSIValue moduleRequired = moduleManager_->RequireModule(moduleName);
47 /**
48 * @tc.expected: step1. moduleRequired is not undefined
49 */
50 EXPECT_FALSE(JSI::ValueIsUndefined(moduleRequired));
51 JSI::ReleaseValue(moduleRequired);
52 TDD_CASE_END();
53 }
54
RequireModuleTest002()55 void RequireModuleTddTest::RequireModuleTest002()
56 {
57 TDD_CASE_BEGIN();
58 /**
59 * @tc.steps: step1. require a module with module name unregistered
60 */
61 const char *moduleName = "system.unregistered";
62 JSIValue moduleRequired = moduleManager_->RequireModule(moduleName);
63 /**
64 * @tc.expected: step1. moduleRequired is undefined
65 */
66 EXPECT_TRUE(JSI::ValueIsUndefined(moduleRequired));
67 JSI::ReleaseValue(moduleRequired);
68 TDD_CASE_END();
69 }
70
RequireModuleTest003()71 void RequireModuleTddTest::RequireModuleTest003()
72 {
73 TDD_CASE_BEGIN();
74 /**
75 * @tc.steps: step1. require a module with incorrect category
76 */
77 const char *moduleName = "service.app";
78 JSIValue moduleRequired = moduleManager_->RequireModule(moduleName);
79 /**
80 * @tc.expected: step1. moduleRequired is undefined
81 */
82 EXPECT_TRUE(JSI::ValueIsUndefined(moduleRequired));
83 JSI::ReleaseValue(moduleRequired);
84 TDD_CASE_END();
85 }
86
RequireModuleTest004()87 void RequireModuleTddTest::RequireModuleTest004()
88 {
89 TDD_CASE_BEGIN();
90 /**
91 * @tc.steps: step1. require a module with illegal module name
92 */
93 const char *moduleName = "illegal";
94 JSIValue moduleRequired = moduleManager_->RequireModule(moduleName);
95 /**
96 * @tc.expected: step1. moduleRequired is undefined
97 */
98 EXPECT_TRUE(JSI::ValueIsUndefined(moduleRequired));
99 JSI::ReleaseValue(moduleRequired);
100 TDD_CASE_END();
101 }
102
RequireModuleTest005()103 void RequireModuleTddTest::RequireModuleTest005()
104 {
105 TDD_CASE_BEGIN();
106 /**
107 * @tc.steps: step1. require app module
108 */
109 const char *moduleName = "system.app";
110 JSIValue moduleRequired = moduleManager_->RequireModule(moduleName);
111 /**
112 * @tc.expected: step1. moduleRequired is not undefined
113 */
114 EXPECT_FALSE(JSI::ValueIsUndefined(moduleRequired));
115 /**
116 * @tc.steps: step2. get "getInfo" property of moduleRequired
117 */
118 const char *funcName = "getInfo";
119 JSIValue jFunc = JSI::GetNamedProperty(moduleRequired, funcName);
120 /**
121 * @tc.expected: step2. jFunc is not undefined
122 */
123 EXPECT_FALSE(JSI::ValueIsUndefined(jFunc));
124 /**
125 * @tc.steps: step3. call jFunc and the value returned is undefined
126 */
127 jerry_value_t jResult = jerry_call_function(AS_JERRY_VALUE(jFunc), AS_JERRY_VALUE(moduleRequired), nullptr, 0);
128 JSIValue result = AS_JSI_VALUE(jResult);
129 /**
130 * @tc.expected: step3. AppModule native function will be called an result is undefined
131 */
132 EXPECT_TRUE(JSI::ValueIsUndefined(result));
133 JSI::ReleaseValueList(moduleRequired, jFunc, result);
134 TDD_CASE_END();
135 }
136
RequireModuleTest006()137 void RequireModuleTddTest::RequireModuleTest006()
138 {
139 TDD_CASE_BEGIN();
140 /**
141 * @tc.steps: step1. require app module
142 */
143 const char *moduleName = "system.app";
144 JSIValue moduleRequired = moduleManager_->RequireModule(moduleName);
145 /**
146 * @tc.expected: step1. moduleRequired is not undefined
147 */
148 EXPECT_FALSE(JSI::ValueIsUndefined(moduleRequired));
149 /**
150 * @tc.steps: step2. get "terminate" property of moduleRequired
151 */
152 const char *funcName = "terminate";
153 JSIValue jFunc = JSI::GetNamedProperty(moduleRequired, funcName);
154 /**
155 * @tc.expected: step2. jFunc is not undefined
156 */
157 EXPECT_FALSE(JSI::ValueIsUndefined(jFunc));
158 /**
159 * @tc.steps: step3. call jFunc
160 */
161 jerry_value_t jResult = jerry_call_function(AS_JERRY_VALUE(jFunc), AS_JERRY_VALUE(moduleRequired), nullptr, 0);
162 JSIValue result = AS_JSI_VALUE(jResult);
163 /**
164 * @tc.expected: step3. AppModule native function will be called an result is undefined
165 */
166 EXPECT_TRUE(JSI::ValueIsUndefined(result));
167 JSI::ReleaseValueList(moduleRequired, jFunc, result);
168 TDD_CASE_END();
169 }
170
RequireModuleTest007()171 void RequireModuleTddTest::RequireModuleTest007()
172 {
173 TDD_CASE_BEGIN();
174 /**
175 * @tc.steps: step1. require router module
176 */
177 const char *moduleName = "system.router";
178 JSIValue moduleRequired = moduleManager_->RequireModule(moduleName);
179 /**
180 * @tc.expected: step1. moduleRequired is not undefined
181 */
182 EXPECT_FALSE(JSI::ValueIsUndefined(moduleRequired));
183 /**
184 * @tc.steps: step2. get "replace" property of moduleRequired
185 */
186 const char *funcName = "replace";
187 JSIValue jFunc = JSI::GetNamedProperty(moduleRequired, funcName);
188 /**
189 * @tc.expected: step2. jFunc is not undefined
190 */
191 EXPECT_FALSE(JSI::ValueIsUndefined(jFunc));
192 /**
193 * @tc.steps: step3. call jFunc
194 */
195 jerry_value_t jResult = jerry_call_function(AS_JERRY_VALUE(jFunc), AS_JERRY_VALUE(moduleRequired), nullptr, 0);
196 JSIValue result = AS_JSI_VALUE(jResult);
197 /**
198 * @tc.expected: step3. RouterModule native function will be called an result is undefined
199 */
200 EXPECT_TRUE(JSI::ValueIsError(result));
201 JSI::ReleaseValueList(moduleRequired, jFunc, result);
202 TDD_CASE_END();
203 }
204
RequireModuleTest008()205 void RequireModuleTddTest::RequireModuleTest008()
206 {
207 TDD_CASE_BEGIN();
208 /**
209 * @tc.steps: step1. require a module with module name registered which is ohos
210 */
211 const char *moduleName = "ohos.app";
212 JSIValue module = moduleManager_->RequireModule(moduleName);
213 /**
214 * @tc.expected: step1. module is not undefined
215 */
216 EXPECT_FALSE(JSI::ValueIsUndefined(module));
217 JSI::ReleaseValue(module);
218 TDD_CASE_END();
219 }
220
RunTests()221 void RequireModuleTddTest::RunTests()
222 {
223 RequireModuleTest001();
224 RequireModuleTest002();
225 RequireModuleTest003();
226 RequireModuleTest004();
227 RequireModuleTest005();
228 RequireModuleTest006();
229 RequireModuleTest007();
230 RequireModuleTest008();
231 }
232
233 #ifdef TDD_ASSERTIONS
234 /**
235 * @tc.name: RequireModuleTest001
236 * @tc.desc: Verify require a registered module.
237 */
238 HWTEST_F(RequireModuleTddTest, test001, TestSize.Level1)
239 {
240 RequireModuleTddTest::RequireModuleTest001();
241 }
242
243 /**
244 * @tc.name: RequireModuleTest002
245 * @tc.desc: Verify require an unregistered module.
246 */
247 HWTEST_F(RequireModuleTddTest, test002, TestSize.Level1)
248 {
249 RequireModuleTddTest::RequireModuleTest002();
250 }
251
252 /**
253 * @tc.name: RequireModuleTest003
254 * @tc.desc: Verify require a module with incorrect category.
255 */
256 HWTEST_F(RequireModuleTddTest, test003, TestSize.Level1)
257 {
258 RequireModuleTddTest::RequireModuleTest003();
259 }
260
261 /**
262 * @tc.name: RequireModuleTest004
263 * @tc.desc: Verify require a module with illegal module name.
264 */
265 HWTEST_F(RequireModuleTddTest, test004, TestSize.Level1)
266 {
267 RequireModuleTddTest::RequireModuleTest004();
268 }
269
270 /**
271 * @tc.name: RequireModuleTest005
272 * @tc.desc: Verify require app module, and call it's getInfo().
273 */
274 HWTEST_F(RequireModuleTddTest, test005, TestSize.Level1)
275 {
276 RequireModuleTddTest::RequireModuleTest005();
277 }
278
279 /**
280 * @tc.name: RequireModuleTest006
281 * @tc.desc: Verify require app module, and call it's terminate().
282 */
283 HWTEST_F(RequireModuleTddTest, test006, TestSize.Level1)
284 {
285 RequireModuleTddTest::RequireModuleTest006();
286 }
287
288 /**
289 * @tc.name: RequireModuleTest007
290 * @tc.desc: Verify require router module, and call it's replace().
291 */
292 HWTEST_F(RequireModuleTddTest, test007, TestSize.Level1)
293 {
294 RequireModuleTddTest::RequireModuleTest007();
295 }
296
297 /**
298 * @tc.name: RequireModuleTest008
299 * @tc.desc: Verify the ohos module importing process.
300 */
301 HWTEST_F(RequireModuleTddTest, test008, TestSize.Level1)
302 {
303 RequireModuleTddTest::RequireModuleTest008();
304 }
305 #endif
306 } // namespace ACELite
307 } // namespace OHOS
308