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

1from graphable.graph import Graph, Graphable 

2from graphable.parsers.graphml import load_graph_graphml 

3from graphable.views.graphml import create_topology_graphml 

4 

5 

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) 

13 

14 graphml_str = create_topology_graphml(g) 

15 

16 loaded_g = load_graph_graphml(graphml_str) 

17 

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 

23 

24 

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) 

42 

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