func TestLibrary(t *testing.T) { case1 := []struct { library string }{ {`<library xmlns="http://www.freesp.de/xml/freeSP" version="1.0"> <signal-type name="s1" scope="" mode="" c-type="" message-id=""></signal-type> <node-type name="Test"> <intype port="" type="s1"></intype> <outtype port="" type="s1"></outtype> </node-type> </library> `}, } for i, c := range case1 { freesp.Init() var l bh.LibraryIf = LibraryNew("test.alml", nil) buf := copyBuf(c.library) _, err := l.Read(buf) if err != nil { t.Errorf("Testcase %d: Failed to read from buffer: %v", i, err) return } } }
func TestGraph(t *testing.T) { case1 := []struct { library, graph string nodes, connections int }{ {`<library xmlns="http://www.freesp.de/xml/freeSP" version="1.0"> <signal-type name="s1" scope="" mode="" c-type="" message-id=""></signal-type> <node-type name="Test"> <intype port="" type="s1"></intype> <outtype port="" type="s1"></outtype> </node-type> </library> `, `<?xml version="1.0" encoding="UTF-8"?> <signal-graph xmlns="http://www.freesp.de/xml/freeSP" version="1.0"> <nodes> <input name="sensor"> <outtype type="s1"/> </input> <output name="actuator"> <intype type="s1"/> </output> <processing-node name="test" type="Test"></processing-node> </nodes> <connections> <connect from="sensor" to="test"/> <connect from="test" to="actuator"/> </connections> </signal-graph> `, 3, 2}, } for i, c := range case1 { freesp.Init() var l bh.LibraryIf = LibraryNew("test.alml", nil) buf := copyBuf(c.library) _, err := l.Read(buf) if err != nil { t.Errorf("Testcase %d: Failed to read from buffer: %v", i, err) return } var sg bh.SignalGraphIf = SignalGraphNew("test.sml", nil) buf = copyBuf(c.graph) _, err = sg.Read(buf) if err != nil { t.Errorf("Testcase %d: Failed to read from buffer: %v", i, err) return } var st bh.SignalGraphTypeIf = sg.ItsType() if len(st.Nodes()) != c.nodes { t.Errorf("Testcase %d: NodeIf count mismatch", i) return } } }
func LibraryUsesNodeType(l bh.LibraryIf, nt bh.NodeTypeIf) bool { for _, t := range l.NodeTypes() { if t.TypeName() == nt.TypeName() { return true } for _, impl := range t.Implementation() { if impl.ImplementationType() == bh.NodeTypeGraph { if SignalGraphTypeUsesNodeType(impl.Graph(), nt) { return true } } } } return false }
func CreateXmlLibrary(l bh.LibraryIf) *backend.XmlLibrary { fname := l.Filename() ret := backend.XmlLibraryNew() reflist := tool.StringListInit() for _, t := range l.SignalTypes() { ref := t.DefinedAt() _, ok := reflist.Find(ref) if !ok && ref != fname { reflist.Append(ref) } } for _, t := range l.NodeTypes() { ref := t.DefinedAt() _, ok := reflist.Find(ref) if !ok && ref != fname { reflist.Append(ref) } for _, impl := range t.Implementation() { if impl.ImplementationType() == bh.NodeTypeGraph { for _, lib := range impl.Graph().Libraries() { ref := lib.Filename() _, ok := reflist.Find(ref) if !ok && ref != fname { reflist.Append(ref) } } } } } for _, ref := range reflist.Strings() { ret.Libraries = append(ret.Libraries, *CreateXmlLibraryRef(ref)) } for _, t := range l.SignalTypes() { ret.SignalTypes = append(ret.SignalTypes, *CreateXmlSignalType(t)) } for _, t := range l.NodeTypes() { ret.NodeTypes = append(ret.NodeTypes, *CreateXmlNodeType(t)) } return ret }
func RemoveRegisteredLibrary(lib bh.LibraryIf) { delete(libraries, lib.Filename()) }
func RegisterLibrary(lib bh.LibraryIf) { libraries[lib.Filename()] = lib }