test.py 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. import argparse
  2. from lib.os_tools import *
  3. from sccd.test.test_parser import *
  4. from sccd.util.debug import *
  5. class PseudoSucceededTest(unittest.TestCase):
  6. def __init__(self, name: str, msg):
  7. super().__init__()
  8. self.name = name
  9. self.msg = msg
  10. def __str__(self):
  11. return self.name
  12. def runTest(self):
  13. print_debug(self.msg)
  14. class PseudoFailedTest(unittest.TestCase):
  15. def __init__(self, name: str, e: Exception):
  16. super().__init__()
  17. self.name = name
  18. self.e = e
  19. def __str__(self):
  20. return self.name
  21. def runTest(self):
  22. raise self.e
  23. if __name__ == '__main__':
  24. argparser = argparse.ArgumentParser(
  25. description="Run SCCD tests.",
  26. epilog="Set environment variable SCCDDEBUG=1 to display debug information about the inner workings of the runtime.")
  27. argparser.add_argument('path', metavar='PATH', type=str, nargs='*', help="Tests to run. Can be a XML file or a directory. If a directory, it will be recursively scanned for XML files.")
  28. argparser.add_argument('--build-dir', metavar='BUILD_DIR', type=str, default='build', help="Directory for built tests. Defaults to 'build'")
  29. args = argparser.parse_args()
  30. src_files = get_files(args.path,
  31. filter=lambda file: (file.startswith("test_") or file.startswith("fail_")) and file.endswith(".xml"))
  32. if len(src_files) == 0:
  33. print("No input files specified.")
  34. print()
  35. argparser.print_usage()
  36. exit()
  37. suite = unittest.TestSuite()
  38. for src_file in src_files:
  39. parser = TestParser()
  40. should_fail = os.path.basename(src_file).startswith("fail_")
  41. try:
  42. parser.push("src_file", src_file)
  43. parser.push("tests", [])
  44. statechart = parser.parse(etree.iterparse(src_file, events=("start", "end")))
  45. tests = parser.pop("tests")
  46. parser.pop("src_file")
  47. if should_fail:
  48. suite.addTest(PseudoFailedTest(name=src_file, e=Exception("Unexpectedly succeeded at loading.")))
  49. else:
  50. for test in tests:
  51. suite.addTest(test)
  52. except Exception as e:
  53. if should_fail:
  54. suite.addTest(PseudoSucceededTest(name=src_file, msg=str(e)))
  55. else:
  56. suite.addTest(PseudoFailedTest(name=src_file, e=e))
  57. unittest.TextTestRunner(verbosity=2).run(suite)