UNPKG

iham-parsers

Version:

orthoxml, phyloxml and newick parsers for the iHam widget

103 lines (96 loc) 4.42 kB
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); }) }); });