process_tests.py 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. import os
  2. import re
  3. import json
  4. import TraceChecker
  5. # ANSI color escape codes
  6. RED = '\033[91m' # Red color
  7. GREEN = '\033[92m' # Green color
  8. YELLOW = '\033[93m' # Yellow color
  9. ENDC = '\033[0m' # Reset color to default
  10. def sort_directories(test_directory):
  11. with os.scandir(tests_directory) as entries:
  12. sorted_entries = sorted(entries, key=lambda entry: entry.name)
  13. sorted_items = [entry.name for entry in sorted_entries]
  14. # Read directory names
  15. all_test_dirs = [d for d in os.listdir(tests_directory) if os.path.isdir(os.path.join(tests_directory, d))]
  16. # Sort the list of directories using natural sort
  17. return sorted(all_test_dirs, key=natural_sort_key)
  18. def natural_sort_key(s):
  19. # Split the string into a list of strings and numbers
  20. return [int(text) if text.isdigit() else text.lower() for text in re.split(r'(\d+)', s)]
  21. if __name__ == '__main__':
  22. tests_directory = "./tests"
  23. #options = ["GLOBAL_IO", "INTERNAL_IO","STATECHART"]
  24. #options = ["STATECHART"]
  25. config_data = {
  26. "trace": "external"
  27. }
  28. checkers = {
  29. "Python": TraceChecker.PythonSCCDTraceChecker(),
  30. "Pydevs": TraceChecker.PydevsSCCDTraceChecker()
  31. }
  32. sorted_dirs = sort_directories(tests_directory)
  33. results = {checker_name: [] for checker_name in checkers}
  34. for directory_name in sorted_dirs:
  35. full_directory = os.path.join(tests_directory, directory_name)
  36. if os.path.isdir(full_directory):
  37. print(f"Processing {directory_name}...")
  38. for checker_name, checker in checkers.items():
  39. # Path to your JSON file
  40. config_file = os.path.join(full_directory, 'config.json')
  41. # Open and read the JSON file
  42. if os.path.exists(config_file):
  43. with open(config_file, 'r') as file:
  44. config_data = json.load(file)
  45. else:
  46. config_data = {
  47. "trace": "external"
  48. }
  49. checker.compile(full_directory)
  50. checker.run(full_directory)
  51. result = checker.check(full_directory, config_data)
  52. results[checker_name].append(result)
  53. if result == 0:
  54. print(f"{checker_name}: ", RED + "Failed" + ENDC)
  55. elif result == 1:
  56. print(f"{checker_name}: ", GREEN + "Passed" + ENDC)
  57. else:
  58. print(f"{checker_name}: ", YELLOW + "Need more detailed testing" + ENDC)
  59. # Print summary
  60. print("\nTest Summary:")
  61. for checker_name in checkers:
  62. print(f"\n{checker_name} Results:")
  63. print(f"Passed: {GREEN}{results[checker_name].count(1)}{ENDC}")
  64. print(f"Failed: {RED}{results[checker_name].count(0)}{ENDC}")
  65. print(f"Warnings: {YELLOW}{results[checker_name].count(2)}{ENDC}")