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 `Launcher_TC_TLC_01` application must have TLC applied.
14 if not check_tc_support():
15 return "NONE - TC_01 is not supported on this platform"
17 sln_name = "Launcher_TC_TLC_01.Tizen"
19 tpk_path = get_tpk_path(tpk_list, f"{sln_name}")
21 return f"FAIL : Get the tpk path for {sln_name}"
23 if "OK" not in app_install(f"{tpk_path}"):
24 return f"FAIL : Install the application for {tpk_path}"
26 pkg_id = f"org.tizen.example.Launcher_TC_TLC_01.Tizen"
28 root_path = get_root_path(f"{pkg_id}")
29 if root_path == "None":
30 return f"FAIL : Get the root path for {pkg_id}"
32 if not exist(f"{root_path}/bin/libSkiaSharp.so"):
33 return "FAIL : The libSkiaSharp.so library should exist in the application"
35 raw = cmd(f"shell ls -alZ {root_path}/bin/libSkiaSharp.so")
36 if (f"{root_path}/bin/libSkiaSharp.so" not in raw) or \
37 (f"{DOTNET_DIR}Libraries/libSkiaSharp.so.." not in raw):
38 return "FAIL : The libSkiaSharp.so library should exist or be a symbolic link"
40 sha = raw.split("..")[1].rstrip()
42 raw = cmd(f"shell find {DOTNET_DIR}Libraries/ -name libSkiaSharp.so*")
44 return f"FAIL : The libSkiaSharp.so library should exist in {DOTNET_DIR}"
46 if "OK" not in check_library_arch(f"{root_path}", "libSkiaSharp.so"):
47 return "FAIL : The arch of the target and the arch of the library must match"
49 pid = launch_and_get_pid(f"-e", f"{pkg_id}")
51 return f"FAIL : Get the pid for {pkg_id}"
53 raw = cmd(f"shell cat /proc/{pid}/smaps | grep libSkiaSharp.so")
54 if (f"{DOTNET_DIR}Libraries/libSkiaSharp.so.." + sha) not in raw:
55 return "FAIL : TThe libSkiaSharp.so library in the TLC should be loaded when running the application"
57 cmd(f"shell app_launcher -t {pkg_id}")
61 # The `Launcher_TC_TLC_02` application must have TLC applied.
63 if not check_tc_support():
64 return "NONE - TC_02 is not supported on this platform"
66 sln_name = "Launcher_TC_TLC_02.Tizen"
68 tpk_path = get_tpk_path(tpk_list, f"{sln_name}")
70 return f"FAIL : Get the tpk path for {sln_name}"
72 if "OK" not in app_install(f"{tpk_path}"):
73 return f"FAIL : Install the application for {tpk_path}"
75 pkg_id = f"org.tizen.example.Launcher_TC_TLC_00.Tizen"
77 root_path = get_root_path(f"{pkg_id}")
78 if root_path == "None":
79 return f"FAIL : Get the root path for {pkg_id}"
81 if not exist(f"{root_path}/bin/libSkiaSharp.so"):
82 return "FAIL : The libSkiaSharp.so library should exist in the application"
84 raw = cmd(f"shell ls -alZ {root_path}/bin/libSkiaSharp.so")
85 if (f"{root_path}/bin/libSkiaSharp.so" not in raw) or \
86 (f"{DOTNET_DIR}Libraries/libSkiaSharp.so.." not in raw):
87 return "FAIL : The libSkiaSharp.so library should exist or be a symbolic link"
89 sha = raw.split("..")[1].rstrip()
91 raw = cmd(f"shell find {DOTNET_DIR}Libraries/ -name libSkiaSharp.so*")
93 return f"FAIL : The libSkiaSharp.so library should exist in {DOTNET_DIR}"
95 if "OK" not in check_library_arch(f"{root_path}", "libSkiaSharp.so"):
96 return "FAIL : The arch of the target and the arch of the library must match"
98 pid = launch_and_get_pid(f"-e", f"{pkg_id}")
100 return f"FAIL : Get the pid for {pkg_id}"
102 raw = cmd(f"shell cat /proc/{pid}/smaps | grep libSkiaSharp.so")
103 if (f"{DOTNET_DIR}Libraries/libSkiaSharp.so.." + sha) not in raw:
104 return "FAIL : The libSkiaSharp.so library in the TLC should be loaded when running the application"
106 cmd(f"shell app_launcher -t {pkg_id}")
110 # The `Launcher_TC_TLC_03` application should not apply TLC when updating.
112 if not check_tc_support():
113 return "NONE - TC_03 is not supported on this platform"
115 pkg_id = f"org.tizen.example.Launcher_TC_TLC_00.Tizen"
117 root_path = get_root_path(f"{pkg_id}")
118 if root_path == "None":
119 return f"FAIL : Get the root path for {pkg_id}"
121 if not exist(f"{root_path}/bin/libSkiaSharp.so"):
122 return "FAIL : The libSkiaSharp.so library should exist in the application"
124 raw = cmd(f"shell ls -alZ {root_path}/bin/libSkiaSharp.so")
125 if (f"{root_path}/bin/libSkiaSharp.so" not in raw) or \
126 (f"{DOTNET_DIR}Libraries/libSkiaSharp.so.." not in raw):
127 return "FAIL : The libSkiaSharp.so library should exist or be a symbolic link"
129 sha = raw.split("..")[1].rstrip()
131 sln_name = "Launcher_TC_TLC_03.Tizen"
133 tpk_path = get_tpk_path(tpk_list, f"{sln_name}")
135 return f"FAIL : Get the tpk path for {sln_name}"
137 if "OK" not in app_install(f"{tpk_path}"):
138 return f"FAIL : Install the application for {tpk_path}"
140 root_path = get_root_path(f"{pkg_id}")
141 if root_path == "None":
142 return f"FAIL : Get the root path for {pkg_id}"
144 raw = cmd(f"shell find {DOTNET_DIR}Libraries/ -name libSkiaSharp.so*")
146 return f"FAIL : The libSkiaSharp.so library should not exist in {DOTNET_DIR}"
148 if exist(f"{root_path}/bin/libSkiaSharp.so"):
149 return "FAIL : The libSkiaSharp.so library should not exist in the application"
151 pid = launch_and_get_pid(f"-e", f"{pkg_id}")
153 return f"FAIL : Get the pid for {pkg_id}"
155 raw = cmd(f"shell cat /proc/{pid}/smaps | grep libSkiaSharp.so")
156 if f"{DOTNET_DIR}Libraries/libSkiaSharp.so.." in raw:
157 return "FAIL : The libSkiaSharp.so library should not be loaded when running the application"
159 cmd(f"shell app_launcher -t {pkg_id}")
163 # It should be done together for update test.
175 # The `Launcher_TC_TLC_04` application is normally TLC applied when updating.
177 if not check_tc_support():
178 return "NONE - TC_04 is not supported on this platform"
180 sln_name = "Launcher_TC_TLC_04.Tizen"
182 tpk_path = get_tpk_path(tpk_list, f"{sln_name}")
184 return f"FAIL : Get the tpk path for {sln_name}"
186 if "OK" not in app_install(f"{tpk_path}"):
187 return f"FAIL : Install the application for {tpk_path}"
189 pkg_id = f"org.tizen.example.Launcher_TC_TLC_00.Tizen"
191 root_path = get_root_path(f"{pkg_id}")
192 if root_path == "None":
193 return f"FAIL : Get the root path for {pkg_id}"
195 if not exist(f"{root_path}/bin/libSkiaSharp.so"):
196 return "FAIL : The libSkiaSharp.so library should exist in the application"
198 raw = cmd(f"shell ls -alZ {root_path}/bin/libSkiaSharp.so")
199 if (f"{root_path}/bin/libSkiaSharp.so" not in raw) or \
200 (f"{DOTNET_DIR}Libraries/libSkiaSharp.so.." not in raw):
201 return "FAIL : The libSkiaSharp.so library should exist or be a symbolic link"
203 sha = raw.split("..")[1].rstrip()
205 raw = cmd(f"shell find {DOTNET_DIR}Libraries/ -name libSkiaSharp.so*")
207 return f"FAIL : The libSkiaSharp.so library should exist in {DOTNET_DIR}"
209 if "OK" not in check_library_arch(f"{root_path}", "libSkiaSharp.so"):
210 return "FAIL : The arch of the target and the arch of the library must match"
212 pid = launch_and_get_pid(f"-e", f"{pkg_id}")
214 return f"FAIL : Get the pid for {pkg_id}"
216 raw = cmd(f"shell cat /proc/{pid}/smaps | grep libSkiaSharp.so")
217 if (f"{DOTNET_DIR}Libraries/libSkiaSharp.so.." + sha) not in raw:
218 return "FAIL : The libSkiaSharp.so library in the TLC should be loaded when running the application"
220 cmd(f"shell app_launcher -t {pkg_id}")
224 # The `Launcher_TC_TLC_05` application is normally TLC applied when updating.
226 if not check_tc_support():
227 return "NONE - TC_05 is not supported on this platform"
229 pkg_id = f"org.tizen.example.Launcher_TC_TLC_00.Tizen"
231 root_path = get_root_path(f"{pkg_id}")
232 if root_path == "None":
233 return f"FAIL : Get the root path for {pkg_id}"
235 if not exist(f"{root_path}/bin/libSkiaSharp.so"):
236 return "FAIL : The libSkiaSharp.so library should exist in the application"
238 raw = cmd(f"shell ls -alZ {root_path}/bin/libSkiaSharp.so")
239 if (f"{root_path}/bin/libSkiaSharp.so" not in raw) or \
240 (f"{DOTNET_DIR}Libraries/libSkiaSharp.so.." not in raw):
241 return "FAIL : The libSkiaSharp.so library should exist or be a symbolic link"
243 sha = raw.split("..")[1].rstrip()
245 sln_name = "Launcher_TC_TLC_05.Tizen"
247 tpk_path = get_tpk_path(tpk_list, f"{sln_name}")
249 return f"FAIL : Get the tpk path for {sln_name}"
251 if "OK" not in app_install(f"{tpk_path}"):
252 return f"FAIL : Install the application for {tpk_path}"
254 root_path = get_root_path(f"{pkg_id}")
255 if root_path == "None":
256 return f"FAIL : Get the root path for {pkg_id}"
258 raw = cmd(f"shell find {DOTNET_DIR}Libraries/ -name libSkiaSharp.so*")
260 return f"FAIL : The libSkiaSharp.so library should not exist in {DOTNET_DIR}"
262 if not exist(f"{root_path}/bin/libSkiaSharp.so"):
263 return "FAIL : The libSkiaSharp.so library should exist in the application"
265 raw = cmd(f"shell ls -alZ {root_path}/bin/libSkiaSharp.so")
266 if (f"{root_path}/bin/libSkiaSharp.so" not in raw) or \
267 (f"{DOTNET_DIR}Libraries/libSkiaSharp.so.." not in raw):
268 return "FAIL : The libSkiaSharp.so library should exist or be a symbolic link"
270 sha = raw.split("..")[1].rstrip()
272 raw = cmd(f"shell find {DOTNET_DIR}Libraries/ -name libSkiaSharp.so*")
274 return f"FAIL : The libSkiaSharp.so library should exist in {DOTNET_DIR}"
276 if "OK" not in check_library_arch(f"{root_path}", "libSkiaSharp.so"):
277 return "FAIL : The arch of the target and the arch of the library must match"
279 pid = launch_and_get_pid(f"-e", f"{pkg_id}")
281 return f"FAIL : Get the pid for {pkg_id}"
283 raw = cmd(f"shell cat /proc/{pid}/smaps | grep libSkiaSharp.so")
284 if (f"{DOTNET_DIR}Libraries/libSkiaSharp.so.." + sha) not in raw:
285 return "FAIL : The libSkiaSharp.so library in the TLC should be loaded when running the application"
287 cmd(f"shell app_launcher -t {pkg_id}")
291 # It should be done together for update test.
303 # The `Launcher_TC_TLC_06` application should not apply TLC when updating.
305 if not check_tc_support():
306 return "NONE - TC_06 is not supported on this platform"
308 pkg_id = f"org.tizen.example.Launcher_TC_TLC_00.Tizen"
310 root_path = get_root_path(f"{pkg_id}")
311 if root_path == "None":
312 return f"FAIL : Get the root path for {pkg_id}"
314 if not exist(f"{root_path}/bin/libSkiaSharp.so"):
315 return "FAIL : The libSkiaSharp.so library should exist in the application"
317 raw = cmd(f"shell ls -alZ {root_path}/bin/libSkiaSharp.so")
318 if (f"{root_path}/bin/libSkiaSharp.so" not in raw) or \
319 (f"{DOTNET_DIR}Libraries/libSkiaSharp.so.." not in raw):
320 return "FAIL : The libSkiaSharp.so library should exist or be a symbolic link"
322 sha = raw.split("..")[1].rstrip()
324 sln_name = "Launcher_TC_TLC_06.Tizen"
326 tpk_path = get_tpk_path(tpk_list, f"{sln_name}")
328 return f"FAIL : Get the tpk path for {sln_name}"
330 if "OK" not in app_install(f"{tpk_path}"):
331 return f"FAIL : Install the application for {tpk_path}"
333 root_path = get_root_path(f"{pkg_id}")
334 if root_path == "None":
335 return f"FAIL : Get the root path for {pkg_id}"
337 raw = cmd(f"shell find {DOTNET_DIR}Libraries/ -name libSkiaSharp.so*")
339 return f"FAIL : The libSkiaSharp.so library should not exist in {DOTNET_DIR}"
341 if not exist(f"{root_path}/bin/libSkiaSharp.so"):
342 return "FAIL : The libSkiaSharp.so library should exist only in the application"
344 raw = cmd(f"shell ls -alZ {root_path}/bin/libSkiaSharp.so")
346 return "FAIL : The libSkiaSharp.so library should not be a symbolic link"
348 if "OK" not in check_library_arch(f"{root_path}", "libSkiaSharp.so"):
349 return "FAIL : The arch of the target and the arch of the library must match"
351 pid = launch_and_get_pid(f"-e", f"{pkg_id}")
353 return f"FAIL : Get the pid for {pkg_id}"
355 raw = cmd(f"shell cat /proc/{pid}/smaps | grep libSkiaSharp.so")
356 if (f"{DOTNET_DIR}Libraries/libSkiaSharp.so.." in raw) or \
357 (f"{root_path}/bin/libSkiaSharp.so" not in raw):
358 return "FAIL : The libSkiaSharp.so library in the application should be loaded when running the application"
360 cmd(f"shell app_launcher -t {pkg_id}")
364 # It should be done together for update test.
380 # The `Launcher_TC_TLC_07`, `Launcher_TC_TLC_08` applications using the same nuget are normally TLC applied.
382 if not check_tc_support():
383 return "NONE - TC_07 is not supported on this platform"
385 sln_name = "Launcher_TC_TLC_07.Tizen"
387 tpk_path = get_tpk_path(tpk_list, f"{sln_name}")
389 return f"FAIL : Get the tpk path for {sln_name}"
391 if "OK" not in app_install(f"{tpk_path}"):
392 return f"FAIL : Install the application for {tpk_path}"
394 pkg_id1 = f"org.tizen.example.Launcher_TC_TLC_07.Tizen"
396 root_path = get_root_path(f"{pkg_id1}")
397 if root_path == "None":
398 return f"FAIL : Get the root path for {pkg_id1}"
400 if not exist(f"{root_path}/bin/libHarfBuzzSharp.so"):
401 return "FAIL : The libHarfBuzzSharp.so library should exist in the application"
403 raw = cmd(f"shell ls -alZ {root_path}/bin/libHarfBuzzSharp.so")
404 if (f"{root_path}/bin/libHarfBuzzSharp.so" not in raw) or \
405 (f"{DOTNET_DIR}Libraries/libHarfBuzzSharp.so.." not in raw):
406 return "FAIL : The libHarfBuzzSharp.so library should exist or be a symbolic link"
408 sha = raw.split("..")[1].rstrip()
410 raw = cmd(f"shell find {DOTNET_DIR}Libraries/ -name libHarfBuzzSharp.so*")
412 return f"FAIL : The libHarfBuzzSharp.so library should exist in {DOTNET_DIR}"
414 sln_name = "Launcher_TC_TLC_08.Tizen"
416 tpk_path = get_tpk_path(tpk_list, f"{sln_name}")
418 return f"FAIL : Get the tpk path for {sln_name}"
420 if "OK" not in app_install(f"{tpk_path}"):
421 return f"FAIL : Install the application for {tpk_path}"
423 pkg_id2 = f"org.tizen.example.Launcher_TC_TLC_08.Tizen"
425 root_path = get_root_path(f"{pkg_id2}")
426 if root_path == "None":
427 return f"FAIL : Get the root path for {pkg_id2}"
429 if not exist(f"{root_path}/bin/libHarfBuzzSharp.so"):
430 return "FAIL : The libHarfBuzzSharp.so library should exist"
432 raw = cmd(f"shell ls -alZ {root_path}/bin/libHarfBuzzSharp.so")
433 if (f"{root_path}/bin/libHarfBuzzSharp.so" not in raw) or \
434 (f"{DOTNET_DIR}Libraries/libHarfBuzzSharp.so.." not in raw):
435 return "FAIL : The libHarfBuzzSharp.so library should exist or be a symbolic link"
437 if "OK" not in check_library_arch(f"{root_path}", "libHarfBuzzSharp.so"):
438 return "FAIL : The arch of the target and the arch of the library must match"
440 sha = raw.split("..")[1].rstrip()
442 raw = cmd(f"uninstall {pkg_id1}")
443 if "key[end] val[ok]" not in raw:
444 return f"FAIL : Uninstall the application for {pkg_id1}"
446 raw = cmd(f"shell find {DOTNET_DIR}Libraries/ -name libHarfBuzzSharp.so*")
448 return f"FAIL : The libHarfBuzzSharp.so library should exist in {DOTNET_DIR}"
450 if "OK" not in check_library_arch(f"{root_path}", "libHarfBuzzSharp.so"):
451 return "FAIL : The arch of the target and the arch of the library must match"
453 pid = launch_and_get_pid(f"-e", f"{pkg_id2}")
455 return f"FAIL : Get the pid for {pkg_id2}"
457 raw = cmd(f"shell cat /proc/{pid}/smaps | grep libHarfBuzzSharp.so")
458 if (f"{DOTNET_DIR}Libraries/libHarfBuzzSharp.so.." + sha) not in raw:
459 return "FAIL : The libHarfBuzzSharp.so library in the TLC should be loaded when running the application"
461 cmd(f"shell app_launcher -t {pkg_id2}")
465 # The `Launcher_TC_TLC_09` application is normally TLC applied when uninstall.
467 if not check_tc_support():
468 return "NONE - TC_08 is not supported on this platform"
470 sln_name = "Launcher_TC_TLC_09.Tizen"
472 tpk_path = get_tpk_path(tpk_list, f"{sln_name}")
474 return f"FAIL : Get the tpk path for {sln_name}"
476 if "OK" not in app_install(f"{tpk_path}"):
477 return f"FAIL : Install the application for {tpk_path}"
479 pkg_id = f"org.tizen.example.Launcher_TC_TLC_09.Tizen"
481 root_path = get_root_path(f"{pkg_id}")
482 if root_path == "None":
483 return f"FAIL : Get the root path for {pkg_id}"
485 if not exist(f"{root_path}/bin/libSkiaSharp.so"):
486 return "FAIL : The libSkiaSharp.so library should exist in the application"
488 raw = cmd(f"shell ls -alZ {root_path}/bin/libSkiaSharp.so")
489 if (f"{root_path}/bin/libSkiaSharp.so" not in raw) or \
490 (f"{DOTNET_DIR}Libraries/libSkiaSharp.so.." not in raw):
491 return "FAIL : The libSkiaSharp.so library should exist or be a symbolic link"
493 if "OK" not in check_library_arch(f"{root_path}", "libSkiaSharp.so"):
494 return "FAIL : The arch of the target and the arch of the library must match"
496 sha = raw.split("..")[1].rstrip()
498 raw = cmd(f"shell find {DOTNET_DIR}Libraries/ -name libSkiaSharp.so*")
500 return f"FAIL : The libSkiaSharp.so library should exist in {DOTNET_DIR}"
502 raw = cmd(f"uninstall {pkg_id}")
503 if "key[end] val[ok]" not in raw:
504 return f"FAIL : Uninstall the application for {pkg_id}"
506 raw = cmd(f"shell find {DOTNET_DIR}Libraries/ -name libSkiaSharp.so*")
508 return f"FAIL : The libSkiaSharp.so library should not exist in {DONTET_DIR}"
512 # The `Launcher_TC_TLC_10` application should match the information of nuget with the value of TLC database.
514 if not check_tc_support():
515 return "NONE - TC_09 is not supported on this platform"
517 sln_name = "Launcher_TC_TLC_10.Tizen"
519 tpk_path = get_tpk_path(tpk_list, f"{sln_name}")
521 return f"FAIL : Get the tpk path for {sln_name}"
523 if "OK" not in app_install(f"{tpk_path}"):
524 return f"FAIL : Install the application for {tpk_path}"
526 pkg_id = f"org.tizen.example.Launcher_TC_TLC_10.Tizen"
528 root_path = get_root_path(f"{pkg_id}")
529 if root_path == "None":
530 return f"FAIL : Get the root path for {pkg_id}"
532 raw = cmd(f"shell find {root_path}/bin/ -name lib*.so*")
533 lines1 = [l for l in raw.splitlines()]
535 return "FAIL : The libraries should exist in the application"
537 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
538 lines2 = [l for l in raw.splitlines() if f"{pkg_id}" in l]
540 return "FAIL : TLC database must have a valid value"
543 raw = cmd(f"shell ls -alZ {lib}")
545 return f"FAIL : The {name} library should be a symbolic link"
547 name = Path(lib).name
548 if "OK" not in check_library_arch(f"{root_path}", f"{name}"):
549 return "FAIL : The arch of the target and the arch of the library must match"
551 sha = raw.split("..")[1].rstrip()
553 raw = cmd(f"shell find {DOTNET_DIR}Libraries/ -name {name}..{sha}")
554 if f"{DOTNET_DIR}Libraries/{name}..{sha}" not in raw:
555 return f"FAIL : The {name} library should exist in {DOTNET_DIR}"
559 if f"{name}..{sha}" in raw:
564 return "FAIL : TLC database must have a valid value"
571 cmd(f"shell mount -o remount,rw /")
574 tpk_list = search_tpk(f"{module_name}")
576 pn = run_tc_array(module_name, tc_array)
577 p = int(pn.split(":")[0])
578 n = int(pn.split(":")[1])
580 f = len(tc_array) - p - n
581 if (len(tc_array) - n) != 0:
582 r = round(((p / (len(tc_array) - n)) * 100), 2)
583 print(f"--- {module_name} TCT Result ---\nNONE : [{n}] / FAIL : [{f}] / PASS : [{p}] - [{r}%]\n")
585 # Uninstall the application and restore to original state
587 cmd(f"uninstall org.tizen.example.Launcher_TC_TLC_01.Tizen")
588 cmd(f"uninstall org.tizen.example.Launcher_TC_TLC_00.Tizen")
589 cmd(f"uninstall org.tizen.example.Launcher_TC_TLC_07.Tizen")
590 cmd(f"uninstall org.tizen.example.Launcher_TC_TLC_08.Tizen")
591 cmd(f"uninstall org.tizen.example.Launcher_TC_TLC_09.Tizen")
592 cmd(f"uninstall org.tizen.example.Launcher_TC_TLC_10.Tizen")
596 parser = argparse.ArgumentParser(formatter_class=argparse.RawDescriptionHelpFormatter)
597 parser.add_argument("TC_NUMBER", type=str, nargs="*", help="Individual excution")
598 args = parser.parse_args()
601 if args.TC_NUMBER and "TC_" in args.TC_NUMBER[0]:
603 for tc_num in args.TC_NUMBER:
604 if tc_num not in funcMap:
605 print(f"There is no {tc_num} test.")
608 tc_array.append(funcMap[tc_num])
610 tc_array = [TC_01, TC_02, TC_03, TC_04, TC_05, TC_06, TC_07, TC_08, TC_09]
613 if len(sys.argv) >= 2 and "TC_" not in sys.argv[1]:
614 serial = read_serial(sys.argv[1])
616 serial = read_serial(None)
619 print("No connected device(s).")
622 device = get_device_type()
623 print(f"=== Dotnet-Launcher [{device}] Test Case - ({module_name}) ===")
630 'TC_01': TC_01, 'TC_02': TC_02, 'TC_03': TC_02_03, 'TC_04': TC_04, 'TC_05': TC_04_05, 'TC_06': TC_04_05_06, 'TC_07': TC_07, 'TC_08': TC_08, 'TC_09': TC_09,
631 'TLC_TC_01': TC_01, 'TLC_TC_02': TC_02, 'TLC_TC_03': TC_02_03, 'TLC_TC_04': TC_04, 'TLC_TC_05': TC_04_05,
632 'TLC_TC_06': TC_04_05_06, 'TLC_TC_07': TC_07, 'TLC_TC_08': TC_08, 'TLC_TC_09': TC_09
636 if __name__ == "__main__":
639 except KeyboardInterrupt:
640 print("\nExit (Pressed Ctrl+C)")