_graphviz_test.py 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. # yamify - define family trees in YAML
  2. #
  3. # Copyright (C) 2020 Fabian Peter Hammerle <fabian@hammerle.me>
  4. #
  5. # This program is free software: you can redistribute it and/or modify
  6. # it under the terms of the GNU General Public License as published by
  7. # the Free Software Foundation, either version 3 of the License, or
  8. # (at your option) any later version.
  9. #
  10. # This program is distributed in the hope that it will be useful,
  11. # but WITHOUT ANY WARRANTY; without even the implied warranty of
  12. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  13. # GNU General Public License for more details.
  14. #
  15. # You should have received a copy of the GNU General Public License
  16. # along with this program. If not, see <https://www.gnu.org/licenses/>.
  17. from yamily import Person, PersonCollection
  18. from yamily._graphviz import digraph
  19. def test_digraph_single_family():
  20. collection = PersonCollection()
  21. child = Person("child")
  22. child.father = Person("father")
  23. child.mother = Person("mother")
  24. collection.add_person(child)
  25. graph = digraph(collection)
  26. expected_graph = """digraph yamily {
  27. subgraph cluster_mother {
  28. rank=same style=invisible
  29. mother [label=mother shape=box]
  30. "relation-father-mother" [shape=point width=0]
  31. father -> "relation-father-mother" [arrowhead=none constraint=False]
  32. mother -> "relation-father-mother" [arrowhead=none constraint=False]
  33. father [label=father shape=box]
  34. }
  35. subgraph cluster_child {
  36. rank=same style=invisible
  37. child [label=child shape=box]
  38. }
  39. "relation-father-mother" -> child
  40. }"""
  41. assert graph.source == expected_graph
  42. def test_digraph_grandparents():
  43. collection = PersonCollection()
  44. father = Person("father")
  45. father.father = Person("grandfather")
  46. father.mother = Person("grandmother")
  47. child_a = Person("child-a")
  48. child_a.father = father
  49. child_a.mother = Person("mother")
  50. collection.add_person(child_a)
  51. child_b = Person("child-b")
  52. child_b.father = father
  53. child_b.mother = Person("mother")
  54. collection.add_person(child_b)
  55. graph = digraph(collection)
  56. expected_graph = """digraph yamily {
  57. subgraph cluster_mother {
  58. rank=same style=invisible
  59. mother [label=mother shape=box]
  60. "relation-father-mother" [shape=point width=0]
  61. father -> "relation-father-mother" [arrowhead=none constraint=False]
  62. mother -> "relation-father-mother" [arrowhead=none constraint=False]
  63. father [label=father shape=box]
  64. }
  65. subgraph cluster_grandmother {
  66. rank=same style=invisible
  67. grandmother [label=grandmother shape=box]
  68. "relation-grandfather-grandmother" [shape=point width=0]
  69. grandfather -> "relation-grandfather-grandmother" [arrowhead=none constraint=False]
  70. grandmother -> "relation-grandfather-grandmother" [arrowhead=none constraint=False]
  71. grandfather [label=grandfather shape=box]
  72. }
  73. subgraph "cluster_child-a" {
  74. rank=same style=invisible
  75. "child-a" [label="child-a" shape=box]
  76. }
  77. subgraph "cluster_child-b" {
  78. rank=same style=invisible
  79. "child-b" [label="child-b" shape=box]
  80. }
  81. "relation-grandfather-grandmother" -> father
  82. "relation-father-mother" -> "child-a"
  83. "relation-father-mother" -> "child-b"
  84. }"""
  85. assert graph.source == expected_graph