1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- import sys
- import os
- import importlib
- import unittest
- from sccd.runtime.statecharts_core import *
- class PyTestCase(unittest.TestCase):
- def __init__(self, file_name):
- unittest.TestCase.__init__(self)
- self.file_name = file_name
- self.name = os.path.splitext(self.file_name)[0]
- self.module = importlib.import_module(self.name.replace(os.path.sep, "."))
- def __str__(self):
- return self.file_name
- def runTest(self):
- inputs = self.module.Test.input_events
- expected = self.module.Test.expected_events
- controller = self.module.Controller(False)
- if inputs:
- for i in inputs:
- controller.addInput(Event(i.name, i.port, i.parameters), int(i.time_offset * 1000))
- if not expected:
- controller.start()
- return
- output_ports = set()
- expected_result = []
- for s in expected:
- slot = []
- for event in s:
- slot.append(event)
- output_ports.add(event.port)
- if slot:
- expected_result.append(slot)
- output_listener = controller.addOutputListener(list(output_ports))
- def check_output():
- # check output
- for (slot_index, slot) in enumerate(expected_result, start=1) :
- for entry in slot:
- output_event = output_listener.fetch(0)
- self.assertNotEqual(output_event, None, "Not enough output events on selected ports while checking for event %s" % entry)
- matches = True
- if output_event.name != entry.name :
- matches = False
- if output_event.port != entry.port :
- matches = False
- compare_parameters = output_event.getParameters()
- if len(entry.parameters) != len(compare_parameters) :
- matches = False
- for index in range(len(entry.parameters)) :
- if entry.parameters[index] != compare_parameters[index]:
- matches = False
- self.assertTrue(matches, self.name + ", expected results slot " + str(slot_index) + " mismatch. Expected " + str(entry) + ", but got " + str(output_event) + " instead.") # no match found in the options
- # check if there are no extra events
- next_event = output_listener.fetch(0)
- self.assertEqual(next_event, None, "More output events than expected on selected ports: " + str(next_event))
-
- controller.start()
- check_output()
-
- if __name__ == '__main__':
- suite = unittest.TestSuite()
- for d in os.listdir("target_py"):
- subdir = os.path.join("target_py", d)
- if not os.path.isdir(subdir):
- continue
- for f in os.listdir(subdir):
- if f.endswith(".py") and not f.startswith("_"):
- suite.addTest(PyTestCase(os.path.join(subdir, f)))
- unittest.TextTestRunner(verbosity=2).run(suite)
|