2018-12-15 23:19:42 -05:00
import pytest
2020-08-18 21:16:39 -04:00
2009-01-27 21:38:27 +00:00
from gaphas . tree import Tree
2018-12-15 23:19:42 -05:00
@pytest.fixture ( )
def tree_fixture ( ) :
node = [ " n0 " , " n1 " , " n2 " , " n3 " , " n4 " , " n5 " , " n6 " , " n7 " ]
return Tree ( ) , node
def test_add ( tree_fixture ) :
2020-09-15 20:23:50 -04:00
""" Test creating node trees. """
2018-12-15 23:19:42 -05:00
tree = tree_fixture [ 0 ]
n = tree_fixture [ 1 ]
tree . add ( n [ 1 ] )
assert len ( tree . _nodes ) == 1
assert len ( tree . _children ) == 2
assert len ( tree . _children [ None ] ) == 1
assert len ( tree . _children [ n [ 1 ] ] ) == 0
tree . add ( n [ 2 ] )
tree . add ( n [ 3 ] , parent = n [ 1 ] )
assert len ( tree . _nodes ) == 3
assert len ( tree . _children ) == 4
assert len ( tree . _children [ None ] ) == 2
assert len ( tree . _children [ n [ 1 ] ] ) == 1
assert len ( tree . _children [ n [ 2 ] ] ) == 0
assert len ( tree . _children [ n [ 2 ] ] ) == 0
assert tree . _nodes == [ n [ 1 ] , n [ 3 ] , n [ 2 ] ]
tree . add ( n [ 4 ] , parent = n [ 3 ] )
assert tree . _nodes == [ n [ 1 ] , n [ 3 ] , n [ 4 ] , n [ 2 ] ]
tree . add ( n [ 5 ] , parent = n [ 3 ] )
assert tree . _nodes == [ n [ 1 ] , n [ 3 ] , n [ 4 ] , n [ 5 ] , n [ 2 ] ]
tree . add ( n [ 6 ] , parent = n [ 2 ] )
assert tree . _nodes == [ n [ 1 ] , n [ 3 ] , n [ 4 ] , n [ 5 ] , n [ 2 ] , n [ 6 ] ]
tree . add ( n [ 7 ] , parent = n [ 1 ] )
assert len ( tree . _children ) == 8
assert tree . _nodes == [ n [ 1 ] , n [ 3 ] , n [ 4 ] , n [ 5 ] , n [ 7 ] , n [ 2 ] , n [ 6 ] ]
assert tree . get_parent ( n [ 7 ] ) is n [ 1 ]
assert tree . get_parent ( n [ 6 ] ) is n [ 2 ]
assert tree . get_parent ( n [ 5 ] ) is n [ 3 ]
assert tree . get_parent ( n [ 4 ] ) is n [ 3 ]
assert tree . get_parent ( n [ 3 ] ) is n [ 1 ]
assert tree . get_parent ( n [ 2 ] ) is None
assert tree . get_parent ( n [ 1 ] ) is None
def test_add_on_index ( tree_fixture ) :
tree = tree_fixture [ 0 ]
n = tree_fixture [ 1 ]
tree . add ( n [ 1 ] )
tree . add ( n [ 2 ] )
tree . add ( n [ 3 ] , index = 1 )
assert tree . get_children ( None ) == [ n [ 1 ] , n [ 3 ] , n [ 2 ] ] , tree . get_children ( None )
assert tree . nodes == [ n [ 1 ] , n [ 3 ] , n [ 2 ] ] , tree . nodes
tree . add ( n [ 4 ] , parent = n [ 3 ] )
tree . add ( n [ 5 ] , parent = n [ 3 ] , index = 0 )
assert tree . get_children ( None ) == [ n [ 1 ] , n [ 3 ] , n [ 2 ] ] , tree . get_children ( None )
assert tree . nodes == [ n [ 1 ] , n [ 3 ] , n [ 5 ] , n [ 4 ] , n [ 2 ] ] , tree . nodes
assert tree . get_children ( n [ 3 ] ) == [ n [ 5 ] , n [ 4 ] ] , tree . get_children ( n [ 3 ] )
def test_remove ( tree_fixture ) :
2020-09-15 20:23:50 -04:00
""" Test removal of nodes. """
2018-12-15 23:19:42 -05:00
tree = tree_fixture [ 0 ]
n = tree_fixture [ 1 ]
tree . add ( n [ 1 ] )
tree . add ( n [ 2 ] )
tree . add ( n [ 3 ] , parent = n [ 1 ] )
tree . add ( n [ 4 ] , parent = n [ 3 ] )
tree . add ( n [ 5 ] , parent = n [ 4 ] )
assert tree . _nodes == [ n [ 1 ] , n [ 3 ] , n [ 4 ] , n [ 5 ] , n [ 2 ] ]
all_ch = list ( tree . get_all_children ( n [ 1 ] ) )
assert all_ch == [ n [ 3 ] , n [ 4 ] , n [ 5 ] ] , all_ch
tree . remove ( n [ 4 ] )
assert tree . _nodes == [ n [ 1 ] , n [ 3 ] , n [ 2 ] ]
tree . remove ( n [ 1 ] )
assert len ( tree . _children ) == 2
assert tree . _children [ None ] == [ n [ 2 ] ]
assert tree . _children [ n [ 2 ] ] == [ ]
assert tree . _nodes == [ n [ 2 ] ]
def test_siblings ( tree_fixture ) :
tree = tree_fixture [ 0 ]
n = tree_fixture [ 1 ]
tree . add ( n [ 1 ] )
tree . add ( n [ 2 ] )
tree . add ( n [ 3 ] )
assert tree . get_next_sibling ( n [ 1 ] ) is n [ 2 ]
assert tree . get_next_sibling ( n [ 2 ] ) is n [ 3 ]
try :
tree . get_next_sibling ( n [ 3 ] )
except IndexError :
pass # Okay
else :
raise AssertionError (
2019-12-28 20:09:30 -05:00
f " Index should be out of range, not { tree . get_next_sibling ( n [ 3 ] ) } "
2018-12-15 23:19:42 -05:00
)
assert tree . get_previous_sibling ( n [ 3 ] ) is n [ 2 ]
assert tree . get_previous_sibling ( n [ 2 ] ) is n [ 1 ]
try :
tree . get_previous_sibling ( n [ 1 ] )
except IndexError :
pass # Okay
else :
raise AssertionError (
2019-12-28 20:09:30 -05:00
f " Index should be out of range, not { tree . get_previous_sibling ( n [ 1 ] ) } "
2018-12-15 23:19:42 -05:00
)
def test_reparent ( tree_fixture ) :
tree = tree_fixture [ 0 ]
n = tree_fixture [ 1 ]
tree . add ( n [ 1 ] )
tree . add ( n [ 2 ] )
tree . add ( n [ 3 ] )
tree . add ( n [ 4 ] , parent = n [ 2 ] )
tree . add ( n [ 5 ] , parent = n [ 4 ] )
assert tree . nodes == [ n [ 1 ] , n [ 2 ] , n [ 4 ] , n [ 5 ] , n [ 3 ] ] , tree . nodes
2020-10-11 22:43:03 +02:00
tree . move ( n [ 4 ] , parent = n [ 1 ] , index = 0 )
2018-12-15 23:19:42 -05:00
assert tree . nodes == [ n [ 1 ] , n [ 4 ] , n [ 5 ] , n [ 2 ] , n [ 3 ] ] , tree . nodes
assert tree . get_children ( n [ 2 ] ) == [ ] , tree . get_children ( n [ 2 ] )
assert tree . get_children ( n [ 1 ] ) == [ n [ 4 ] ] , tree . get_children ( n [ 1 ] )
assert tree . get_children ( n [ 4 ] ) == [ n [ 5 ] ] , tree . get_children ( n [ 4 ] )
2020-10-11 22:43:03 +02:00
tree . move ( n [ 4 ] , parent = None , index = 0 )
2018-12-15 23:19:42 -05:00
assert tree . nodes == [ n [ 4 ] , n [ 5 ] , n [ 1 ] , n [ 2 ] , n [ 3 ] ] , tree . nodes