def test_func_na(self): """Test that na param columns are ignored.""" f = fsm.StateMachine(p("test_func_na.ods")) f.validate() # the state s = f.states[fsm.hash_dict(dict(SV1="T"))] # the transition t = "EVENT_1", fsm.hash_dict(dict(MV1="T", MV2="T")) self.assertFalse(t in s.transitions)
def main(filename, debug=False): 'draw the state machine that is in $filename' print "Parsing file... (%s)" % time.ctime() machine = fsm.StateMachine(filename) print "Building graph... (%s)" % time.ctime() despair = object() graph_base = u'digraph G {\n%s [label="despair"]\n%%s\n}' % id(despair) graph_lines = [] s2s = {} for state in machine.states.values(): line = "%s [label=%s]" % (id(state), dict2label(state.values)) graph_lines.append(line) for event in machine.events.values(): for transition in event.draw_transitions: if all(map(lambda x: x == "*", transition.target.values())): target = despair else: try: target = machine.get_state(transition.target) except KeyError: continue l = s2s.setdefault((fsm.hash_dict(transition.source), fsm.hash_dict(transition.target)), []) l.append(transition) for (source, target), ts in s2s.items(): try: source = machine.get_state(dict(source)) if all(map(lambda x: x == "*", dict(target).values())): target = despair else: target = machine.get_state(dict(target)) except KeyError: continue cases = [] for t in ts: ps = " ".join(["%s:%s" % (k, v) for k, v in t.parameters.items()]) cases.append("%s:%s" % (t.event, ps)) line = '%s [label="%s", shape=box, fontsize=7]' % (id(ts), "\\n".join(cases)) graph_lines.append(line) arrow = '%s -> %s' % (id(source), id(ts)) graph_lines.append(arrow) arrow = '%s -> %s' % (id(ts), id(target)) graph_lines.append(arrow) dotcode = graph_base % "\n".join(graph_lines) if debug: filename = tempfile.mkstemp(prefix='graph-', suffix='.debug') a = open(filename, "w") a.write(dotcode) a.close() # go for it! print "Drawing... (%s)" % time.ctime() window = xdot.DotWindow() window.set_dotcode(dotcode) window.connect('destroy', gtk.main_quit) gtk.main()