• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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