1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122
|
from augur.util_support.node_data_reader import NodeDataReader
import pytest
@pytest.fixture()
def prepare_file(tmpdir):
def _prepare_file(name, contents):
with open(f"{tmpdir}/{name}", "w") as file:
file.write(contents)
return _prepare_file
class TestNodeDataFile:
def test_read(self, tmpdir, prepare_file):
prepare_file(
"file1.json",
"""
{
"a": 5,
"nodes": {
"NODE_1": { "x": 5 },
"NODE_2": { "x": 6 },
"NODE_3": { "x": 7 }
}
}
""",
)
prepare_file(
"file2.json",
"""
{
"nodes": {
"NODE_3": { "y": 8 },
"NODE_4": { "x": 9 }
}
}
""",
)
node_data = NodeDataReader(
[f"{tmpdir}/file1.json", f"{tmpdir}/file2.json"]
).read()
assert node_data == {
"a": 5,
"nodes": {
"NODE_1": {"x": 5},
"NODE_2": {"x": 6},
"NODE_3": {"x": 7, "y": 8},
"NODE_4": {"x": 9},
},
}
def test_read_bad_file(self):
NodeDataReader(["/does/not/exist.json"])
def test_read_dict_nonuniformity(self, tmpdir, prepare_file):
prepare_file(
"file1.json",
"""
{
"nodes": {"node_name": "some_value"},
"a": {}
}
""",
)
prepare_file(
"file2.json",
"""
{
"nodes": {"node_name": "some_other_value"},
"a": "nah"
}
""",
)
with pytest.raises(SystemExit):
NodeDataReader([f"{tmpdir}/file1.json", f"{tmpdir}/file2.json"]).read()
def test_read_check_against_tree(self, tmpdir, prepare_file):
prepare_file(
"file1.json",
"""
{
"a": 5,
"nodes": {
"NODE_1": { "x": 5 },
"NODE_2": { "x": 6 },
"NODE_3": { "x": 7 }
}
}
""",
)
prepare_file("tree.newick", "(NODE_1, NODE_2) NODE_3")
NodeDataReader([f"{tmpdir}/file1.json"], f"{tmpdir}/tree.newick").read()
def test_read_check_against_tree_bad(self, tmpdir, prepare_file):
prepare_file(
"file1.json",
"""
{
"a": 5,
"nodes": {
"NODE_1": { "x": 5 },
"NODE_2": { "x": 6 },
"NODE_3": { "x": 7 }
}
}
""",
)
prepare_file("tree.newick", "Noooooooooope")
with pytest.raises(SystemExit):
NodeDataReader([f"{tmpdir}/file1.json"], f"{tmpdir}/tree.newick").read()
def test_read_check_against_missing_tree(self, tmpdir):
with pytest.raises(SystemExit):
node_names_from_tree = NodeDataReader(
[f"{tmpdir}/file1.json"],
f"{tmpdir}/missing_file.txt"
).node_names_from_tree_file
|