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#include "test.h"
17#include "napi/native_api.h"
18#include "napi/native_node_api.h"
19#include "tools/log.h"
20#include "js_uri.h"
21#include "native_module_uri.h"
22
23#define ASSERT_CHECK_CALL(call)   \
24    {                             \
25        ASSERT_EQ(call, napi_ok); \
26    }
27
28#define ASSERT_CHECK_VALUE_TYPE(env, value, type)               \
29    {                                                           \
30        napi_valuetype valueType = napi_undefined;              \
31        ASSERT_TRUE(value != nullptr);                          \
32        ASSERT_CHECK_CALL(napi_typeof(env, value, &valueType)); \
33        ASSERT_EQ(valueType, type);                             \
34    }
35
36HWTEST_F(NativeEngineTest, ConstructorTest001, testing::ext::TestSize.Level0)
37{
38    OHOS::Uri::Uri uri("http://username:password@www.baidu.com:99/path/path?query#fagment");
39    ASSERT_STREQ(uri.GetScheme().c_str(), "http");
40    ASSERT_STREQ(uri.GetAuthority().c_str(), "username:password@www.baidu.com:99");
41    ASSERT_STREQ(uri.GetSsp().c_str(), "//username:password@www.baidu.com:99/path/path?query");
42    ASSERT_STREQ(uri.GetUserinfo().c_str(), "username:password");
43    ASSERT_STREQ(uri.GetHost().c_str(), "www.baidu.com");
44    ASSERT_STREQ(uri.GetPort().c_str(), "99");
45    ASSERT_STREQ(uri.GetPath().c_str(), "/path/path");
46    ASSERT_STREQ(uri.GetQuery().c_str(), "query");
47    ASSERT_STREQ(uri.GetFragment().c_str(), "fagment");
48}
49
50HWTEST_F(NativeEngineTest, ConstructorTest002, testing::ext::TestSize.Level0)
51{
52    OHOS::Uri::Uri uri("http://username:password@[1080::8:800:200C:417A]:99/path/66path1?query#fagment");
53    ASSERT_STREQ(uri.GetScheme().c_str(), "http");
54    ASSERT_STREQ(uri.GetAuthority().c_str(), "username:password@[1080::8:800:200C:417A]:99");
55    ASSERT_STREQ(uri.GetSsp().c_str(), "//username:password@[1080::8:800:200C:417A]:99/path/66path1?query");
56    ASSERT_STREQ(uri.GetUserinfo().c_str(), "username:password");
57    ASSERT_STREQ(uri.GetHost().c_str(), "[1080::8:800:200C:417A]");
58    ASSERT_STREQ(uri.GetPort().c_str(), "99");
59    ASSERT_STREQ(uri.GetPath().c_str(), "/path/66path1");
60    ASSERT_STREQ(uri.GetQuery().c_str(), "query");
61    ASSERT_STREQ(uri.GetFragment().c_str(), "fagment");
62}
63
64HWTEST_F(NativeEngineTest, ConstructorTest003, testing::ext::TestSize.Level0)
65{
66    OHOS::Uri::Uri uri("http://username:password@[::]:88/path/path66?foooo#gaogao");
67    ASSERT_STREQ(uri.GetScheme().c_str(), "http");
68    ASSERT_STREQ(uri.GetAuthority().c_str(), "username:password@[::]:88");
69    ASSERT_STREQ(uri.GetSsp().c_str(), "//username:password@[::]:88/path/path66?foooo");
70    ASSERT_STREQ(uri.GetUserinfo().c_str(), "username:password");
71    ASSERT_STREQ(uri.GetHost().c_str(), "[::]");
72    ASSERT_STREQ(uri.GetPort().c_str(), "88");
73    ASSERT_STREQ(uri.GetPath().c_str(), "/path/path66");
74    ASSERT_STREQ(uri.GetQuery().c_str(), "foooo");
75    ASSERT_STREQ(uri.GetFragment().c_str(), "gaogao");
76}
77
78HWTEST_F(NativeEngineTest, ConstructorTest004, testing::ext::TestSize.Level0)
79{
80    OHOS::Uri::Uri uri("http://username:password@[1:0:0:1:2:1:2:1]:99/path/66path1?query#fagment");
81    ASSERT_STREQ(uri.GetScheme().c_str(), "http");
82    ASSERT_STREQ(uri.GetAuthority().c_str(), "username:password@[1:0:0:1:2:1:2:1]:99");
83    ASSERT_STREQ(uri.GetSsp().c_str(), "//username:password@[1:0:0:1:2:1:2:1]:99/path/66path1?query");
84    ASSERT_STREQ(uri.GetUserinfo().c_str(), "username:password");
85    ASSERT_STREQ(uri.GetHost().c_str(), "[1:0:0:1:2:1:2:1]");
86    ASSERT_STREQ(uri.GetPort().c_str(), "99");
87    ASSERT_STREQ(uri.GetPath().c_str(), "/path/66path1");
88    ASSERT_STREQ(uri.GetQuery().c_str(), "query");
89    ASSERT_STREQ(uri.GetFragment().c_str(), "fagment");
90}
91
92HWTEST_F(NativeEngineTest, ConstructorTest005, testing::ext::TestSize.Level0)
93{
94    OHOS::Uri::Uri uri("http://username:password@[::FFFF:129.144.52.38]:99/path/path?query#fagment");
95    ASSERT_STREQ(uri.GetScheme().c_str(), "http");
96    ASSERT_STREQ(uri.GetAuthority().c_str(), "username:password@[::FFFF:129.144.52.38]:99");
97    ASSERT_STREQ(uri.GetSsp().c_str(), "//username:password@[::FFFF:129.144.52.38]:99/path/path?query");
98    ASSERT_STREQ(uri.GetUserinfo().c_str(), "username:password");
99    ASSERT_STREQ(uri.GetHost().c_str(), "[::FFFF:129.144.52.38]");
100    ASSERT_STREQ(uri.GetPort().c_str(), "99");
101    ASSERT_STREQ(uri.GetPath().c_str(), "/path/path");
102    ASSERT_STREQ(uri.GetQuery().c_str(), "query");
103    ASSERT_STREQ(uri.GetFragment().c_str(), "fagment");
104}
105
106HWTEST_F(NativeEngineTest, ConstructorTest006, testing::ext::TestSize.Level0)
107{
108    OHOS::Uri::Uri uri("http://username:password@[::192.9.5.5]:99/path/path?query#fagment");
109    ASSERT_STREQ(uri.GetScheme().c_str(), "http");
110    ASSERT_STREQ(uri.GetAuthority().c_str(), "username:password@[::192.9.5.5]:99");
111    ASSERT_STREQ(uri.GetSsp().c_str(), "//username:password@[::192.9.5.5]:99/path/path?query");
112    ASSERT_STREQ(uri.GetUserinfo().c_str(), "username:password");
113    ASSERT_STREQ(uri.GetHost().c_str(), "[::192.9.5.5]");
114    ASSERT_STREQ(uri.GetPort().c_str(), "99");
115    ASSERT_STREQ(uri.GetPath().c_str(), "/path/path");
116    ASSERT_STREQ(uri.GetQuery().c_str(), "query");
117    ASSERT_STREQ(uri.GetFragment().c_str(), "fagment");
118}
119
120HWTEST_F(NativeEngineTest, ConstructorTest007, testing::ext::TestSize.Level0)
121{
122    OHOS::Uri::Uri uri("http://username:password@[22::22:2:2%ss]:99/path/path?query#fagment");
123    ASSERT_STREQ(uri.GetScheme().c_str(), "http");
124    ASSERT_STREQ(uri.GetAuthority().c_str(), "username:password@[22::22:2:2%ss]:99");
125    ASSERT_STREQ(uri.GetSsp().c_str(), "//username:password@[22::22:2:2%ss]:99/path/path?query");
126    ASSERT_STREQ(uri.GetUserinfo().c_str(), "username:password");
127    ASSERT_STREQ(uri.GetHost().c_str(), "[22::22:2:2%ss]");
128    ASSERT_STREQ(uri.GetPort().c_str(), "99");
129    ASSERT_STREQ(uri.GetPath().c_str(), "/path/path");
130    ASSERT_STREQ(uri.GetQuery().c_str(), "query");
131    ASSERT_STREQ(uri.GetFragment().c_str(), "fagment");
132}
133
134HWTEST_F(NativeEngineTest, ConstructorTest008, testing::ext::TestSize.Level0)
135{
136    OHOS::Uri::Uri uri("http://username:password@[fe80:0000:0001:0000:0440:44ff:1233:5678]"
137                        ":99/path/path?query#fagment");
138    ASSERT_STREQ(uri.GetScheme().c_str(), "http");
139    ASSERT_STREQ(uri.GetAuthority().c_str(), "username:password@[fe80:0000:0001:0000:0440:44ff:1233:5678]:99");
140    ASSERT_STREQ(uri.GetSsp().c_str(), "//username:password@[fe80:0000:0001:0000:0440:44ff:1233:5678]"
141                ":99/path/path?query");
142    ASSERT_STREQ(uri.GetUserinfo().c_str(), "username:password");
143    ASSERT_STREQ(uri.GetHost().c_str(), "[fe80:0000:0001:0000:0440:44ff:1233:5678]");
144    ASSERT_STREQ(uri.GetPort().c_str(), "99");
145    ASSERT_STREQ(uri.GetPath().c_str(), "/path/path");
146    ASSERT_STREQ(uri.GetQuery().c_str(), "query");
147    ASSERT_STREQ(uri.GetFragment().c_str(), "fagment");
148}
149
150HWTEST_F(NativeEngineTest, ConstructorTest009, testing::ext::TestSize.Level0)
151{
152    OHOS::Uri::Uri uri("http://username:password@[fe80::0001:0000]:99/path/path?query#fagment");
153    ASSERT_STREQ(uri.GetScheme().c_str(), "http");
154    ASSERT_STREQ(uri.GetAuthority().c_str(), "username:password@[fe80::0001:0000]:99");
155    ASSERT_STREQ(uri.GetSsp().c_str(), "//username:password@[fe80::0001:0000]:99/path/path?query");
156    ASSERT_STREQ(uri.GetUserinfo().c_str(), "username:password");
157    ASSERT_STREQ(uri.GetHost().c_str(), "[fe80::0001:0000]");
158    ASSERT_STREQ(uri.GetPort().c_str(), "99");
159    ASSERT_STREQ(uri.GetPath().c_str(), "/path/path");
160    ASSERT_STREQ(uri.GetQuery().c_str(), "query");
161    ASSERT_STREQ(uri.GetFragment().c_str(), "fagment");
162}
163
164HWTEST_F(NativeEngineTest, ConstructorTest010, testing::ext::TestSize.Level0)
165{
166    OHOS::Uri::Uri uri("http://username:password@www.baidu.com:99/path/path?query#fagment");
167    ASSERT_STREQ(uri.GetScheme().c_str(), "http");
168    ASSERT_STREQ(uri.GetAuthority().c_str(), "username:password@www.baidu.com:99");
169    ASSERT_STREQ(uri.GetSsp().c_str(), "//username:password@www.baidu.com:99/path/path?query");
170    ASSERT_STREQ(uri.GetUserinfo().c_str(), "username:password");
171    ASSERT_STREQ(uri.GetHost().c_str(), "www.baidu.com");
172    ASSERT_STREQ(uri.GetPort().c_str(), "99");
173    ASSERT_STREQ(uri.GetPath().c_str(), "/path/path");
174    ASSERT_STREQ(uri.GetQuery().c_str(), "query");
175    ASSERT_STREQ(uri.GetFragment().c_str(), "fagment");
176}
177
178HWTEST_F(NativeEngineTest, ConstructorTest011, testing::ext::TestSize.Level0)
179{
180    OHOS::Uri::Uri uri("http://username:password@199.98.55.44:99/path/path?query#fagment");
181    ASSERT_STREQ(uri.GetScheme().c_str(), "http");
182    ASSERT_STREQ(uri.GetAuthority().c_str(), "username:password@199.98.55.44:99");
183    ASSERT_STREQ(uri.GetSsp().c_str(), "//username:password@199.98.55.44:99/path/path?query");
184    ASSERT_STREQ(uri.GetUserinfo().c_str(), "username:password");
185    ASSERT_STREQ(uri.GetHost().c_str(), "199.98.55.44");
186    ASSERT_STREQ(uri.GetPort().c_str(), "99");
187    ASSERT_STREQ(uri.GetPath().c_str(), "/path/path");
188    ASSERT_STREQ(uri.GetQuery().c_str(), "query");
189    ASSERT_STREQ(uri.GetFragment().c_str(), "fagment");
190}
191
192HWTEST_F(NativeEngineTest, ConstructorTest012, testing::ext::TestSize.Level0)
193{
194    OHOS::Uri::Uri uri("http://16.9.5.4:99/path/path?query#fagment");
195    ASSERT_STREQ(uri.GetScheme().c_str(), "http");
196    ASSERT_STREQ(uri.GetAuthority().c_str(), "16.9.5.4:99");
197    ASSERT_STREQ(uri.GetSsp().c_str(), "//16.9.5.4:99/path/path?query");
198    ASSERT_STREQ(uri.GetUserinfo().c_str(), "");
199    ASSERT_STREQ(uri.GetHost().c_str(), "16.9.5.4");
200    ASSERT_STREQ(uri.GetPort().c_str(), "99");
201    ASSERT_STREQ(uri.GetPath().c_str(), "/path/path");
202    ASSERT_STREQ(uri.GetQuery().c_str(), "query");
203    ASSERT_STREQ(uri.GetFragment().c_str(), "fagment");
204}
205
206HWTEST_F(NativeEngineTest, ConstructorTest013, testing::ext::TestSize.Level0)
207{
208    OHOS::Uri::Uri uri("http://[::168:169:333]:99/path/path?query#fagment");
209    ASSERT_STREQ(uri.GetScheme().c_str(), "http");
210    ASSERT_STREQ(uri.GetAuthority().c_str(), "[::168:169:333]:99");
211    ASSERT_STREQ(uri.GetSsp().c_str(), "//[::168:169:333]:99/path/path?query");
212    ASSERT_STREQ(uri.GetUserinfo().c_str(), "");
213    ASSERT_STREQ(uri.GetHost().c_str(), "[::168:169:333]");
214    ASSERT_STREQ(uri.GetPort().c_str(), "99");
215    ASSERT_STREQ(uri.GetPath().c_str(), "/path/path");
216    ASSERT_STREQ(uri.GetQuery().c_str(), "query");
217    ASSERT_STREQ(uri.GetFragment().c_str(), "fagment");
218}
219
220HWTEST_F(NativeEngineTest, ConstructorTest014, testing::ext::TestSize.Level0)
221{
222    OHOS::Uri::Uri uri("http://user@49.10hh8.54.12:80/path/path?query#qwer");
223    ASSERT_STREQ(uri.GetScheme().c_str(), "http");
224    ASSERT_STREQ(uri.GetAuthority().c_str(), "user@49.10hh8.54.12:80");
225    ASSERT_STREQ(uri.GetSsp().c_str(), "//user@49.10hh8.54.12:80/path/path?query");
226    ASSERT_STREQ(uri.GetUserinfo().c_str(), "");
227    ASSERT_STREQ(uri.GetHost().c_str(), "");
228    ASSERT_STREQ(uri.GetPort().c_str(), "-1");
229    ASSERT_STREQ(uri.GetPath().c_str(), "/path/path");
230    ASSERT_STREQ(uri.GetQuery().c_str(), "query");
231    ASSERT_STREQ(uri.GetFragment().c_str(), "qwer");
232}
233
234HWTEST_F(NativeEngineTest, ConstructorTest015, testing::ext::TestSize.Level0)
235{
236    OHOS::Uri::Uri uri("http://user@www.baidu.com/path/path?query#qwer");
237    ASSERT_STREQ(uri.GetScheme().c_str(), "http");
238    ASSERT_STREQ(uri.GetAuthority().c_str(), "user@www.baidu.com");
239    ASSERT_STREQ(uri.GetSsp().c_str(), "//user@www.baidu.com/path/path?query");
240    ASSERT_STREQ(uri.GetUserinfo().c_str(), "user");
241    ASSERT_STREQ(uri.GetHost().c_str(), "www.baidu.com");
242    ASSERT_STREQ(uri.GetPort().c_str(), "-1");
243    ASSERT_STREQ(uri.GetPath().c_str(), "/path/path");
244    ASSERT_STREQ(uri.GetQuery().c_str(), "query");
245    ASSERT_STREQ(uri.GetFragment().c_str(), "qwer");
246}
247
248HWTEST_F(NativeEngineTest, ConstructorTest016, testing::ext::TestSize.Level0)
249{
250    OHOS::Uri::Uri uri("ftp://user@www.1hw.1com:77/path/path?query#qwer");
251    ASSERT_STREQ(uri.GetScheme().c_str(), "ftp");
252    ASSERT_STREQ(uri.GetAuthority().c_str(), "user@www.1hw.1com:77");
253    ASSERT_STREQ(uri.GetSsp().c_str(), "//user@www.1hw.1com:77/path/path?query");
254    ASSERT_STREQ(uri.GetUserinfo().c_str(), "");
255    ASSERT_STREQ(uri.GetHost().c_str(), "");
256    ASSERT_STREQ(uri.GetPort().c_str(), "-1");
257    ASSERT_STREQ(uri.GetPath().c_str(), "/path/path");
258    ASSERT_STREQ(uri.GetQuery().c_str(), "query");
259    ASSERT_STREQ(uri.GetFragment().c_str(), "qwer");
260}
261
262HWTEST_F(NativeEngineTest, ConstructorTest017, testing::ext::TestSize.Level0)
263{
264    OHOS::Uri::Uri uri("http://user@hosthost/path/path?query#qwer");
265    ASSERT_STREQ(uri.GetScheme().c_str(), "http");
266    ASSERT_STREQ(uri.GetAuthority().c_str(), "user@hosthost");
267    ASSERT_STREQ(uri.GetSsp().c_str(), "//user@hosthost/path/path?query");
268    ASSERT_STREQ(uri.GetUserinfo().c_str(), "user");
269    ASSERT_STREQ(uri.GetHost().c_str(), "hosthost");
270    ASSERT_STREQ(uri.GetPort().c_str(), "-1");
271    ASSERT_STREQ(uri.GetPath().c_str(), "/path/path");
272    ASSERT_STREQ(uri.GetQuery().c_str(), "query");
273    ASSERT_STREQ(uri.GetFragment().c_str(), "qwer");
274}
275
276HWTEST_F(NativeEngineTest, ConstructorTest018, testing::ext::TestSize.Level0)
277{
278    OHOS::Uri::Uri uri("http://user@[::]/path/path?query#qwer");
279    ASSERT_STREQ(uri.GetScheme().c_str(), "http");
280    ASSERT_STREQ(uri.GetAuthority().c_str(), "user@[::]");
281    ASSERT_STREQ(uri.GetSsp().c_str(), "//user@[::]/path/path?query");
282    ASSERT_STREQ(uri.GetUserinfo().c_str(), "user");
283    ASSERT_STREQ(uri.GetHost().c_str(), "[::]");
284    ASSERT_STREQ(uri.GetPort().c_str(), "-1");
285    ASSERT_STREQ(uri.GetPath().c_str(), "/path/path");
286    ASSERT_STREQ(uri.GetQuery().c_str(), "query");
287    ASSERT_STREQ(uri.GetFragment().c_str(), "qwer");
288}
289
290HWTEST_F(NativeEngineTest, ConstructorTest019, testing::ext::TestSize.Level0)
291{
292    OHOS::Uri::Uri uri("http://[::192:0:5]/path/path?query#qwer");
293    ASSERT_STREQ(uri.GetScheme().c_str(), "http");
294    ASSERT_STREQ(uri.GetAuthority().c_str(), "[::192:0:5]");
295    ASSERT_STREQ(uri.GetSsp().c_str(), "//[::192:0:5]/path/path?query");
296    ASSERT_STREQ(uri.GetUserinfo().c_str(), "");
297    ASSERT_STREQ(uri.GetHost().c_str(), "[::192:0:5]");
298    ASSERT_STREQ(uri.GetPort().c_str(), "-1");
299    ASSERT_STREQ(uri.GetPath().c_str(), "/path/path");
300    ASSERT_STREQ(uri.GetQuery().c_str(), "query");
301    ASSERT_STREQ(uri.GetFragment().c_str(), "qwer");
302}
303
304HWTEST_F(NativeEngineTest, ConstructorTest020, testing::ext::TestSize.Level0)
305{
306    OHOS::Uri::Uri uri("http:/username:password@www.baidu.com:99/path/path?query#fagment");
307    ASSERT_STREQ(uri.GetScheme().c_str(), "http");
308    ASSERT_STREQ(uri.GetAuthority().c_str(), "");
309    ASSERT_STREQ(uri.GetSsp().c_str(), "/username:password@www.baidu.com:99/path/path?query");
310    ASSERT_STREQ(uri.GetUserinfo().c_str(), "");
311    ASSERT_STREQ(uri.GetHost().c_str(), "");
312    ASSERT_STREQ(uri.GetPort().c_str(), "-1");
313    ASSERT_STREQ(uri.GetPath().c_str(), "/username:password@www.baidu.com:99/path/path");
314    ASSERT_STREQ(uri.GetQuery().c_str(), "query");
315    ASSERT_STREQ(uri.GetFragment().c_str(), "fagment");
316}
317
318HWTEST_F(NativeEngineTest, ConstructorTest021, testing::ext::TestSize.Level0)
319{
320    OHOS::Uri::Uri uri("http:/&username:password@[1080::8:800:200C:417A]:99/path/66path1?query#fagment");
321    ASSERT_STREQ(uri.GetScheme().c_str(), "http");
322    ASSERT_STREQ(uri.GetAuthority().c_str(), "");
323    ASSERT_STREQ(uri.GetSsp().c_str(), "/&username:password@[1080::8:800:200C:417A]:99/path/66path1?query");
324    ASSERT_STREQ(uri.GetUserinfo().c_str(), "");
325    ASSERT_STREQ(uri.GetHost().c_str(), "");
326    ASSERT_STREQ(uri.GetPort().c_str(), "-1");
327    ASSERT_STREQ(uri.GetPath().c_str(), "/&username:password@[1080::8:800:200C:417A]:99/path/66path1");
328    ASSERT_STREQ(uri.GetQuery().c_str(), "query");
329    ASSERT_STREQ(uri.GetFragment().c_str(), "fagment");
330}
331
332HWTEST_F(NativeEngineTest, ConstructorTest022, testing::ext::TestSize.Level0)
333{
334    OHOS::Uri::Uri uri("http:/[username:password@[::FFFF:129.144.52.38]:99/path/path?query#fagment");
335    ASSERT_STREQ(uri.GetScheme().c_str(), "http");
336    ASSERT_STREQ(uri.GetAuthority().c_str(), "");
337    ASSERT_STREQ(uri.GetSsp().c_str(), "/[username:password@[::FFFF:129.144.52.38]:99/path/path?query");
338    ASSERT_STREQ(uri.GetUserinfo().c_str(), "");
339    ASSERT_STREQ(uri.GetHost().c_str(), "");
340    ASSERT_STREQ(uri.GetPort().c_str(), "-1");
341    ASSERT_STREQ(uri.GetPath().c_str(), "/[username:password@[::FFFF:129.144.52.38]:99/path/path");
342    ASSERT_STREQ(uri.GetQuery().c_str(), "query");
343    ASSERT_STREQ(uri.GetFragment().c_str(), "fagment");
344}
345
346HWTEST_F(NativeEngineTest, ConstructorTest023, testing::ext::TestSize.Level0)
347{
348    OHOS::Uri::Uri uri("http:username:password@[1080::8:800:200C:417A]:99/path/66path1?query#fagment");
349    ASSERT_STREQ(uri.GetScheme().c_str(), "http");
350    ASSERT_STREQ(uri.GetAuthority().c_str(), "");
351    ASSERT_STREQ(uri.GetSsp().c_str(), "username:password@[1080::8:800:200C:417A]:99/path/66path1?query");
352    ASSERT_STREQ(uri.GetUserinfo().c_str(), "");
353    ASSERT_STREQ(uri.GetHost().c_str(), "");
354    ASSERT_STREQ(uri.GetPort().c_str(), "-1");
355    ASSERT_STREQ(uri.GetPath().c_str(), "");
356    ASSERT_STREQ(uri.GetQuery().c_str(), "");
357    ASSERT_STREQ(uri.GetFragment().c_str(), "fagment");
358}
359
360HWTEST_F(NativeEngineTest, ConstructorTest024, testing::ext::TestSize.Level0)
361{
362    OHOS::Uri::Uri uri("http:^$username:password@[::192.9.5.5]:99/path/path?query#fagment");
363    ASSERT_STREQ(uri.GetScheme().c_str(), "http");
364    ASSERT_STREQ(uri.GetAuthority().c_str(), "");
365    ASSERT_STREQ(uri.GetSsp().c_str(), "^$username:password@[::192.9.5.5]:99/path/path?query");
366    ASSERT_STREQ(uri.GetUserinfo().c_str(), "");
367    ASSERT_STREQ(uri.GetHost().c_str(), "");
368    ASSERT_STREQ(uri.GetPort().c_str(), "-1");
369    ASSERT_STREQ(uri.GetPath().c_str(), "");
370    ASSERT_STREQ(uri.GetQuery().c_str(), "");
371    ASSERT_STREQ(uri.GetFragment().c_str(), "fagment");
372}
373
374HWTEST_F(NativeEngineTest, ConstructorTest025, testing::ext::TestSize.Level0)
375{
376    OHOS::Uri::Uri uri("http:[?]username:password@[fe80::0001:0000]:99/path/path?query#fagment");
377    ASSERT_STREQ(uri.GetScheme().c_str(), "http");
378    ASSERT_STREQ(uri.GetAuthority().c_str(), "");
379    ASSERT_STREQ(uri.GetSsp().c_str(), "[?]username:password@[fe80::0001:0000]:99/path/path?query");
380    ASSERT_STREQ(uri.GetUserinfo().c_str(), "");
381    ASSERT_STREQ(uri.GetHost().c_str(), "");
382    ASSERT_STREQ(uri.GetPort().c_str(), "-1");
383    ASSERT_STREQ(uri.GetPath().c_str(), "");
384    ASSERT_STREQ(uri.GetQuery().c_str(), "");
385    ASSERT_STREQ(uri.GetFragment().c_str(), "fagment");
386}
387
388HWTEST_F(NativeEngineTest, ConstructorTest026, testing::ext::TestSize.Level0)
389{
390    OHOS::Uri::Uri uri("");
391    ASSERT_STREQ(uri.GetScheme().c_str(), "");
392    ASSERT_STREQ(uri.GetSsp().c_str(), "");
393    ASSERT_STREQ(uri.GetFragment().c_str(), "");
394    ASSERT_STREQ(uri.IsFailed().c_str(), "uri is empty");
395}
396
397HWTEST_F(NativeEngineTest, ConstructorTest027, testing::ext::TestSize.Level0)
398{
399    OHOS::Uri::Uri uri("#asd;");
400    ASSERT_STREQ(uri.IsFailed().c_str(), "#It can't be the first");
401}
402
403HWTEST_F(NativeEngineTest, ConstructorTest028, testing::ext::TestSize.Level0)
404{
405    OHOS::Uri::Uri uri("?sa^d:s#asd;");
406    ASSERT_STREQ(uri.IsFailed().c_str(), "Query does not conform to the rule");
407}
408
409HWTEST_F(NativeEngineTest, ConstructorTest029, testing::ext::TestSize.Level0)
410{
411    OHOS::Uri::Uri uri("?sad:s#a^sd;");
412    ASSERT_STREQ(uri.IsFailed().c_str(), "Fragment does not conform to the rule");
413}
414
415HWTEST_F(NativeEngineTest, ConstructorTest030, testing::ext::TestSize.Level0)
416{
417    OHOS::Uri::Uri uri("4http:/username:password@www.baidu.com:99/path/path?query#fagment");
418    ASSERT_STREQ(uri.IsFailed().c_str(), "Scheme the first character must be a letter");
419}
420
421HWTEST_F(NativeEngineTest, ConstructorTest031, testing::ext::TestSize.Level0)
422{
423    OHOS::Uri::Uri uri("ht*tp:/username:password@www.baidu.com:99/path/path?query#fagment");
424    ASSERT_STREQ(uri.GetScheme().c_str(), "ht*tp");
425}
426
427HWTEST_F(NativeEngineTest, ConstructorTest032, testing::ext::TestSize.Level0)
428{
429    OHOS::Uri::Uri uri("/usern]ame/path/path?query#fagment");
430    ASSERT_STREQ(uri.IsFailed().c_str(), "SpecialPath does not conform to the rule");
431}
432
433HWTEST_F(NativeEngineTest, ConstructorTest033, testing::ext::TestSize.Level0)
434{
435    OHOS::Uri::Uri uri("/username/path/path?query#fagment");
436    ASSERT_STREQ(uri.IsFailed().c_str(), "");
437}
438
439HWTEST_F(NativeEngineTest, ConstructorTest034, testing::ext::TestSize.Level0)
440{
441    OHOS::Uri::Uri uri("http:/userna^me:password@www.baidu.com:99/path/path?query#fagment");
442    ASSERT_STREQ(uri.IsFailed().c_str(), "");
443}
444
445HWTEST_F(NativeEngineTest, ConstructorTest035, testing::ext::TestSize.Level0)
446{
447    OHOS::Uri::Uri uri("http://?query#fagment");
448    ASSERT_STREQ(uri.GetScheme().c_str(), "http");
449}
450
451HWTEST_F(NativeEngineTest, ConstructorTest036, testing::ext::TestSize.Level0)
452{
453    OHOS::Uri::Uri uri("http:/username:password@www.baidu.com:99/pa^th/path?query#fagment");
454    ASSERT_STREQ(uri.IsFailed().c_str(), "");
455}
456
457HWTEST_F(NativeEngineTest, ConstructorTest037, testing::ext::TestSize.Level0)
458{
459    OHOS::Uri::Uri uri("http:/username:password@www.baidu.com:9^9/path/path?query#fagment");
460    ASSERT_STREQ(uri.IsFailed().c_str(), "");
461}
462
463HWTEST_F(NativeEngineTest, ConstructorTest038, testing::ext::TestSize.Level0)
464{
465    OHOS::Uri::Uri uri("http:/username:password@[1:0:0:1:2:1:2:1]:9^9/path/path?query#fagment");
466    ASSERT_STREQ(uri.IsFailed().c_str(), "");
467}
468
469HWTEST_F(NativeEngineTest, ConstructorTest039, testing::ext::TestSize.Level0)
470{
471    OHOS::Uri::Uri uri("http:/username:password@[1:0:0:1:2:1:2:1/path/path?query#fagment");
472    ASSERT_STREQ(uri.IsFailed().c_str(), "");
473}
474
475HWTEST_F(NativeEngineTest, ConstructorTest040, testing::ext::TestSize.Level0)
476{
477    OHOS::Uri::Uri uri("http://gg:gaogao@[1:0:0:sfvs1:2:1:2:1]:99/path1?query#fagment");
478    ASSERT_STREQ(uri.IsFailed().c_str(), "ipv6 does not conform to the rule");
479}
480
481HWTEST_F(NativeEngineTest, ConstructorTest041, testing::ext::TestSize.Level0)
482{
483    OHOS::Uri::Uri uri("http、:/username:password@www.baidu.com:99/path/path?query#fagment");
484    ASSERT_STREQ(uri.IsFailed().c_str(), "scheme does not conform to the rule");
485}
486
487HWTEST_F(NativeEngineTest, ConstructorTest042, testing::ext::TestSize.Level0)
488{
489    OHOS::Uri::Uri uri("http://[ffff::1]:、99/path/path?query#fagment");
490    ASSERT_STREQ(uri.IsFailed().c_str(), "Prot does not conform to the rule");
491}
492
493HWTEST_F(NativeEngineTest, ConstructorTest043, testing::ext::TestSize.Level0)
494{
495    OHOS::Uri::Uri uri("http://[ffff::1:99/path/path?query#fagment");
496    ASSERT_STREQ(uri.IsFailed().c_str(), "IPv6 is missing a closing bracket");
497}
498
499HWTEST_F(NativeEngineTest, ConstructorTest044, testing::ext::TestSize.Level0)
500{
501    OHOS::Uri::Uri uri("http://ffff::1]:99/path/path?query#fagment");
502    ASSERT_STREQ(uri.IsFailed().c_str(), "host does not conform to the rule");
503}
504
505HWTEST_F(NativeEngineTest, EqualsTest001, testing::ext::TestSize.Level0)
506{
507    OHOS::Uri::Uri uri("http://gg:gaogao@[1:0:0:1:2:1:2:1]:99/path1?query#fagment");
508    OHOS::Uri::Uri uri1 = uri;
509    ASSERT_TRUE(uri.Equals(uri1));
510}
511
512HWTEST_F(NativeEngineTest, EqualsTest002, testing::ext::TestSize.Level0)
513{
514    OHOS::Uri::Uri uri("http://gg:gaogao@[1:0:0:1:2:1:2:1]:99/path1?query#fagment");
515    OHOS::Uri::Uri uri1("http://gg:gaogao@[1:0:0:1:2:1:2:1]:99/path1?query#fagment");
516    ASSERT_TRUE(uri.Equals(uri1));
517}
518
519HWTEST_F(NativeEngineTest, EqualsTest003, testing::ext::TestSize.Level0)
520{
521    OHOS::Uri::Uri uri("http://gg:gaogao@[1:0:0:1:2:1:2:1]:99/path1?query#fagment");
522    OHOS::Uri::Uri uri1("http://gg:gaogao@[1:0:0:1:2:1:2:1]:99/path1?query#fagment123");
523    ASSERT_FALSE(uri.Equals(uri1));
524}
525
526HWTEST_F(NativeEngineTest, EqualsTest004, testing::ext::TestSize.Level0)
527{
528    OHOS::Uri::Uri uri("http://username:password@www.baidu.com:99/path/path?query#fagment");
529    OHOS::Uri::Uri uri1("http://username:password@www.baidu.com:29/path/path?query#fagment");
530    ASSERT_FALSE(uri.Equals(uri1));
531}
532
533HWTEST_F(NativeEngineTest, EqualsTest005, testing::ext::TestSize.Level0)
534{
535    OHOS::Uri::Uri uri("http://username:password@www.baidu.com:99/path/path?query#fagment");
536    OHOS::Uri::Uri uri1("http://user1name:password@www.baidu.com:99/path/path?query#fagment");
537    ASSERT_FALSE(uri.Equals(uri1));
538}
539
540HWTEST_F(NativeEngineTest, EqualsTest006, testing::ext::TestSize.Level0)
541{
542    OHOS::Uri::Uri uri("http://username:password@www.baidu.com:99/path/path?query#fagment");
543    OHOS::Uri::Uri uri1("http://username:password@w2ww.baidu.com:99/path/path?query#fagment");
544    ASSERT_FALSE(uri.Equals(uri1));
545}
546
547HWTEST_F(NativeEngineTest, EqualsTest007, testing::ext::TestSize.Level0)
548{
549    OHOS::Uri::Uri uri("http://username:password@www.baidu.com:99/path/path?query#fagment");
550    OHOS::Uri::Uri uri1("http://username:password@www.baidu.com:99/pa4th/path?query#fagment");
551    ASSERT_FALSE(uri.Equals(uri1));
552}
553
554HWTEST_F(NativeEngineTest, EqualsTest008, testing::ext::TestSize.Level0)
555{
556    OHOS::Uri::Uri uri("http://username:password@www.baidu.com:99/path/path?qu4ery#fagment");
557    OHOS::Uri::Uri uri1("http://username:password@www.baidu.com:99/path/path?query#fagment");
558    ASSERT_FALSE(uri.Equals(uri1));
559}
560
561HWTEST_F(NativeEngineTest, EqualsTest009, testing::ext::TestSize.Level0)
562{
563    OHOS::Uri::Uri uri("http://username:password@www.baidu.com:99/path/path?query#fagment");
564    OHOS::Uri::Uri uri1("h4ttp://username:password@www.baidu.com:99/path/path?query#fagment");
565    ASSERT_FALSE(uri.Equals(uri1));
566}
567
568HWTEST_F(NativeEngineTest, NormalizeTest001, testing::ext::TestSize.Level0)
569{
570    OHOS::Uri::Uri uri("http://user@[1:0:0:1:2:1:2:1]:99/path/66./../././mm/.././path1?query#fagment");
571    std::string normalize = uri.Normalize();
572    ASSERT_STREQ(normalize.c_str(), "http://user@[1:0:0:1:2:1:2:1]:99/path/path1?query#fagment");
573}
574
575HWTEST_F(NativeEngineTest, NormalizeTest002, testing::ext::TestSize.Level0)
576{
577    OHOS::Uri::Uri uri("http://gg:gaogao@[1:0:0:1:2:1:2:1]:99/../../path?query#fagment");
578    std::string normalize = uri.Normalize();
579    ASSERT_STREQ(normalize.c_str(), "http://gg:gaogao@[1:0:0:1:2:1:2:1]:99/../../path?query#fagment");
580}
581
582HWTEST_F(NativeEngineTest, NormalizeTest003, testing::ext::TestSize.Level0)
583{
584    OHOS::Uri::Uri uri("http://gg:gaogao@[1:0:0:1:2:1:2:1]:99/../../path/.././../aa/bb/cc?query#fagment");
585    std::string normalize = uri.Normalize();
586    ASSERT_STREQ(normalize.c_str(), "http://gg:gaogao@[1:0:0:1:2:1:2:1]:99/../../../aa/bb/cc?query#fagment");
587}
588
589HWTEST_F(NativeEngineTest, NormalizeTest004, testing::ext::TestSize.Level0)
590{
591    OHOS::Uri::Uri uri("http://gg:gaogao@[1:0:0:1:2:1:2:1]:99?query#fagment");
592    std::string normalize = uri.Normalize();
593    ASSERT_STREQ(normalize.c_str(), "http://gg:gaogao@[1:0:0:1:2:1:2:1]:99?query#fagment");
594}
595
596HWTEST_F(NativeEngineTest, ToStringTest001, testing::ext::TestSize.Level0)
597{
598    OHOS::Uri::Uri uri("http://gg:gaogao@[1:0:0:1:2:1:2:1]:99/aa/bb/cc?query#fagment");
599    ASSERT_STREQ(uri.ToString().c_str(), "http://gg:gaogao@[1:0:0:1:2:1:2:1]:99/aa/bb/cc?query#fagment");
600}
601
602HWTEST_F(NativeEngineTest, ToStringTest002, testing::ext::TestSize.Level0)
603{
604    OHOS::Uri::Uri uri("htt1p://gg:gaogao@[::192.9.5.5]:99/path/66path1?query#fagment");
605    ASSERT_STREQ(uri.ToString().c_str(), "htt1p://gg:gaogao@[::192.9.5.5]:99/path/66path1?query#fagment");
606}
607
608HWTEST_F(NativeEngineTest, ToStringTest003, testing::ext::TestSize.Level0)
609{
610    OHOS::Uri::Uri uri("ftp://username:www.baidu.com/path?query#fagment");
611    ASSERT_STREQ(uri.ToString().c_str(), "ftp://username:www.baidu.com/path?query#fagment");
612}
613
614HWTEST_F(NativeEngineTest, IsAbsoluteTest001, testing::ext::TestSize.Level0)
615{
616    OHOS::Uri::Uri uri("f/tp://username:password@www.baidu.com:88/path?query#fagment");
617    bool res = uri.IsAbsolute();
618    ASSERT_FALSE(res);
619}
620
621HWTEST_F(NativeEngineTest, IsAbsoluteTest002, testing::ext::TestSize.Level0)
622{
623    OHOS::Uri::Uri uri("ftp://username:password@www.baidu.com:88/path?query#fagment");
624    bool res = uri.IsAbsolute();
625    ASSERT_TRUE(res);
626}
627
628HWTEST_F(NativeEngineTest, IsAbsoluteTest003, testing::ext::TestSize.Level0)
629{
630    OHOS::Uri::Uri uri("htt/p://username:password@www.baidu.com:88/path?query#fagment");
631    bool res = uri.IsAbsolute();
632    ASSERT_FALSE(res);
633}
634
635HWTEST_F(NativeEngineTest, IsRelativeTest001, testing::ext::TestSize.Level0)
636{
637    OHOS::Uri::Uri uri("https://www.example.com/aaa");
638    bool res = uri.IsRelative();
639    ASSERT_FALSE(res);
640}
641
642HWTEST_F(NativeEngineTest, IsRelativeTest002, testing::ext::TestSize.Level0)
643{
644    OHOS::Uri::Uri uri("/bbb");
645    bool res = uri.IsRelative();
646    ASSERT_TRUE(res);
647}
648
649HWTEST_F(NativeEngineTest, IsOpaqueTest001, testing::ext::TestSize.Level0)
650{
651    OHOS::Uri::Uri uri("aaa:user@example.com");
652    bool res = uri.IsOpaque();
653    ASSERT_TRUE(res);
654}
655
656HWTEST_F(NativeEngineTest, IsOpaqueTest002, testing::ext::TestSize.Level0)
657{
658    OHOS::Uri::Uri uri("content://com.example/bbb");
659    bool res = uri.IsOpaque();
660    ASSERT_FALSE(res);
661}
662
663HWTEST_F(NativeEngineTest, IsHierarchicalTest001, testing::ext::TestSize.Level0)
664{
665    OHOS::Uri::Uri uri("https://www.example.com/path/to/resource");
666    bool res = uri.IsHierarchical();
667    ASSERT_TRUE(res);
668}
669
670HWTEST_F(NativeEngineTest, IsHierarchicalTest002, testing::ext::TestSize.Level0)
671{
672    OHOS::Uri::Uri uri("/path/to/resource");
673    bool res = uri.IsHierarchical();
674    ASSERT_TRUE(res);
675}
676
677HWTEST_F(NativeEngineTest, IsHierarchicalTest003, testing::ext::TestSize.Level0)
678{
679    OHOS::Uri::Uri uri("tel:123456789");
680    bool res = uri.IsHierarchical();
681    ASSERT_FALSE(res);
682}
683
684HWTEST_F(NativeEngineTest, AddQueryValueTest001, testing::ext::TestSize.Level0)
685{
686    OHOS::Uri::Uri uri("https://username:password@host:8080/file?aaa=1#myfragment");
687    std::string temp = uri.AddQueryValue("bbb", "2");
688    ASSERT_STREQ(temp.c_str(), "https://username:password@host:8080/file?aaa=1&bbb=2#myfragment");
689}
690
691HWTEST_F(NativeEngineTest, AddQueryValueTest002, testing::ext::TestSize.Level0)
692{
693    OHOS::Uri::Uri uri("mao:user@example.com");
694    std::string temp = uri.AddQueryValue("bb", "cc");
695    ASSERT_STREQ(temp.c_str(), "mao:?bb=cc");
696}
697
698HWTEST_F(NativeEngineTest, ClearQueryTest001, testing::ext::TestSize.Level0)
699{
700    OHOS::Uri::Uri uri("https://username:password@host:8080/file?aaa=1#myfragment");
701    std::string temp = uri.ClearQuery();
702    ASSERT_STREQ(temp.c_str(), "https://username:password@host:8080/file#myfragment");
703}
704
705HWTEST_F(NativeEngineTest, GetSegmentTest001, testing::ext::TestSize.Level0)
706{
707    OHOS::Uri::Uri uri("https://username:password@host:8080/file?aaa=1#myfragment");
708    std::vector<std::string> temp = uri.GetSegment();
709    ASSERT_EQ(temp.size(), 1);
710}
711
712HWTEST_F(NativeEngineTest, AddSegmentTest001, testing::ext::TestSize.Level0)
713{
714    OHOS::Uri::Uri uri("https://username:password@host:8080/file?aaa=1#myfragment");
715    std::string temp = uri.AddSegment("segment");
716    ASSERT_STREQ(temp.c_str(), "https://username:password@host:8080/file/segment?aaa=1#myfragment");
717}
718
719HWTEST_F(NativeEngineTest, AddSegmentTest002, testing::ext::TestSize.Level0)
720{
721    OHOS::Uri::Uri uri("mao:user@example.com");
722    std::string temp = uri.AddSegment("aaa");
723    ASSERT_STREQ(temp.c_str(), "mao:/aaa");
724}
725
726HWTEST_F(NativeEngineTest, GetTest001, testing::ext::TestSize.Level0)
727{
728    OHOS::Uri::Uri uri("https://username:password@host:8080");
729    ASSERT_STREQ(uri.GetPath().c_str(), "");
730    ASSERT_STREQ(uri.GetQuery().c_str(), "");
731    ASSERT_STREQ(uri.GetFragment().c_str(), "");
732}
733
734std::string GetStringUtf8(napi_env env, napi_value str)
735{
736    std::string buffer = "";
737    size_t bufferSize = 0;
738    if (napi_get_value_string_utf8(env, str, nullptr, 0, &bufferSize) != napi_ok) {
739        HILOG_ERROR("can not get src size");
740        return buffer;
741    }
742    buffer.resize(bufferSize);
743    if (napi_get_value_string_utf8(env, str, buffer.data(), bufferSize + 1, &bufferSize) != napi_ok) {
744        HILOG_ERROR("can not get src value");
745        return buffer;
746    }
747    return buffer;
748}
749
750napi_value StrToNapiValue(napi_env env, const std::string &result)
751{
752    napi_value output = nullptr;
753    napi_create_string_utf8(env, result.c_str(), result.size(), &output);
754    return output;
755}
756
757std::vector<std::string> GetArray(napi_env env, const napi_value tempStr)
758{
759    std::vector<std::string> strVec;
760    napi_value napiStr = nullptr;
761    uint32_t length = 0;
762    size_t strLength = 0;
763    napi_get_array_length(env, tempStr, &length);
764    for (size_t i = 0; i < length; i++) {
765        napi_get_element(env, tempStr, i, &napiStr);
766        if (napi_get_value_string_utf8(env, napiStr, nullptr, 0, &strLength) != napi_ok) {
767            HILOG_ERROR("can not get napiStr size");
768            return strVec;
769        }
770        if (strLength > 0) {
771            std::string itemStr = "";
772            itemStr.resize(strLength);
773            if (napi_get_value_string_utf8(env, napiStr, itemStr.data(), strLength + 1, &strLength) != napi_ok) {
774                HILOG_ERROR("can not get napiStr size");
775                return strVec;
776            }
777            strVec.push_back(itemStr);
778        } else {
779            strVec.push_back("");
780        }
781    }
782    return strVec;
783}
784
785HWTEST_F(NativeEngineTest, ModuleTest001, testing::ext::TestSize.Level0)
786{
787    napi_env env = (napi_env)engine_;
788    napi_value exports = nullptr;
789    napi_create_object(env, &exports);
790    OHOS::Uri::UriInit(env, exports);
791    napi_value uriClass = nullptr;
792    napi_value constructorArgs[1] =  { 0 };
793    std::string input = "http://username:password@www.baidu.com:99/path/path?query#fagment";
794    napi_create_string_utf8(env, input.c_str(), input.size(), &constructorArgs[0]);
795    napi_status status = napi_get_named_property(env, exports, "Uri", &uriClass);
796    napi_value instance = nullptr;
797    status = napi_new_instance(env, uriClass, 1, constructorArgs, &instance);
798    napi_value getTemp = nullptr;
799    napi_get_named_property(env, instance, "scheme", &getTemp);
800    std::string res = GetStringUtf8(env, getTemp);
801    ASSERT_STREQ(res.c_str(), "http");
802
803    napi_get_named_property(env, instance, "authority", &getTemp);
804    res = GetStringUtf8(env, getTemp);
805    ASSERT_STREQ(res.c_str(), "username:password@www.baidu.com:99");
806
807    napi_get_named_property(env, instance, "ssp", &getTemp);
808    res = GetStringUtf8(env, getTemp);
809    ASSERT_STREQ(res.c_str(), "//username:password@www.baidu.com:99/path/path?query");
810
811    napi_get_named_property(env, instance, "userInfo", &getTemp);
812    res = GetStringUtf8(env, getTemp);
813    ASSERT_STREQ(res.c_str(), "username:password");
814
815    napi_get_named_property(env, instance, "host", &getTemp);
816    res = GetStringUtf8(env, getTemp);
817    ASSERT_STREQ(res.c_str(), "www.baidu.com");
818
819    napi_get_named_property(env, instance, "port", &getTemp);
820    res = GetStringUtf8(env, getTemp);
821    ASSERT_STREQ(res.c_str(), "99");
822
823    napi_get_named_property(env, instance, "path", &getTemp);
824    res = GetStringUtf8(env, getTemp);
825    ASSERT_STREQ(res.c_str(), "/path/path");
826
827    napi_get_named_property(env, instance, "query", &getTemp);
828    res = GetStringUtf8(env, getTemp);
829    ASSERT_STREQ(res.c_str(), "query");
830
831    napi_get_named_property(env, instance, "fragment", &getTemp);
832    res = GetStringUtf8(env, getTemp);
833    ASSERT_STREQ(res.c_str(), "fagment");
834
835    napi_get_named_property(env, instance, "isFailed", &getTemp);
836    res = GetStringUtf8(env, getTemp);
837    ASSERT_STREQ(res.c_str(), "");
838}
839
840HWTEST_F(NativeEngineTest, ModuleTest002, testing::ext::TestSize.Level0)
841{
842    napi_env env = (napi_env)engine_;
843    napi_value exports = nullptr;
844    napi_create_object(env, &exports);
845    OHOS::Uri::UriInit(env, exports);
846    napi_value uriClass = nullptr;
847    napi_value constructorArgs[1] =  { 0 };
848    std::string input = "http://username:password@www.baidu.com:99/path/path?query#fagment";
849    napi_create_string_utf8(env, input.c_str(), input.size(), &constructorArgs[0]);
850    napi_get_named_property(env, exports, "Uri", &uriClass);
851    napi_value instance = nullptr;
852    napi_new_instance(env, uriClass, 1, constructorArgs, &instance);
853    napi_value tempFn = nullptr;
854    napi_get_named_property(env, instance, "checkIsAbsolute", &tempFn);
855    napi_value result = nullptr;
856    napi_call_function(env, instance, tempFn, 0, nullptr, &result);
857    ASSERT_TRUE(result);
858
859    napi_get_named_property(env, instance, "toString", &tempFn);
860    napi_call_function(env, instance, tempFn, 0, nullptr, &result);
861    std::string res = GetStringUtf8(env, result);
862    ASSERT_STREQ(res.c_str(), "http://username:password@www.baidu.com:99/path/path?query#fagment");
863
864    napi_get_named_property(env, instance, "normalize", &tempFn);
865    napi_call_function(env, instance, tempFn, 0, nullptr, &result);
866    res = GetStringUtf8(env, result);
867    ASSERT_STREQ(res.c_str(), "http://username:password@www.baidu.com:99/path/path?query#fagment");
868
869    napi_value equalsFn = nullptr;
870    napi_get_named_property(env, instance, "equals", &equalsFn);
871    napi_value constructorArgs1[1] = { 0 };
872    std::string input2 = "http://username:password@www.baidu.com:88/path?query1#fagment";
873    napi_create_string_utf8(env, input2.c_str(), input2.size(), &constructorArgs1[0]);
874    napi_value otherInstance = nullptr;
875    napi_new_instance(env, uriClass, 1, constructorArgs1, &otherInstance);
876    napi_value args[1] = { otherInstance };
877    napi_value result1 = nullptr;
878    napi_call_function(env, instance, equalsFn, 1, args, &result1);
879    bool res1 = true;
880    napi_get_value_bool(env, result1, &res1);
881    ASSERT_FALSE(res1);
882}
883
884HWTEST_F(NativeEngineTest, ModuleTest003, testing::ext::TestSize.Level0)
885{
886    napi_env env = (napi_env)engine_;
887    napi_value exports = nullptr;
888    napi_create_object(env, &exports);
889    OHOS::Uri::UriInit(env, exports);
890    napi_value uriClass = nullptr;
891    napi_value constructorArgs[1] =  { 0 };
892    std::string input = "http://name:word@www.uritest.com:99/path/abc?query#fagment";
893    napi_create_string_utf8(env, input.c_str(), input.size(), &constructorArgs[0]);
894    napi_get_named_property(env, exports, "Uri", &uriClass);
895    napi_value instance = nullptr;
896    napi_new_instance(env, uriClass, 1, constructorArgs, &instance);
897    napi_value tempFn = nullptr;
898
899    napi_get_named_property(env, instance, "checkIsRelative", &tempFn);
900    napi_value result = nullptr;
901    napi_call_function(env, instance, tempFn, 0, nullptr, &result);
902    bool flag = true;
903    napi_get_value_bool(env, result, &flag);
904    ASSERT_FALSE(flag);
905
906    napi_get_named_property(env, instance, "checkIsOpaque", &tempFn);
907    napi_call_function(env, instance, tempFn, 0, nullptr, &result);
908    napi_get_value_bool(env, result, &flag);
909    ASSERT_FALSE(flag);
910
911    napi_get_named_property(env, instance, "checkIsHierarchical", &tempFn);
912    napi_call_function(env, instance, tempFn, 0, nullptr, &result);
913    napi_get_value_bool(env, result, &flag);
914    ASSERT_TRUE(flag);
915
916    napi_value key = StrToNapiValue(env, "aaa");
917    napi_value value = StrToNapiValue(env, "bbb");
918    napi_value keyArgs[] = { key, value };
919    napi_get_named_property(env, instance, "addQueryValue", &tempFn);
920    napi_call_function(env, instance, tempFn, 2, keyArgs, &result);
921    std::string res = GetStringUtf8(env, result);
922    ASSERT_STREQ(res.c_str(), "http://name:word@www.uritest.com:99/path/abc?query&aaa=bbb#fagment");
923
924    napi_get_named_property(env, instance, "getSegment", &tempFn);
925    napi_call_function(env, instance, tempFn, 0, nullptr, &result);
926    std::vector<std::string> temp = GetArray(env, result);
927    ASSERT_STREQ(temp[0].c_str(), "path");
928    ASSERT_STREQ(temp[1].c_str(), "abc");
929
930    napi_value segment = StrToNapiValue(env, "aaa");
931    napi_value segargs[] = { segment };
932    napi_get_named_property(env, instance, "addSegment", &tempFn);
933    napi_call_function(env, instance, tempFn, 1, segargs, &result);
934    res = GetStringUtf8(env, result);
935    ASSERT_STREQ(res.c_str(), "http://name:word@www.uritest.com:99/path/abc/aaa?query#fagment");
936
937    napi_get_named_property(env, instance, "clearQuery", &tempFn);
938    napi_call_function(env, instance, tempFn, 0, nullptr, &result);
939    res = GetStringUtf8(env, result);
940    ASSERT_STREQ(res.c_str(), "http://name:word@www.uritest.com:99/path/abc#fagment");
941}