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