Coverage for tests / unit / parsers / test_graphml.py: 100%
26 statements
« prev ^ index » next coverage.py v7.13.3, created at 2026-02-16 21:32 +0000
« prev ^ index » next coverage.py v7.13.3, created at 2026-02-16 21:32 +0000
1from graphable.graph import Graph, Graphable
2from graphable.parsers.graphml import load_graph_graphml
3from graphable.views.graphml import create_topology_graphml
6def test_load_graph_graphml_roundtrip():
7 # A -> B
8 a = Graphable("A")
9 a.add_tag("t1")
10 b = Graphable("B")
11 g = Graph()
12 g.add_edge(a, b)
14 graphml_str = create_topology_graphml(g)
16 loaded_g = load_graph_graphml(graphml_str)
18 assert len(loaded_g) == 2
19 assert "A" in loaded_g
20 assert "B" in loaded_g
21 assert loaded_g["A"].is_tagged("t1")
22 assert loaded_g["B"] in loaded_g["A"].dependents
25def test_load_graph_graphml_from_file(tmp_path):
26 output_file = tmp_path / "graph.graphml"
27 content = """<?xml version="1.0" encoding="UTF-8"?>
28<graphml xmlns="http://graphml.graphdrawing.org/xmlns">
29 <key id="reference" for="node" attr.name="reference" attr.type="string"/>
30 <key id="tags" for="node" attr.name="tags" attr.type="string"/>
31 <graph id="G" edgedefault="directed">
32 <node id="A">
33 <data key="reference">A</data>
34 <data key="tags">important,new</data>
35 </node>
36 <node id="B"/>
37 <edge source="A" target="B"/>
38 </graph>
39</graphml>
40"""
41 output_file.write_text(content)
43 loaded_g = load_graph_graphml(output_file)
44 assert len(loaded_g) == 2
45 assert "A" in loaded_g
46 assert loaded_g["A"].is_tagged("important")
47 assert loaded_g["A"].is_tagged("new")
48 assert loaded_g["B"] in loaded_g["A"].dependents