• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1/*
2 * Copyright (c) 2025 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 */
15import {BusinessError} from "@ohos.base";
16import * as test_overload from "overload";
17import * as OverloadTest from "overload_test";
18
19loadLibrary("ani_overload");
20
21
22function test_add_numbers() {
23    const result = OverloadTest.add(1, 2);
24    assertEQ(result, 3);
25}
26
27function test_add_strings() {
28    const result = OverloadTest.add("1", "2");
29    assertEQ(result, "12");
30}
31
32function test_Foo_bar_number(foo: OverloadTest.Foo) {
33    const result = foo.bar(123);
34    assertEQ(result, 123);
35}
36
37function test_Foo_bar_string(foo: OverloadTest.Foo) {
38    const result = foo.bar("Hello");
39    assertEQ(result, "Hello");
40}
41// 测试 byte (i8)
42function testByte() {
43    let instance: test_overload.OverloadInterface =
44        test_overload.get_interface();
45    let res = instance.overloadFunc(5 as byte, 5 as byte);
46    assertEQ(res, 5);
47}
48
49// 测试 short (i16)
50function testShort() {
51    let instance: test_overload.OverloadInterface =
52        test_overload.get_interface();
53    let res = instance.overloadFunc(42 as short, 42 as short);
54    assertEQ(res, 42);
55}
56
57// 测试 int (i32)
58function testInt() {
59    let instance: test_overload.OverloadInterface =
60        test_overload.get_interface();
61    let res = instance.overloadFunc(1000 as int, 1000 as int);
62    assertEQ(res, 1000);
63}
64
65// 测试 long (i64)
66function testLong() {
67    let instance: test_overload.OverloadInterface =
68        test_overload.get_interface();
69    let res = instance.overloadFunc(1000000 as long, 1000000 as long);
70    assertEQ(res, 1000000);
71}
72
73// 测试 float (f32)
74function testFloat() {
75    let instance: test_overload.OverloadInterface =
76        test_overload.get_interface();
77    let res = instance.overloadFunc(3.14 as float, 3.14 as float);
78    assertEQ(res, 3.14 as float);
79}
80
81// 测试 double (f64)
82function testDouble() {
83    let instance: test_overload.OverloadInterface =
84        test_overload.get_interface();
85    let res = instance.overloadFunc(2.71828 as double, 2.71828 as double);
86    assertEQ(res, 2.71828);
87}
88
89// 测试 String
90function testString() {
91    let instance: test_overload.OverloadInterface =
92        test_overload.get_interface();
93    let res = instance.overloadFunc("123", "123");
94    assertEQ(res, "123");
95}
96
97// 测试 i8 与 i16
98function testByte_Short() {
99    let instance: test_overload.OverloadInterface =
100        test_overload.get_interface();
101    let res = instance.overloadFunc(5 as byte, 42 as short);
102    assertEQ(res, 5);
103}
104// 测试 i8 与 f32
105function testByte_Float() {
106    let instance: test_overload.OverloadInterface =
107        test_overload.get_interface();
108    let res = instance.overloadFunc(5 as byte, 3.14 as float);
109    assertEQ(res, 5);
110}
111// 测试i8 与String
112function testByte_String() {
113    let instance: test_overload.OverloadInterface =
114        test_overload.get_interface();
115    let res = instance.overloadFunc(5 as byte, "123");
116    assertEQ(res, 5);
117}
118
119// 测试传入enum类型
120function test_enum() {
121    let color = test_overload.Color.red;
122    let instance: test_overload.OverloadInterface =
123        test_overload.get_interface();
124    let res = instance.overloadFunc(color);
125    assertEQ(res, 1 as int);
126}
127
128// 测试自定义的struct类型
129function test_struct() {
130    let mystruct: test_overload.Mystruct = {
131        testNum: 2147483647,
132        testStr: "path/to/source"
133    };
134    let instance: test_overload.OverloadInterface =
135        test_overload.get_interface();
136    let res = instance.overloadFunc(mystruct)
137    assertEQ(res, "path/to/source")
138}
139
140////多参数组合
141
142// 测试5param
143function test_5param() {
144    let instance: test_overload.OverloadInterface =
145        test_overload.get_interface();
146    instance.overloadFunc(
147        1 as byte, 1 as short, 1 as int, 1.1 as float, 1.123 as double);
148}
149function test_5param2() {
150    let instance: test_overload.OverloadInterface =
151        test_overload.get_interface();
152    instance.overloadFunc(true, "hello", 1 as byte, 1 as short, 1 as int);
153}
154function test_5param3() {
155    let instance: test_overload.OverloadInterface =
156        test_overload.get_interface();
157    instance.overloadFunc(1 as float, 1 as double, true, "hello", 1 as byte);
158}
159function test_5param4() {
160    let instance: test_overload.OverloadInterface =
161        test_overload.get_interface();
162    instance.overloadFunc(
163        "1 as byte", 1 as short, 1 as int, 1.1 as float, true);
164}
165function test_5param5() {
166    let instance: test_overload.OverloadInterface =
167        test_overload.get_interface();
168    instance.overloadFunc("1 as byte", "1 as short", "1 as int", true, false);
169}
170
171function test_5param6() {
172    let instance: test_overload.OverloadInterface =
173        test_overload.get_interface();
174    instance.overloadFunc(
175        10 as short, 20 as int, 3.0 as float, 4.0 as double, true);
176}
177
178function test_5param7() {
179    let instance: test_overload.OverloadInterface =
180        test_overload.get_interface();
181    instance.overloadFunc("hello", 1 as byte, 2 as short, 3.0 as float, false);
182}
183
184function test_5param8() {
185    let instance: test_overload.OverloadInterface =
186        test_overload.get_interface();
187    instance.overloadFunc(true, 5 as byte, 10 as int, 2.5 as double, "world");
188}
189
190function test_5param9() {
191    let instance: test_overload.OverloadInterface =
192        test_overload.get_interface();
193    instance.overloadFunc(
194        3.14 as double, false, "test", 100 as short, 200 as int);
195}
196
197function test_5param10() {
198    let instance: test_overload.OverloadInterface =
199        test_overload.get_interface();
200    instance.overloadFunc(
201        42 as byte, 1.5 as float, true, "example", 1000 as int);
202}
203
204
205// 测试10param
206function test_10param() {
207    let instance: test_overload.OverloadInterface =
208        test_overload.get_interface();
209    let arri8: byte[] = [1, 2, 3];
210    let arri16: short[] = [1, 2, 3, 4];
211    let arri32: int[] = [1, 2, 3, 4, 5];
212    instance.overloadFunc(
213        1 as byte, 1 as short, 1 as int, 1.1 as float, 1.123 as double, true,
214        "123", arri8, arri16, arri32);
215}
216
217// 测试10param1
218function test_10param1() {
219    let instance: test_overload.OverloadInterface =
220        test_overload.get_interface();
221    let arri8: byte[] = [1, 2, 3];
222    let mystruct: test_overload.Mystruct = {
223        testNum: 2147483647,
224        testStr: "path/to/source"
225    };
226    let color = test_overload.Color.red;
227    instance.overloadFunc(
228        1 as byte, 1 as short, 1 as int, 1.1 as float, 1.123 as double, true,
229        "123", arri8, mystruct, color);
230}
231
232// 测试10param2
233function test_10param2() {
234    let instance: test_overload.OverloadInterface =
235        test_overload.get_interface();
236    let arri8: byte[] = [1, 2, 3];
237    let arri16: short[] = [1, 2, 3, 4];
238    let arri32: int[] = [1, 2, 3, 4, 5];
239    let arrbool: boolean[] = [true, false];
240    let arrf32: float[] = [1.1f, 2.2f];
241    let arrf64: double[] = [1.11111, 2.22222];
242    let arrstring: String[] = ["hello", "world"];
243
244    let mystruct: test_overload.Mystruct = {
245        testNum: 2147483647,
246        testStr: "path/to/source"
247    };
248    let color = test_overload.Color.red;
249    instance.overloadFunc(
250        1 as byte, mystruct, color, arrf32, arrf64, arrbool, arrstring, arri8,
251        arri16, arri32);
252}
253
254// 测试10param3
255function test_10param3() {
256    let instance: test_overload.OverloadInterface =
257        test_overload.get_interface();
258    let arri8: byte[] = [1, 2, 3];
259    let mystruct: test_overload.Mystruct = {
260        testNum: 2147483647,
261        testStr: "path/to/source"
262    };
263    let color = test_overload.Color.red;
264
265    let numbersU8: byte[] = [1, 2, 3, 4, 5];
266    let arrbuf1: ArrayBuffer = new ArrayBuffer(numbersU8.length);
267    for (let i = 0; i < numbersU8.length; i++) {
268        arrbuf1.set(i, numbersU8[i]);
269    }
270
271    instance.overloadFunc(
272        1 as byte, 1 as short, 1 as int, 1.1 as float, 1.123 as double, true,
273        "123", arrbuf1, mystruct, color);
274}
275// 测试10param4
276function test_10param4() {
277    let instance: test_overload.OverloadInterface =
278        test_overload.get_interface();
279    let arri8: byte[] = [1, 2, 3];
280    let mystruct: test_overload.Mystruct = {
281        testNum: 2147483647,
282        testStr: "path/to/source"
283    };
284    let color = test_overload.Color.red;
285
286    let numbersU8: byte[] = [1, 2, 3, 4, 5];
287    let arrbuf1: ArrayBuffer = new ArrayBuffer(numbersU8.length);
288    for (let i = 0; i < numbersU8.length; i++) {
289        arrbuf1.set(i, numbersU8[i]);
290    }
291
292    instance.overloadFunc(
293        1 as byte, 1 as short, 1 as int, 1.1 as float, 1.123 as double, true,
294        "123", arri8, arrbuf1, color);
295}
296
297
298
299// 测试重载函数传入数组
300function test_Array() {
301    let instance: test_overload.OverloadInterface =
302        test_overload.get_interface()
303
304    let numbers: int[] = [1, 2, 3, 4, 5];
305    let ocp = instance.overloadFunc(numbers)
306    assertEQ(ocp, 1 as int);
307}
308
309function test_buffer() {
310    let instance: test_overload.OverloadInterface =
311        test_overload.get_interface()
312    let numbersU8: byte[] = [1, 2, 3, 4, 5];
313    let arrbuf1: ArrayBuffer = new ArrayBuffer(numbersU8.length);
314    for (let i = 0; i < numbersU8.length; i++) {
315        arrbuf1.set(i, numbersU8[i]);
316    }
317    let res = instance.overloadFunc(arrbuf1)
318    assertEQ(res, 15);
319}
320
321function test_enum_record() {
322    const studentScores: Record<String, short> = {
323        "math": 90 as short,
324        "english": 85 as short,
325        "science": 95 as short,
326    };
327    let instance: test_overload.OverloadInterface =
328        test_overload.get_interface()
329    let color = test_overload.Color.red;
330    // instance.overloadFunc((test_overload.Color)color , studentScores)
331}
332
333function test_array_record() {
334    const studentScores: Record<String, short> = {
335        "math": 90 as short,
336        "english": 85 as short,
337        "science": 95 as short,
338    };
339    let instance: test_overload.OverloadInterface =
340        test_overload.get_interface()
341    let numbers: int[] = [1, 2, 3, 4, 5];
342    instance.overloadFunc(numbers, studentScores)
343}
344
345
346function main() {
347    console.log("##############start#############");
348    const suite = new ArkTestsuite("Overload Test");
349
350    suite.addTest("test add numbers", test_add_numbers);
351    suite.addTest("test add strings", test_add_strings);
352
353    let foo = OverloadTest.makeFoo();
354
355    suite.addTest("test Foo bar with number", () => test_Foo_bar_number(foo));
356    suite.addTest("test Foo bar with string", () => test_Foo_bar_string(foo));
357
358    // primitive
359    suite.addTest("testByte", testByte);
360    suite.addTest("testShort", testShort);
361    suite.addTest("testInt", testInt);
362    suite.addTest("testLong", testLong);
363    suite.addTest("testFloat", testFloat);
364    suite.addTest("testDouble", testDouble);
365    suite.addTest("testString", testString);
366    suite.addTest("testByte_Short", testByte_Short);
367    suite.addTest("testByte_Float", testByte_Float);
368    suite.addTest("testByte_String", testByte_String);
369
370    //
371    suite.addTest("test_enum", test_enum);
372    suite.addTest("test_struct", test_struct);
373    suite.addTest("test_Array", test_Array);
374    suite.addTest("test_buffer", test_buffer);
375    suite.addTest("test_enum_record", test_enum_record);
376    suite.addTest("test_array_record", test_array_record);
377
378    // 多参数组合
379    suite.addTest("testByte_5param", test_5param);
380    suite.addTest("testByte_5param2", test_5param2);
381    suite.addTest("testByte_5param3", test_5param3);
382    suite.addTest("testByte_5param4", test_5param4);
383    suite.addTest("testByte_5param5", test_5param5);
384    suite.addTest("testByte_5param6", test_5param6);
385    suite.addTest("testByte_5param7", test_5param7);
386    suite.addTest("testByte_5param8", test_5param8);
387    suite.addTest("testByte_5param9", test_5param9);
388    suite.addTest("testByte_5param10", test_5param10);
389
390    suite.addTest("testByte_10param", test_10param);
391    suite.addTest("testByte_10param1", test_10param1);
392    suite.addTest("testByte_10param2", test_10param2);
393    suite.addTest("testByte_10param3", test_10param3);
394    suite.addTest("testByte_10param4", test_10param4);
395    exit(suite.run());
396}
397