1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- from sccd.statechart.parser.parser import *
- from sccd.model.globals import *
- from sccd.controller.controller import InputEvent
- from sccd.statechart.dynamic.event import Event
- from sccd.model.model import *
- @dataclass
- class TestVariant:
- name: str
- model: Any
- input: list
- output: list
- def create_test_parser(create_statechart_parser):
- globals = Globals(fixed_delta=None)
- statechart_parser = create_statechart_parser(globals)
- input = []
- output = []
- def parse_test(el):
- def parse_input(el):
- def parse_input_event(el):
- name = require_attribute(el, "name")
- port = require_attribute(el, "port")
- time = require_attribute(el, "time")
- time_expr = parse_expression(globals, time)
- time_type = time_expr.init_expr(scope=None)
- check_duration_type(time_type)
- time_val = time_expr.eval(memory=None)
- input.append(InputEvent(name=name, port=port, params=[], time_offset=time_val))
- return [("event+", parse_input_event)]
- def parse_output(el):
- def parse_big_step(el):
- big_step = []
- output.append(big_step)
- def parse_output_event(el):
- name = require_attribute(el, "name")
- port = require_attribute(el, "port")
- params = []
- big_step.append(Event(id=0, name=name, port=port, params=params))
- def parse_param(el):
- val_text = require_attribute(el, "val")
- val_expr = parse_expression(globals, val_text)
- val = val_expr.eval(memory=None)
- params.append(val)
- return [("param*", parse_param)]
- return [("event+", parse_output_event)]
- return [("big_step+", parse_big_step)]
- def when_done(statechart):
- globals.process_durations()
- variants = statechart.semantics.generate_variants()
- def variant_description(i, variant) -> str:
- if not variant:
- return ""
- text = "Semantic variant %d of %d:" % (i+1, len(variants))
- for f in fields(variant):
- text += "\n %s: %s" % (f.name, getattr(variant, f.name))
- return text
- return [TestVariant(
- name=variant_description(i, variant),
- model=SingleInstanceModel(
- globals,
- Statechart(
- semantics=variant,
- scope=statechart.scope,
- datamodel=statechart.datamodel,
- inport_events=statechart.inport_events,
- event_outport=statechart.event_outport,
- tree=statechart.tree)),
- input=input,
- output=output)
- for i, variant in enumerate(variants)]
- return (statechart_parser + [("input?", parse_input), ("output?", parse_output)], when_done)
- return [("test", parse_test)]
|