2 import os, subprocess, sys, argparse
3 sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), "..")))
6 from pathlib import Path
12 # The `dotnettool` works normally.
14 if not exist("/usr/bin/dotnettool"):
15 return "FAIL : The dotnettool works normally"
17 raw = cmd(f"shell dotnettool")
18 if "Dotnet Tool Version: 1.0" not in raw:
19 return "FAIL : The dotnettool works normally"
23 # The `native image` is generated normally.
25 cmd(f"shell dotnettool --ni-system")
27 if not exist(f"{RUNTIME_DIR}{SPC_DLL}.Backup"):
28 return "FAIL : Create the platform native image"
30 raw = cmd(f"shell find {RUNTIME_DIR} -name *.ni.dll")
31 lines1 = [l for l in raw.splitlines()]
32 len1 = len(lines1) + 2 # System.Private.CoreLib.dll, System.Runtime.WindowsRuntime.dll
33 raw = cmd(f"shell find {RUNTIME_DIR} -name *.dll -not -name *.ni.dll")
34 lines2 = [l for l in raw.splitlines()]
37 return f"FAIL : The number of .dll({len2}) and .ni.dll({len1}) must match in the {RUNTIME_DIR}"
39 raw = cmd(f"shell find {FRAMEWORK_DIR} -name *.ni.dll")
40 lines1 = [l for l in raw.splitlines()]
42 raw = cmd(f"shell find {FRAMEWORK_DIR} -name *.dll -not -name *.ni.dll")
43 lines2 = [l for l in raw.splitlines() if "/ref/" not in l]
46 return f"FAIL : The number of .dll({len2}) and .ni.dll({len1}) must match in the {FRAMEWORK_DIR}"
51 if Path(ni).name.replace(".ni.dll", "") == Path(dll).name.replace(".dll", ""):
55 return "FAIL : The file name of .dll and .ni.dll must match in the platform"
59 # Remove the `platform` native image.
61 cmd(f"shell dotnettool --ni-reset-system")
63 if exist(f"{RUNTIME_DIR}{SPC_DLL}.Backup"):
64 return "FAIL : Remove the platform native image"
68 # Create native image for `System.Private.CoreLib.dll`.
70 if exist(f"{RUNTIME_DIR}{SPC_DLL}.Backup"):
71 cmd(f"shell rm {RUNTIME_DIR}{SPC_DLL}")
72 cmd(f"shell mv {RUNTIME_DIR}{SPC_DLL}.Backup {RUNTIME_DIR}{SPC_DLL}")
74 raw = cmd(f"shell dotnettool --ni-dll {RUNTIME_DIR}{SPC_DLL}")
75 if (f"{SPC_DLL} (FNV)" not in raw) or \
76 ("System.Private.CoreLib.ni.dll generated successfully." not in raw):
77 return f"FAIL : Create native image for {SPC_DLL}"
79 if not exist(f"{RUNTIME_DIR}{SPC_DLL}.Backup"):
80 return f"FAIL : Create native image for {SPC_DLL}"
84 # The file name of `.dll` and `.ni.dll` must match in the framework.
86 cmd(f"shell dotnettool --ni-dir {FRAMEWORK_DIR}")
87 raw = cmd(f"shell find {FRAMEWORK_DIR} -name *.ni.dll")
88 lines1 = [l for l in raw.splitlines()]
89 raw = cmd(f"shell find {FRAMEWORK_DIR} -name *.dll -not -name *.ni.dll")
90 lines2 = [l for l in raw.splitlines() if "/ref/" not in l]
91 if len(lines1) != len(lines2):
92 return "FAIL : The number of .dll and .ni.dll must match"
97 if Path(ni).name.replace(".ni.dll", "") == Path(dll).name.replace(".dll", ""):
101 return "FAIL : The file name of .dll and .ni.dll must match in the {FRAMEWORK_DIR}"
105 # The `.ni.dll` files should not exist in the framework.
107 cmd(f"shell dotnettool --ni-reset-dir {FRAMEWORK_DIR}")
108 raw = cmd(f"shell find {FRAMEWORK_DIR} -name *.ni.dll")
109 lines = [l for l in raw.splitlines()]
111 return "FAIL : The .ni.dll files should not exist"
115 # Create native image for Tizen.dll in `R2R` mode.
117 raw = cmd(f"shell dotnettool --r2r --ni-dll {FRAMEWORK_DIR}Tizen.dll")
118 if ("Tizen.dll (R2R)" not in raw) or \
119 ("Tizen.ni.dll generated successfully." not in raw):
120 return "FAIL : Create native image for Tizen.dll in R2R mode"
124 # Displays detailed information while creating native image for Tizen.Log.dll.
126 raw = cmd(f"shell dotnettool --verbose --ni-dll {FRAMEWORK_DIR}Tizen.Log.dll")
127 if ("Opening input file" not in raw) or \
128 ("Breakdown of Indirections" not in raw) or \
129 ("Tizen.Log.ni.dll generated successfully." not in raw):
130 return "FAIL : Displays detailed information while creating native image for Tizen.Log.dll"
134 # Create a native image for netstandard.dll by specifying the directory containing the IBC files.
136 packaging_path = os.path.abspath(os.path.join(os.path.dirname(__file__), "../../../packaging"))
139 raw = cmd("capability")
140 line = [l for l in raw.splitlines() if "cpu_arch" in l]
141 target_arch = line[0].split(":")[1]
142 if ("armv7" == target_arch) or \
143 ("x86" == target_arch):
144 ibcdata_zip = "ibcdata_arm.zip"
146 ibcdata_zip = "ibcdata_aarch64.zip"
148 cmd(f"push {packaging_path}/{ibcdata_zip} /tmp")
149 cmd(f"shell unzip /tmp/{ibcdata_zip} -d {IBCDATA_DIR}")
150 cmd(f"shell chsmack -a _ {IBCDATA_DIR} -r")
152 if not exist(f"{IBCDATA_DIR}netstandard.ibc"):
153 return "FAIL : The netstandard.ibc file should exist"
155 raw = cmd(f"shell dotnettool --ibc-dir /usr/share/dotnet.tizen/ibcdata/ --ni-dll {RUNTIME_DIR}netstandard.dll")
156 if ("netstandard.dll (FNV)" not in raw) or \
157 ("netstandard.ni.dll generated successfully." not in raw):
158 return "FAIL : Create native image for netstandard.dll"
162 # The `Launcher_TC_TOOL_01` application does not have native image.
164 sln_name = "Launcher_TC_TOOL_01.Tizen"
166 tpk_path = get_tpk_path(tpk_list, f"{sln_name}")
168 return f"FAIL : Get the tpk path for {sln_name}"
170 if "OK" not in app_install(f"{tpk_path}"):
171 return f"FAIL : Install the application for {tpk_path}"
173 pkg_id = f"org.tizen.example.Launcher_TC_TOOL_01.Tizen"
175 root_path = get_root_path(f"{pkg_id}")
176 if root_path == "None":
177 return f"FAIL : Get the root path for {pkg_id}"
179 if not exist(f"{root_path}/bin/.native_image"):
180 return "FAIL : The .native_image folder should exist"
182 cmd(f"shell dotnettool --ni-reset-pkg {pkg_id}")
184 if exist(f"{root_path}/bin/.native_image"):
185 return "FAIL : The .native_image folder should not exist"
187 raw = cmd(f"shell find {root_path}/bin/ -name *.ni.dll")
188 lines = [l for l in raw.splitlines()]
190 return "FAIL : The .ni.dll files should not exist"
194 # The `Launcher_TC_TOOL_02` application generates native image.
196 sln_name = "Launcher_TC_TOOL_02.Tizen"
198 tpk_path = get_tpk_path(tpk_list, f"{sln_name}")
200 return f"FAIL : Get the tpk path for {sln_name}"
202 if "OK" not in app_install(f"{tpk_path}"):
203 return f"FAIL : Install the application for {tpk_path}"
205 pkg_id = f"org.tizen.example.Launcher_TC_TOOL_02.Tizen"
207 root_path = get_root_path(f"{pkg_id}")
208 if root_path == "None":
209 return f"FAIL : Get the root path for {pkg_id}"
211 if exist(f"{root_path}/bin/.native_image"):
212 return "FAIL : The .native_image folder not should exist"
214 cmd(f"shell dotnettool --ni-pkg {pkg_id}")
216 if not exist(f"{root_path}/bin/.native_image"):
217 return "FAIL : The .native_image folder should exist"
219 raw = cmd(f"shell find {root_path}/bin/.native_image/ -name *.ni.dll")
220 lines1 = [l for l in raw.splitlines()]
221 raw = cmd(f"shell find {root_path}/bin/ -maxdepth 1 -name *.dll -not -name *.ni.dll")
222 lines2 = [l for l in raw.splitlines()]
223 if len(lines1) != len(lines2):
224 return "FAIL : The number of .dll and .ni.dll must match in the application"
229 if Path(ni).name.replace(".ni.dll", "") == Path(dll).name.replace(".dll", ""):
233 return "FAIL : The file name of .dll and .ni.dll must match in the application"
237 # The `prefer_dotnet_aot` metadata value of `true` will regenerates the native image in all .NET applications.
239 sln_name = "Launcher_TC_TOOL_03.Tizen"
241 tpk_path = get_tpk_path(tpk_list, f"{sln_name}")
243 return f"FAIL : Get the tpk path for {sln_name}"
245 if "OK" not in app_install(f"{tpk_path}"):
246 return f"FAIL : Install the application for {tpk_path}"
248 cmd(f"shell dotnettool --ni-regen-all-app")
250 raw = subprocess.run((f"sdb -s {serial} shell pkginfo --metadata-flt").split(), stdout=subprocess.PIPE, input=f"http://tizen.org/metadata/prefer_dotnet_aot\ntrue\n", encoding="utf-8").stdout
251 lines = [l for l in raw.splitlines() if "appid" in l]
253 pkg_id = app.split(": ")[1]
254 raw = subprocess.run((f"sdb -s {serial} shell pkginfo --pkg {pkg_id}").split(), stdout=subprocess.PIPE, encoding="utf-8").stdout
255 readonly = [l for l in raw.splitlines() if "Readonly" in l]
256 if "0" == readonly[0].split(": ")[1]:
257 path = [l for l in raw.splitlines() if "root_path" in l]
258 root_path = path[0].split(": ")[1]
259 raw = cmd(f"shell find {root_path}/bin/.native_image/ -name *.ni.dll")
260 lines1 = [l for l in raw.splitlines()]
261 raw = cmd(f"shell find {root_path}/bin/ -maxdepth 1 -name *.dll -not -name *.ni.dll")
262 lines2 = [l for l in raw.splitlines()]
263 if len(lines1) != len(lines2):
264 return "FAIL : The number of .dll and .ni.dll must match in the application"
269 if Path(ni).name.replace(".ni.dll", "") == Path(dll).name.replace(".dll", ""):
273 return "FAIL : The file name of .dll and .ni.dll must match in the application"
277 # The `prefer_nuget_cache` metadata value of `true` will regenerates the native image in the `TAC`.
279 sln_name = "Launcher_TC_TOOL_04.Tizen"
281 tpk_path = get_tpk_path(tpk_list, f"{sln_name}")
283 return f"FAIL : Get the tpk path for {sln_name}"
285 if "OK" not in app_install(f"{tpk_path}"):
286 return f"FAIL : Install the application for {tpk_path}"
288 raw = cmd(f"shell dotnettool --tac-regen-all")
289 if (".dll (FNV)" not in raw) or \
290 (".ni.dll generated successfully." not in raw):
291 return "FAIL : Create native image for TAC"
295 # The `Launcher_TC_TOOL_05` application must not have `TAC` applied.
297 sln_name = "Launcher_TC_TOOL_05.Tizen"
299 tpk_path = get_tpk_path(tpk_list, f"{sln_name}")
301 return f"FAIL : Get the tpk path for {sln_name}"
303 if "OK" not in app_install(f"{tpk_path}"):
304 return f"FAIL : Install the application for {tpk_path}"
306 pkg_id = f"org.tizen.example.Launcher_TC_TOOL_05.Tizen"
308 root_path = get_root_path(f"{pkg_id}")
309 if root_path == "None":
310 return f"FAIL : Get the root path for {pkg_id}"
312 if not exist(f"{root_path}/bin/.tac_symlink"):
313 return "FAIL : The .tac_symlink folder should exist"
315 raw = cmd(f"shell find {root_path}/bin/.tac_symlink/ -name *.dll -not -name *.ni.dll")
316 lines1 = [l for l in raw.splitlines()]
317 raw = cmd(f"shell find {DOTNET_DIR}Xamarin.Forms/4.6.0.967/ -name *.dll -not -name *.ni.dll")
318 lines2 = [l for l in raw.splitlines()]
319 if len(lines1) != len(lines2):
320 return "FAIL : The number of .dll in the .tac_symlink and .dll in the TAC must match"
322 raw = cmd(f"shell ls -alZ {root_path}/bin/.tac_symlink/*.dll")
323 lines = [l for l in raw.splitlines() if ".ni.dll" not in l]
325 origin_path = dll.split("->")[1].strip()
326 if not exist(f"{origin_path}"):
327 return "FAIL : The original file of the symbolic link must exist"
329 cmd(f"shell dotnettool --tac-disable-pkg {pkg_id}")
331 if exist(f"{root_path}/bin/.tac_symlink"):
332 return "FAIL : The .tac_symlink folder should not exist"
334 raw = cmd(f"shell find {root_path}/bin/ -maxdepth 1 -name *.dll -not -name *.ni.dll")
335 lines = [l for l in raw.splitlines()]
337 return "FAIL : The number of .dll must exist correctly in the bin folder"
341 # The `Launcher_TC_TOOL_06` application must have `TAC` applied.
343 sln_name = "Launcher_TC_TOOL_06.Tizen"
345 tpk_path = get_tpk_path(tpk_list, f"{sln_name}")
347 return f"FAIL : Get the tpk path for {sln_name}"
349 if "OK" not in app_install(f"{tpk_path}"):
350 return f"FAIL : Install the application for {tpk_path}"
352 pkg_id = f"org.tizen.example.Launcher_TC_TOOL_06.Tizen"
354 root_path = get_root_path(f"{pkg_id}")
355 if root_path == "None":
356 return f"FAIL : Get the root path for {pkg_id}"
358 cmd(f"shell dotnettool --tac-disable-pkg {pkg_id}")
360 if exist(f"{root_path}/bin/.tac_symlink"):
361 return "FAIL : The .tac_symlink folder should not exist"
363 raw = cmd(f"shell find {root_path}/bin/ -maxdepth 1 -name *.dll -not -name *.ni.dll")
364 lines = [l for l in raw.splitlines()]
366 return "FAIL : The number of .dll must exist correctly in the bin folder"
368 cmd(f"shell dotnettool --tac-enable-pkg {pkg_id}")
370 if not exist(f"{root_path}/bin/.tac_symlink"):
371 return "FAIL : The .tac_symlink folder should exist"
373 raw = cmd(f"shell find {root_path}/bin/.tac_symlink/ -name *.dll -not -name *.ni.dll")
374 lines1 = [l for l in raw.splitlines()]
375 raw = cmd(f"shell find {DOTNET_DIR}Xamarin.Forms/4.6.0.967/ -name *.dll -not -name *.ni.dll")
376 lines2 = [l for l in raw.splitlines()]
377 if len(lines1) != len(lines2):
378 return "FAIL : The number of .dll in the .tac_symlink and .dll in the TAC must match"
380 raw = cmd(f"shell ls -alZ {root_path}/bin/.tac_symlink/*.dll")
381 lines = [l for l in raw.splitlines() if ".ni.dll" not in l]
383 origin_path = dll.split("->")[1].strip()
384 if not exist(f"{origin_path}"):
385 return "FAIL : The original file of the symbolic link must exist"
389 # The `DB` of the restored `TAC` and `TLC` must be a valid value.
391 sln_name = "Launcher_TC_TOOL_07.Tizen"
393 tpk_path = get_tpk_path(tpk_list, f"{sln_name}")
395 return f"FAIL : Get the tpk path for {sln_name}"
397 if "OK" not in app_install(f"{tpk_path}"):
398 return f"FAIL : Install the application for {tpk_path}"
400 cmd(f"shell rm {DOTNET_DIR}.TAC.App.list.db*")
401 cmd(f"shell rm {DOTNET_DIR}.TLC.App.list.db*")
403 cmd(f"shell dotnettool --tac-restore-db")
405 pkg_id = f"org.tizen.example.Launcher_TC_TOOL_07.Tizen"
407 raw = subprocess.run((f"sdb -s {serial} shell sqlite3 {DOTNET_DIR}.TAC.App.list.db").split(), stdout=subprocess.PIPE, input=f"select * from TAC;\n.q\n", encoding="utf-8").stdout
408 lines = [l for l in raw.splitlines() if f"{pkg_id}" in l]
411 if ("SkiaSharp/2.80.2" in rcd) or \
412 ("Xamarin.Forms/4.6.0.967" in rcd):
416 return "FAIL : TAC database must have a valid value"
418 raw = subprocess.run((f"sdb -s {serial} shell sqlite3 {DOTNET_DIR}.TLC.App.list.db").split(), stdout=subprocess.PIPE, input=f"select * from TLC;\n.q\n", encoding="utf-8").stdout
419 lines = [l for l in raw.splitlines() if f"{pkg_id}" in l]
421 if "libSkiaSharp.so..8e2fcc43f9c49b2de7b6212ff5ed914b319bc92f125715b9fe1f35786df82f98" not in rcd:
422 return "FAIL : TLC database must have a valid value"
426 # The prefer_dotnet_aot metadata value of true will regenerates the native image in all .NET applications of read-only type.
428 sln_name = "Launcher_TC_TOOL_08.Tizen"
430 tpk_path = get_tpk_path(tpk_list, f"{sln_name}")
432 return f"FAIL : Get the tpk path for {sln_name}"
434 cmd(f"shell mount -o remount,rw /")
436 raw = cmd(f"push {tpk_path} /usr/apps/.preload-tpk/")
437 if "1 file(s) pushed. 0 file(s) skipped." in raw:
438 cmd(f"shell install_preload_pkg")
440 cmd(f"shell mount -o remount,ro /")
442 cmd(f"shell dotnettool --ni-regen-all-app")
444 raw = subprocess.run((f"sdb -s {serial} shell pkginfo --metadata-flt").split(), stdout=subprocess.PIPE, input=f"http://tizen.org/metadata/prefer_dotnet_aot\ntrue\n", encoding="utf-8").stdout
445 lines = [l for l in raw.splitlines() if "appid" in l]
447 pkg_id = app.split(": ")[1]
448 raw = subprocess.run((f"sdb -s {serial} shell pkginfo --pkg {pkg_id}").split(), stdout=subprocess.PIPE, encoding="utf-8").stdout
449 readonly = [l for l in raw.splitlines() if "Readonly" in l]
450 if "1" == readonly[0].split(": ")[1]:
451 path = [l for l in raw.splitlines() if "root_path" in l]
452 root_path = path[0].split(": ")[1]
453 raw = cmd(f"shell find {DOTNET_DIR}apps/{pkg_id}/bin/.native_image/ -name *.ni.dll")
454 lines1 = [l for l in raw.splitlines()]
455 raw = cmd(f"shell find {root_path}/bin/ -maxdepth 1 -name *.dll -not -name *.ni.dll")
456 lines2 = [l for l in raw.splitlines()]
457 if len(lines1) != len(lines2):
458 return "FAIL : The number of .dll and .ni.dll must match in the application"
463 if Path(ni).name.replace(".ni.dll", "") == Path(dll).name.replace(".dll", ""):
467 return "FAIL : The file name of .dll and .ni.dll must match in the application"
471 # The `Launcher_TC_TOOL_08` application should load the newly generated native image.
473 pkg_id = f"org.tizen.example.Launcher_TC_TOOL_08.Tizen"
475 pid = launch_and_get_pid(f"-e", f"{pkg_id}")
477 return f"FAIL : Get the pid for {pkg_id}"
479 raw = cmd(f"shell cat /proc/{pid}/smaps | grep Xamarin.Forms.*.dll")
480 if (f"{DOTNET_DIR}apps/{pkg_id}/bin/.native_image/Xamarin.Forms.Platform.Tizen.ni.dll" not in raw) or \
481 (f"{DOTNET_DIR}apps/{pkg_id}/bin/.native_image/Xamarin.Forms.Core.ni.dll" not in raw) or \
482 (f"{DOTNET_DIR}apps/{pkg_id}/bin/.native_image/Xamarin.Forms.Platform.ni.dll" not in raw):
483 return "FAIL : The Xamarin.Forms in the application should be loaded when running the application"
485 cmd(f"shell app_launcher -t {pkg_id}")
489 # It should be done together for update test.
501 # The `Launcher_TC_TOOL_09` application of read-only type generates native image.
503 sln_name = "Launcher_TC_TOOL_09.Tizen"
505 tpk_path = get_tpk_path(tpk_list, f"{sln_name}")
507 return f"FAIL : Get the tpk path for {sln_name}"
509 cmd(f"shell mount -o remount,rw /")
510 raw = cmd(f"push {tpk_path} /usr/apps/.preload-tpk/")
511 if "1 file(s) pushed. 0 file(s) skipped." in raw:
512 cmd(f"shell install_preload_pkg")
513 cmd(f"shell mount -o remount,ro /")
515 pkg_id = f"org.tizen.example.Launcher_TC_TOOL_09.Tizen"
517 root_path = get_root_path(f"{pkg_id}")
518 if root_path == "None":
519 return f"FAIL : Get the root path for {pkg_id}"
521 if exist(f"{root_path}/bin/.native_image"):
522 return "FAIL : The .native_image folder not should exist"
524 cmd(f"shell dotnettool --ni-pkg {pkg_id}")
526 if not exist(f"{DOTNET_DIR}apps/{pkg_id}/bin/.native_image"):
527 return "FAIL : The .native_image folder should exist"
529 raw = cmd(f"shell find {DOTNET_DIR}apps/{pkg_id}/bin/.native_image/ -name *.ni.dll")
530 lines1 = [l for l in raw.splitlines()]
531 raw = cmd(f"shell find {root_path}/bin/ -maxdepth 1 -name *.dll -not -name *.ni.dll")
532 lines2 = [l for l in raw.splitlines()]
533 if len(lines1) != len(lines2):
534 return "FAIL : The number of .dll and .ni.dll must match in the application"
539 if Path(ni).name.replace(".ni.dll", "") == Path(dll).name.replace(".dll", ""):
543 return "FAIL : The file name of .dll and .ni.dll must match in the application"
548 #dotnettool --resolve-all-app
554 cmd(f"shell mount -o remount,rw /")
557 tpk_list = search_tpk(f"{module_name}")
559 pn = run_tc_array(module_name, tc_array)
560 n = int(pn.split(":")[0])
561 f = int(pn.split(":")[1])
562 p = int(pn.split(":")[2])
564 if (len(tc_array) - n) != 0:
565 r = round(((p / (len(tc_array) - n)) * 100), 2)
566 print(f"--- {module_name} TCT Result ---\nNONE : [{n}] / FAIL : [{f}] / PASS : [{p}] - [{r}%]\n")
568 # Uninstall the application and restore to original state
570 cmd(f"uninstall org.tizen.example.Launcher_TC_TOOL_01.Tizen")
571 cmd(f"uninstall org.tizen.example.Launcher_TC_TOOL_02.Tizen")
572 cmd(f"uninstall org.tizen.example.Launcher_TC_TOOL_03.Tizen")
573 cmd(f"uninstall org.tizen.example.Launcher_TC_TOOL_04.Tizen")
574 cmd(f"uninstall org.tizen.example.Launcher_TC_TOOL_05.Tizen")
575 cmd(f"uninstall org.tizen.example.Launcher_TC_TOOL_06.Tizen")
576 cmd(f"uninstall org.tizen.example.Launcher_TC_TOOL_07.Tizen")
578 cmd(f"shell rm {FRAMEWORK_DIR}Tizen.ni.dll")
579 cmd(f"shell rm {FRAMEWORK_DIR}Tizen.Log.ni.dll")
580 cmd(f"shell rm {RUNTIME_DIR}netstandard.ni.dll")
582 cmd(f"shell rm -rf {IBCDATA_DIR}")
584 cmd(f"shell rm -rf {DOTNET_DIR}apps/org.tizen.example.Launcher_TC_TOOL_08.Tizen")
585 cmd(f"shell rm -rf {DOTNET_DIR}apps/org.tizen.example.Launcher_TC_TOOL_09.Tizen")
589 parser = argparse.ArgumentParser(formatter_class=argparse.RawDescriptionHelpFormatter)
590 parser.add_argument("TC_NUMBER", type=str, nargs="*", help="Individual excution")
591 args = parser.parse_args()
594 if args.TC_NUMBER and "TC_" in args.TC_NUMBER[0]:
596 for tc_num in args.TC_NUMBER:
597 if tc_num not in funcMap:
598 print(f"There is no {tc_num} test.")
601 tc_array.append(funcMap[tc_num])
603 tc_array = [TC_01, TC_02, TC_03, TC_04, TC_05, TC_06, TC_07, TC_08, TC_09, TC_10, TC_11, TC_12, TC_13, TC_14, TC_15, TC_16, TC_17, TC_18, TC_19]
606 if len(sys.argv) >= 2 and "TC_" not in sys.argv[1]:
607 serial = read_serial(sys.argv[1])
609 serial = read_serial(None)
612 print("No connected device(s).")
615 device = get_device_type()
616 print(f"=== Dotnet-Launcher [{device}] Test Case - ({module_name}) ===")
623 'TC_01': TC_01, 'TC_02': TC_02, 'TC_03': TC_03, 'TC_04': TC_04, 'TC_05': TC_05, 'TC_06': TC_06,
624 'TC_07': TC_07, 'TC_08': TC_08, 'TC_09': TC_09, 'TC_10': TC_10, 'TC_11': TC_11, 'TC_12': TC_12,
625 'TC_13': TC_13, 'TC_14': TC_14, 'TC_15': TC_15, 'TC_16': TC_16, 'TC_17': TC_17, 'TC_18': TC_17_18, 'TC_19': TC_19,
626 'TOOL_TC_01': TC_01, 'TOOL_TC_02': TC_02, 'TOOL_TC_03': TC_03, 'TOOL_TC_04': TC_04, 'TOOL_TC_05': TC_05, 'TOOL_TC_06': TC_06,
627 'TOOL_TC_07': TC_07, 'TOOL_TC_08': TC_08, 'TOOL_TC_09': TC_09, 'TOOL_TC_10': TC_10, 'TOOL_TC_11': TC_11, 'TOOL_TC_12': TC_12,
628 'TOOL_TC_13': TC_13, 'TOOL_TC_14': TC_14, 'TOOL_TC_15': TC_15, 'TOOL_TC_16': TC_16, 'TOOL_TC_17': TC_17, 'TOOL_TC_18': TC_17_18, 'TOOL_TC_19': TC_19
632 if __name__ == "__main__":
635 except KeyboardInterrupt:
636 print("\nExit (Pressed Ctrl+C)")