106 lines
3.2 KiB
Python
106 lines
3.2 KiB
Python
|
# -*- coding: utf-8 -*-
|
||
|
import json
|
||
|
import pytest
|
||
|
import networkx as nx
|
||
|
from networkx.readwrite.json_graph import *
|
||
|
|
||
|
|
||
|
class TestNodeLink:
|
||
|
|
||
|
def test_graph(self):
|
||
|
G = nx.path_graph(4)
|
||
|
H = node_link_graph(node_link_data(G))
|
||
|
assert nx.is_isomorphic(G, H)
|
||
|
|
||
|
def test_graph_attributes(self):
|
||
|
G = nx.path_graph(4)
|
||
|
G.add_node(1, color='red')
|
||
|
G.add_edge(1, 2, width=7)
|
||
|
G.graph[1] = 'one'
|
||
|
G.graph['foo'] = 'bar'
|
||
|
|
||
|
H = node_link_graph(node_link_data(G))
|
||
|
assert H.graph['foo'] == 'bar'
|
||
|
assert H.nodes[1]['color'] == 'red'
|
||
|
assert H[1][2]['width'] == 7
|
||
|
|
||
|
d = json.dumps(node_link_data(G))
|
||
|
H = node_link_graph(json.loads(d))
|
||
|
assert H.graph['foo'] == 'bar'
|
||
|
assert H.graph['1'] == 'one'
|
||
|
assert H.nodes[1]['color'] == 'red'
|
||
|
assert H[1][2]['width'] == 7
|
||
|
|
||
|
def test_digraph(self):
|
||
|
G = nx.DiGraph()
|
||
|
H = node_link_graph(node_link_data(G))
|
||
|
assert H.is_directed()
|
||
|
|
||
|
def test_multigraph(self):
|
||
|
G = nx.MultiGraph()
|
||
|
G.add_edge(1, 2, key='first')
|
||
|
G.add_edge(1, 2, key='second', color='blue')
|
||
|
H = node_link_graph(node_link_data(G))
|
||
|
nx.is_isomorphic(G, H)
|
||
|
assert H[1][2]['second']['color'] == 'blue'
|
||
|
|
||
|
def test_graph_with_tuple_nodes(self):
|
||
|
G = nx.Graph()
|
||
|
G.add_edge((0, 0), (1, 0), color=[255, 255, 0])
|
||
|
d = node_link_data(G)
|
||
|
dumped_d = json.dumps(d)
|
||
|
dd = json.loads(dumped_d)
|
||
|
H = node_link_graph(dd)
|
||
|
assert H.nodes[(0, 0)] == G.nodes[(0, 0)]
|
||
|
assert H[(0, 0)][(1, 0)]['color'] == [255, 255, 0]
|
||
|
|
||
|
def test_unicode_keys(self):
|
||
|
try:
|
||
|
q = unicode("qualité", 'utf-8')
|
||
|
except NameError:
|
||
|
q = "qualité"
|
||
|
G = nx.Graph()
|
||
|
G.add_node(1, **{q: q})
|
||
|
s = node_link_data(G)
|
||
|
output = json.dumps(s, ensure_ascii=False)
|
||
|
data = json.loads(output)
|
||
|
H = node_link_graph(data)
|
||
|
assert H.nodes[1][q] == q
|
||
|
|
||
|
def test_exception(self):
|
||
|
with pytest.raises(nx.NetworkXError):
|
||
|
G = nx.MultiDiGraph()
|
||
|
attrs = dict(name='node', source='node', target='node', key='node')
|
||
|
node_link_data(G, attrs)
|
||
|
|
||
|
def test_string_ids(self):
|
||
|
try:
|
||
|
q = unicode("qualité", 'utf-8')
|
||
|
except NameError:
|
||
|
q = "qualité"
|
||
|
|
||
|
G = nx.DiGraph()
|
||
|
G.add_node('A')
|
||
|
G.add_node(q)
|
||
|
G.add_edge('A', q)
|
||
|
data = node_link_data(G)
|
||
|
assert data['links'][0]['source'] == 'A'
|
||
|
assert data['links'][0]['target'] == q
|
||
|
H = node_link_graph(data)
|
||
|
assert nx.is_isomorphic(G, H)
|
||
|
|
||
|
def test_custom_attrs(self):
|
||
|
G = nx.path_graph(4)
|
||
|
G.add_node(1, color='red')
|
||
|
G.add_edge(1, 2, width=7)
|
||
|
G.graph[1] = 'one'
|
||
|
G.graph['foo'] = 'bar'
|
||
|
|
||
|
attrs = dict(source='c_source', target='c_target', name='c_id', key='c_key', link='c_links')
|
||
|
|
||
|
H = node_link_graph(node_link_data(G, attrs=attrs), multigraph=False, attrs=attrs)
|
||
|
assert nx.is_isomorphic(G, H)
|
||
|
assert H.graph['foo'] == 'bar'
|
||
|
assert H.nodes[1]['color'] == 'red'
|
||
|
assert H[1][2]['width'] == 7
|