iham-parsers
Version:
orthoxml, phyloxml and newick parsers for the iHam widget
103 lines (96 loc) • 4.42 kB
JavaScript
var hogvis = require("../index.js");
var chai = require('chai'), assert = chai.assert, expect = chai.expect;
var fs = require('fs');
var parse_orthoxml = hogvis.parse_orthoxml, parse_newick = hogvis.parse_newick;
var sptree = "(YEAST,(XENTR,((CANFA, WOLF),((MOUSE,RATNO)Rodents,(HUMAN,GORGO,PANTR)Primates)Euarchontoglires)Mammalia)Vertebrata)Eukaryota";
describe('SimpleEx OrthoXML', function () {
describe('xrefs of genes', function () {
it('resulting datastructure should contain xrefs corresponding to protId', function () {
var xml = fs.readFileSync("./test/simpleEx.orthoxml");
var data = parse_orthoxml(sptree, xml);
var ex_xrefs = { '3': 'HUMAN3', '13': 'PANTR3', '14': 'PANTR4','23': 'CANFA3',
'33': 'MOUSE3', '34': 'MOUSE4', '43': 'RATNO3', '53': 'XENTR3' };
expect(ex_xrefs).to.eql(data.xrefs);
});
});
describe('extracted species tree', function () {
it('resulting species tree should be the trimed version of the input tree', function () {
var xml = fs.readFileSync("./test/simpleEx.orthoxml");
var data = parse_orthoxml(sptree, xml);
var ex_tree = parse_newick.parse("(XENTR,(CANFA,((HUMAN,PANTR)Primates,(MOUSE,RATNO)Rodents)Euarchontoglires)Mammalia)Vertebrata;");
expect(ex_tree).to.eql(data.tree);
});
});
describe('per_species results', function(){
it('resulting datastructure has right data', function(){
var xml = fs.readFileSync("./test/simpleEx.orthoxml");
var data = parse_orthoxml(sptree, xml);
var ex_per_spec = { HUMAN: {
HUMAN: [[3]],
Primates: [[3],[]],
Euarchontoglires: [[3],[]],
Mammalia: [[3]],
Vertebrata: [[3]] },
PANTR:{
PANTR: [[13],[14]],
Primates: [[13],[14]],
Euarchontoglires: [[13],[14]],
Mammalia: [[13,14]],
Vertebrata: [[13,14]] },
MOUSE:{
MOUSE: [[33],[34]],
Rodents: [[33],[34]],
Euarchontoglires: [[33],[34]],
Mammalia: [[33,34]],
Vertebrata: [[33,34]] },
RATNO:{
RATNO: [[43]],
Rodents: [[43],[]],
Euarchontoglires: [[43],[]],
Mammalia: [[43]],
Vertebrata: [[43]]
},
CANFA: {
CANFA: [[23]],
Mammalia: [[23]],
Vertebrata: [[23]] },
XENTR: {
XENTR: [[53]],
Vertebrata: [[53]] }
};
expect(ex_per_spec).to.eql(data.per_species);
})
})
});
describe('tnt newick parser', function () {
describe('test functionality of tnt newick parser', function () {
it('can parse a simple tree with internal labels', function() {
var tree = parse_newick.parse("(A,B)C;");
assert(tree.name, "C");
assert(tree.children, [{name: "A"}, {name: "B"}]);
});
it("multifurcating tree", function(){
var tree = parse_newick.parse("(A,B,C);");
assert(3, tree.children.length);
});
it("quoted labels", function(){
var tree = parse_newick.parse('(A,"species 1")"root";');
assert("root", tree.name);
assert("species 1", tree.children[1]);
});
it("labels can contain special chars if quoted", function(){
var tree = parse_newick.parse('("A (strain B)", "B (stain ;)")"root & end";');
assert("root & end", tree.name);
assert("A (strain B)", tree.children[0]);
assert("B (strain ;)", tree.children[1]);
});
it("nested levels of quotes", function(){
var tree = parse_newick.parse('(("A","B somethin")"D /level", ("Q","R","S (strain A)")"TTT bla")"root";');
let exp_tree = {name:"root", children:[
{children:[{name:"A"},{name:"B somethin"}], name:"D /level"},
{children:[{name:"Q"},{name:"R"},{name:"S (strain A)"}], name:"TTT bla"}
]};
expect(exp_tree).eql(tree);
})
});
});