+ final String s = "https://sites.google.com/site/cmzmasek/home/software/archaeopteryx/examples/simple/simple_1.nh";
+ final URL u = new URL( s );
+ final PhylogenyFactory factory = ParserBasedPhylogenyFactory.getInstance();
+ final Phylogeny[] phys = factory.create( u, new NHXParser() );
+ if ( ( phys == null ) || ( phys.length != 5 ) ) {
+ return false;
+ }
+ if ( !phys[ 0 ].toNewHampshire().equals( "((((A,B),C),D),(E,F));" ) ) {
+ System.out.println( phys[ 0 ].toNewHampshire() );
+ return false;
+ }
+ if ( !phys[ 1 ].toNewHampshire().equals( "((1,2,3),(4,5,6),(7,8,9));" ) ) {
+ System.out.println( phys[ 1 ].toNewHampshire() );
+ return false;
+ }
+ final URL u2 = new URL( s );
+ final Phylogeny[] phys2 = factory.create( u2.openStream(), new NHXParser() );
+ if ( ( phys2 == null ) || ( phys2.length != 5 ) ) {
+ return false;
+ }
+ if ( !phys2[ 0 ].toNewHampshire().equals( "((((A,B),C),D),(E,F));" ) ) {
+ System.out.println( phys2[ 0 ].toNewHampshire() );
+ return false;
+ }
+ final PhylogenyFactory factory2 = ParserBasedPhylogenyFactory.getInstance();
+ final NHXParser p = new NHXParser();
+ final URL u3 = new URL( s );
+ p.setSource( u3 );
+ if ( !p.hasNext() ) {
+ return false;
+ }
+ if ( !p.next().toNewHampshire().equals( "((((A,B),C),D),(E,F));" ) ) {
+ return false;
+ }
+ if ( !p.hasNext() ) {
+ return false;
+ }
+ p.reset();
+ if ( !p.hasNext() ) {
+ return false;
+ }
+ if ( !p.next().toNewHampshire().equals( "((((A,B),C),D),(E,F));" ) ) {
+ return false;
+ }
+ if ( !p.next().toNewHampshire().equals( "((1,2,3),(4,5,6),(7,8,9));" ) ) {
+ return false;
+ }
+ p.reset();
+ if ( !p.hasNext() ) {
+ return false;
+ }
+ if ( !p.next().toNewHampshire().equals( "((((A,B),C),D),(E,F));" ) ) {
+ return false;
+ }
+ if ( !p.next().toNewHampshire().equals( "((1,2,3),(4,5,6),(7,8,9));" ) ) {
+ return false;
+ }
+ }
+ catch ( final Exception e ) {
+ System.out.println( e.toString() );
+ e.printStackTrace();
+ return false;
+ }
+ return true;
+ }
+
+ private static boolean testOverlapRemoval() {
+ try {
+ final Domain d0 = new BasicDomain( "d0", ( short ) 2, ( short ) 5, ( short ) 1, ( short ) 1, 0.1, 1 );
+ final Domain d1 = new BasicDomain( "d1", ( short ) 7, ( short ) 10, ( short ) 1, ( short ) 1, 0.1, 1 );
+ final Domain d2 = new BasicDomain( "d2", ( short ) 0, ( short ) 20, ( short ) 1, ( short ) 1, 0.1, 1 );
+ final Domain d3 = new BasicDomain( "d3", ( short ) 9, ( short ) 10, ( short ) 1, ( short ) 1, 0.1, 1 );
+ final Domain d4 = new BasicDomain( "d4", ( short ) 7, ( short ) 8, ( short ) 1, ( short ) 1, 0.1, 1 );
+ final List<Boolean> covered = new ArrayList<Boolean>();
+ covered.add( true ); // 0
+ covered.add( false ); // 1
+ covered.add( true ); // 2
+ covered.add( false ); // 3
+ covered.add( true ); // 4
+ covered.add( true ); // 5
+ covered.add( false ); // 6
+ covered.add( true ); // 7
+ covered.add( true ); // 8
+ if ( ForesterUtil.calculateOverlap( d0, covered ) != 3 ) {
+ return false;
+ }
+ if ( ForesterUtil.calculateOverlap( d1, covered ) != 2 ) {
+ return false;
+ }
+ if ( ForesterUtil.calculateOverlap( d2, covered ) != 6 ) {
+ return false;
+ }
+ if ( ForesterUtil.calculateOverlap( d3, covered ) != 0 ) {
+ return false;
+ }
+ if ( ForesterUtil.calculateOverlap( d4, covered ) != 2 ) {
+ return false;
+ }
+ final Domain a = new BasicDomain( "a", ( short ) 2, ( short ) 5, ( short ) 1, ( short ) 1, 1, -1 );
+ final Domain b = new BasicDomain( "b", ( short ) 2, ( short ) 10, ( short ) 1, ( short ) 1, 0.1, -1 );
+ final Protein ab = new BasicProtein( "ab", "varanus", 0 );
+ ab.addProteinDomain( a );
+ ab.addProteinDomain( b );
+ final Protein ab_s0 = ForesterUtil.removeOverlappingDomains( 3, false, ab );
+ if ( ab.getNumberOfProteinDomains() != 2 ) {
+ return false;
+ }
+ if ( ab_s0.getNumberOfProteinDomains() != 1 ) {
+ return false;
+ }
+ if ( !ab_s0.getProteinDomain( 0 ).getDomainId().equals( "b" ) ) {
+ return false;
+ }
+ final Protein ab_s1 = ForesterUtil.removeOverlappingDomains( 4, false, ab );
+ if ( ab.getNumberOfProteinDomains() != 2 ) {
+ return false;
+ }
+ if ( ab_s1.getNumberOfProteinDomains() != 2 ) {
+ return false;
+ }
+ final Domain c = new BasicDomain( "c", ( short ) 20000, ( short ) 20500, ( short ) 1, ( short ) 1, 10, 1 );
+ final Domain d = new BasicDomain( "d",
+ ( short ) 10000,
+ ( short ) 10500,
+ ( short ) 1,
+ ( short ) 1,
+ 0.0000001,
+ 1 );
+ final Domain e = new BasicDomain( "e",
+ ( short ) 5000,
+ ( short ) 5500,
+ ( short ) 1,
+ ( short ) 1,
+ 0.0001,
+ 1 );
+ final Protein cde = new BasicProtein( "cde", "varanus", 0 );
+ cde.addProteinDomain( c );
+ cde.addProteinDomain( d );
+ cde.addProteinDomain( e );
+ final Protein cde_s0 = ForesterUtil.removeOverlappingDomains( 0, false, cde );
+ if ( cde.getNumberOfProteinDomains() != 3 ) {
+ return false;
+ }
+ if ( cde_s0.getNumberOfProteinDomains() != 3 ) {
+ return false;
+ }
+ final Domain f = new BasicDomain( "f", ( short ) 10, ( short ) 20, ( short ) 1, ( short ) 1, 10, 1 );
+ final Domain g = new BasicDomain( "g", ( short ) 10, ( short ) 20, ( short ) 1, ( short ) 1, 0.01, 1 );
+ final Domain h = new BasicDomain( "h", ( short ) 10, ( short ) 20, ( short ) 1, ( short ) 1, 0.0001, 1 );
+ final Domain i = new BasicDomain( "i", ( short ) 10, ( short ) 20, ( short ) 1, ( short ) 1, 0.5, 1 );
+ final Domain i2 = new BasicDomain( "i", ( short ) 5, ( short ) 30, ( short ) 1, ( short ) 1, 0.5, 10 );
+ final Protein fghi = new BasicProtein( "fghi", "varanus", 0 );
+ fghi.addProteinDomain( f );
+ fghi.addProteinDomain( g );
+ fghi.addProteinDomain( h );
+ fghi.addProteinDomain( i );
+ fghi.addProteinDomain( i );
+ fghi.addProteinDomain( i );
+ fghi.addProteinDomain( i2 );
+ final Protein fghi_s0 = ForesterUtil.removeOverlappingDomains( 10, false, fghi );
+ if ( fghi.getNumberOfProteinDomains() != 7 ) {
+ return false;
+ }
+ if ( fghi_s0.getNumberOfProteinDomains() != 1 ) {
+ return false;
+ }
+ if ( !fghi_s0.getProteinDomain( 0 ).getDomainId().equals( "h" ) ) {
+ return false;
+ }
+ final Protein fghi_s1 = ForesterUtil.removeOverlappingDomains( 11, false, fghi );
+ if ( fghi.getNumberOfProteinDomains() != 7 ) {
+ return false;
+ }
+ if ( fghi_s1.getNumberOfProteinDomains() != 7 ) {
+ return false;
+ }
+ final Domain j = new BasicDomain( "j", ( short ) 10, ( short ) 20, ( short ) 1, ( short ) 1, 10, 1 );
+ final Domain k = new BasicDomain( "k", ( short ) 10, ( short ) 20, ( short ) 1, ( short ) 1, 0.01, 1 );
+ final Domain l = new BasicDomain( "l", ( short ) 10, ( short ) 20, ( short ) 1, ( short ) 1, 0.0001, 1 );
+ final Domain m = new BasicDomain( "m", ( short ) 10, ( short ) 20, ( short ) 1, ( short ) 4, 0.5, 1 );
+ final Domain m0 = new BasicDomain( "m", ( short ) 10, ( short ) 20, ( short ) 2, ( short ) 4, 0.5, 1 );
+ final Domain m1 = new BasicDomain( "m", ( short ) 10, ( short ) 20, ( short ) 3, ( short ) 4, 0.5, 1 );
+ final Domain m2 = new BasicDomain( "m", ( short ) 5, ( short ) 30, ( short ) 4, ( short ) 4, 0.5, 10 );
+ final Protein jklm = new BasicProtein( "jklm", "varanus", 0 );
+ jklm.addProteinDomain( j );
+ jklm.addProteinDomain( k );
+ jklm.addProteinDomain( l );
+ jklm.addProteinDomain( m );
+ jklm.addProteinDomain( m0 );
+ jklm.addProteinDomain( m1 );
+ jklm.addProteinDomain( m2 );
+ final Protein jklm_s0 = ForesterUtil.removeOverlappingDomains( 10, false, jklm );
+ if ( jklm.getNumberOfProteinDomains() != 7 ) {
+ return false;
+ }
+ if ( jklm_s0.getNumberOfProteinDomains() != 1 ) {
+ return false;
+ }
+ if ( !jklm_s0.getProteinDomain( 0 ).getDomainId().equals( "l" ) ) {
+ return false;
+ }
+ final Protein jklm_s1 = ForesterUtil.removeOverlappingDomains( 11, false, jklm );
+ if ( jklm.getNumberOfProteinDomains() != 7 ) {
+ return false;
+ }
+ if ( jklm_s1.getNumberOfProteinDomains() != 7 ) {
+ return false;
+ }
+ final Domain only = new BasicDomain( "only", ( short ) 5, ( short ) 30, ( short ) 4, ( short ) 4, 0.5, 10 );
+ final Protein od = new BasicProtein( "od", "varanus", 0 );
+ od.addProteinDomain( only );
+ final Protein od_s0 = ForesterUtil.removeOverlappingDomains( 0, false, od );
+ if ( od.getNumberOfProteinDomains() != 1 ) {
+ return false;
+ }
+ if ( od_s0.getNumberOfProteinDomains() != 1 ) {
+ return false;
+ }
+ }
+ catch ( final Exception e ) {
+ e.printStackTrace( System.out );
+ return false;
+ }
+ return true;
+ }
+
+ private static final boolean testPfamTreeReading() {
+ try {
+ final URL u = new URL( WebserviceUtil.PFAM_SERVER + "/family/PF" + "01849" + "/tree/download" );
+ final NHXParser parser = new NHXParser();
+ parser.setTaxonomyExtraction( NHXParser.TAXONOMY_EXTRACTION.PFAM_STYLE_STRICT );
+ parser.setReplaceUnderscores( false );
+ parser.setGuessRootedness( true );
+ final Phylogeny[] phys = ForesterUtil.readPhylogeniesFromUrl( u, parser );
+ if ( ( phys == null ) || ( phys.length != 1 ) ) {
+ return false;
+ }
+ if ( phys[ 0 ].getNumberOfExternalNodes() < 10 ) {
+ return false;
+ }
+ }
+ catch ( final Exception e ) {
+ e.printStackTrace();
+ return false;
+ }
+ return true;
+ }
+
+ private static final boolean testPhyloXMLparsingFromURL() {
+ try {
+ final String s = "https://sites.google.com/site/cmzmasek/home/software/archaeopteryx/examples/archaeopteryx_a/apaf_bcl2.xml";
+ final URL u = new URL( s );
+ final Phylogeny[] phys = ForesterUtil.readPhylogeniesFromUrl( u, PhyloXmlParser.createPhyloXmlParser() );
+ if ( ( phys == null ) || ( phys.length != 2 ) ) {
+ return false;
+ }
+ final Phylogeny[] phys2 = ForesterUtil.readPhylogeniesFromUrl( u, PhyloXmlParser.createPhyloXmlParser() );
+ if ( ( phys2 == null ) || ( phys2.length != 2 ) ) {
+ return false;
+ }
+ }
+ catch ( final Exception e ) {
+ e.printStackTrace();
+ return false;
+ }
+ return true;
+ }
+
+ private static final boolean testToLReading() {
+ try {
+ final URL u = new URL( WebserviceUtil.TOL_URL_BASE + "15079" );
+ final Phylogeny[] phys = ForesterUtil.readPhylogeniesFromUrl( u, new TolParser() );
+ if ( ( phys == null ) || ( phys.length != 1 ) ) {
+ return false;
+ }
+ if ( !phys[ 0 ].getRoot().getNodeData().getTaxonomy().getIdentifier().getValue().equals( "15079" ) ) {
+ return false;
+ }
+ if ( !phys[ 0 ].getRoot().getNodeData().getTaxonomy().getScientificName()
+ .equals( "Protacanthopterygii" ) ) {
+ return false;
+ }
+ if ( phys[ 0 ].getNumberOfExternalNodes() < 5 ) {
+ return false;
+ }
+ //
+ final URL u2 = new URL( WebserviceUtil.TOL_URL_BASE + "17706" );
+ final Phylogeny[] phys2 = ForesterUtil.readPhylogeniesFromUrl( u2, new TolParser() );
+ if ( ( phys2 == null ) || ( phys2.length != 1 ) ) {
+ return false;
+ }
+ if ( !phys2[ 0 ].getRoot().getNodeData().getTaxonomy().getIdentifier().getValue().equals( "17706" ) ) {
+ return false;
+ }
+ if ( phys2[ 0 ].getNumberOfExternalNodes() < 5 ) {
+ return false;
+ }
+ }
+ catch ( final Exception e ) {
+ e.printStackTrace();
+ return false;
+ }
+ return true;
+ }
+
+ private static final boolean testTreeBaseReading() {
+ try {
+ final URL u = new URL( WebserviceUtil.TREEBASE_PHYLOWS_TREE_URL_BASE + "72557?format=nexus" );
+ final NexusPhylogeniesParser parser = new NexusPhylogeniesParser();
+ parser.setReplaceUnderscores( true );
+ final Phylogeny[] phys = ForesterUtil.readPhylogeniesFromUrl( u, parser );
+ if ( ( phys == null ) || ( phys.length != 1 ) ) {
+ return false;
+ }
+ final URL u_1 = new URL( WebserviceUtil.TREEBASE_PHYLOWS_TREE_URL_BASE + "2406?format=nexus" );
+ final NexusPhylogeniesParser parser_1 = new NexusPhylogeniesParser();
+ final Phylogeny[] phys_1 = ForesterUtil.readPhylogeniesFromUrl( u_1, parser_1 );
+ if ( ( phys_1 == null ) || ( phys_1.length != 1 ) ) {
+ return false;
+ }
+ final URL u_2 = new URL( WebserviceUtil.TREEBASE_PHYLOWS_TREE_URL_BASE + "422?format=nexus" );
+ final NexusPhylogeniesParser parser_2 = new NexusPhylogeniesParser();
+ final Phylogeny[] phys_2 = ForesterUtil.readPhylogeniesFromUrl( u_2, parser_2 );
+ if ( ( phys_2 == null ) || ( phys_2.length != 1 ) ) {
+ return false;
+ }
+ final URL u_3 = new URL( WebserviceUtil.TREEBASE_PHYLOWS_TREE_URL_BASE + "2654?format=nexus" );
+ final NexusPhylogeniesParser parser_3 = new NexusPhylogeniesParser();
+ final Phylogeny[] phys_3 = ForesterUtil.readPhylogeniesFromUrl( u_3, parser_3 );
+ if ( ( phys_3 == null ) || ( phys_3.length != 1 ) ) {
+ return false;
+ }
+ final URL u_4 = new URL( WebserviceUtil.TREEBASE_PHYLOWS_TREE_URL_BASE + "825?format=nexus" );
+ final NexusPhylogeniesParser parser_4 = new NexusPhylogeniesParser();
+ final Phylogeny[] phys_4 = ForesterUtil.readPhylogeniesFromUrl( u_4, parser_4 );
+ if ( ( phys_4 == null ) || ( phys_4.length != 1 ) ) {
+ return false;
+ }
+ final URL u2 = new URL( WebserviceUtil.TREEBASE_PHYLOWS_STUDY_URL_BASE + "15613?format=nexus" );
+ final NexusPhylogeniesParser parser2 = new NexusPhylogeniesParser();
+ parser2.setReplaceUnderscores( true );
+ final Phylogeny[] phys2 = ForesterUtil.readPhylogeniesFromUrl( u2, parser2 );
+ if ( ( phys2 == null ) || ( phys2.length != 9 ) ) {
+ return false;
+ }
+ final URL u3 = new URL( WebserviceUtil.TREEBASE_PHYLOWS_STUDY_URL_BASE + "14909?format=nexus" );
+ final NexusPhylogeniesParser parser3 = new NexusPhylogeniesParser();
+ final Phylogeny[] phys3 = ForesterUtil.readPhylogeniesFromUrl( u3, parser3 );
+ if ( ( phys3 == null ) || ( phys3.length != 2 ) ) {
+ return false;
+ }
+ final Phylogeny[] phys4 = ForesterUtil.readPhylogeniesFromUrl(
+ new URL( WebserviceUtil.TREEBASE_PHYLOWS_STUDY_URL_BASE
+ + "14525?format=nexus" ),
+ new NexusPhylogeniesParser() );
+ if ( ( phys4 == null ) || ( phys4.length != 1 ) ) {
+ return false;
+ }
+ final Phylogeny[] phys5 = ForesterUtil.readPhylogeniesFromUrl(
+ new URL( WebserviceUtil.TREEBASE_PHYLOWS_STUDY_URL_BASE
+ + "15632?format=nexus" ),
+ new NexusPhylogeniesParser() );
+ if ( ( phys5 == null ) || ( phys5.length != 1 ) ) {
+ return false;
+ }
+ final Phylogeny[] phys6 = ForesterUtil.readPhylogeniesFromUrl(
+ new URL( WebserviceUtil.TREEBASE_PHYLOWS_STUDY_URL_BASE
+ + "10190?format=nexus" ),
+ new NexusPhylogeniesParser() );
+ if ( ( phys6 == null ) || ( phys6.length != 1 ) ) {
+ return false;
+ }
+ final Phylogeny[] phys7 = ForesterUtil.readPhylogeniesFromUrl(
+ new URL( WebserviceUtil.TREEBASE_PHYLOWS_STUDY_URL_BASE
+ + "13246?format=nexus" ),
+ new NexusPhylogeniesParser() );
+ if ( ( phys7 == null ) || ( phys7.length != 2 ) ) {
+ return false;
+ }
+ final Phylogeny[] phys8 = ForesterUtil.readPhylogeniesFromUrl(
+ new URL( WebserviceUtil.TREEBASE_PHYLOWS_STUDY_URL_BASE
+ + "11662?format=nexus" ),
+ new NexusPhylogeniesParser() );
+ if ( ( phys8 == null ) || ( phys8.length != 2 ) ) {
+ return false;
+ }
+ final Phylogeny[] phys9 = ForesterUtil.readPhylogeniesFromUrl(
+ new URL( WebserviceUtil.TREEBASE_PHYLOWS_STUDY_URL_BASE
+ + "562?format=nexus" ),
+ new NexusPhylogeniesParser() );
+ if ( ( phys9 == null ) || ( phys9.length != 4 ) ) {
+ return false;
+ }
+ final Phylogeny[] phys16424 = ForesterUtil.readPhylogeniesFromUrl(
+ new URL( WebserviceUtil.TREEBASE_PHYLOWS_STUDY_URL_BASE
+ + "16424?format=nexus" ),
+ new NexusPhylogeniesParser() );
+ if ( ( phys16424 == null ) || ( phys16424.length != 1 ) ) {
+ return false;
+ }
+ final Phylogeny[] phys17878 = ForesterUtil.readPhylogeniesFromUrl(
+ new URL( WebserviceUtil.TREEBASE_PHYLOWS_STUDY_URL_BASE
+ + "17878?format=nexus" ),
+ new NexusPhylogeniesParser() );
+ if ( ( phys17878 == null ) || ( phys17878.length != 17 ) ) {
+ return false;
+ }
+ final Phylogeny[] phys18804 = ForesterUtil.readPhylogeniesFromUrl(
+ new URL( WebserviceUtil.TREEBASE_PHYLOWS_STUDY_URL_BASE
+ + "18804?format=nexus" ),
+ new NexusPhylogeniesParser() );
+ if ( ( phys18804 == null ) || ( phys18804.length != 2 ) ) {
+ return false;
+ }
+ final Phylogeny[] phys346 = ForesterUtil.readPhylogeniesFromUrl(
+ new URL( WebserviceUtil.TREEBASE_PHYLOWS_STUDY_URL_BASE
+ + "346?format=nexus" ),
+ new NexusPhylogeniesParser() );
+ if ( ( phys346 == null ) || ( phys346.length != 1 ) ) {
+ return false;
+ }
+ }
+ catch ( final Exception e ) {
+ e.printStackTrace();
+ return false;
+ }
+ return true;
+ }
+
+ private static final boolean testTreeFamReading() {
+ try {
+ final URL u = new URL( WebserviceUtil.TREE_FAM_URL_BASE + "101004" + "/tree/newick" );
+ final NHXParser parser = new NHXParser();
+ parser.setTaxonomyExtraction( NHXParser.TAXONOMY_EXTRACTION.NO );
+ parser.setReplaceUnderscores( false );
+ parser.setGuessRootedness( true );
+ final Phylogeny[] phys = ForesterUtil.readPhylogeniesFromUrl( u, parser );
+ if ( ( phys == null ) || ( phys.length != 1 ) ) {
+ return false;
+ }
+ if ( phys[ 0 ].getNumberOfExternalNodes() < 10 ) {
+ return false;
+ }
+ }
+ catch ( final Exception e ) {
+ e.printStackTrace();
+ return false;
+ }
+ return true;
+ }
+
+ private final static Phylogeny createPhylogeny( final String nhx ) throws IOException {
+ final Phylogeny p = ParserBasedPhylogenyFactory.getInstance().create( nhx, new NHXParser() )[ 0 ];
+ return p;
+ }
+
+ private final static Event getEvent( final Phylogeny p, final String n1, final String n2 ) {
+ return PhylogenyMethods.calculateLCA( p.getNode( n1 ), p.getNode( n2 ) ).getNodeData().getEvent();
+ }
+
+ private static boolean testAminoAcidSequence() {
+ try {
+ final MolecularSequence aa1 = BasicSequence.createAaSequence( "aa1", "aAklm-?xX*z$#" );
+ if ( aa1.getLength() != 13 ) {
+ return false;
+ }
+ if ( aa1.getResidueAt( 0 ) != 'A' ) {
+ return false;
+ }
+ if ( aa1.getResidueAt( 2 ) != 'K' ) {
+ return false;
+ }
+ if ( !new String( aa1.getMolecularSequence() ).equals( "AAKLM-XXX*ZXX" ) ) {
+ return false;
+ }
+ final MolecularSequence aa2 = BasicSequence.createAaSequence( "aa3", "ARNDCQEGHILKMFPSTWYVX*-BZOJU" );
+ if ( !new String( aa2.getMolecularSequence() ).equals( "ARNDCQEGHILKMFPSTWYVX*-BZOXU" ) ) {
+ return false;
+ }
+ final MolecularSequence dna1 = BasicSequence.createDnaSequence( "dna1", "ACGTUX*-?RYMKWSN" );
+ if ( !new String( dna1.getMolecularSequence() ).equals( "ACGTNN*-NRYMKWSN" ) ) {
+ return false;
+ }
+ final MolecularSequence rna1 = BasicSequence.createRnaSequence( "rna1", "..ACGUTX*-?RYMKWSN" );
+ if ( !new String( rna1.getMolecularSequence() ).equals( "--ACGUNN*-NRYMKWSN" ) ) {
+ return false;
+ }
+ }
+ catch ( final Exception e ) {
+ e.printStackTrace();
+ return false;
+ }
+ return true;
+ }
+
+ private static boolean testBasicDomain() {
+ try {
+ final Domain pd = new BasicDomain( "id", 23, 25, ( short ) 1, ( short ) 4, 0.1, -12 );
+ if ( !pd.getDomainId().equals( "id" ) ) {
+ return false;
+ }
+ if ( pd.getNumber() != 1 ) {
+ return false;
+ }
+ if ( pd.getTotalCount() != 4 ) {
+ return false;
+ }
+ if ( !pd.equals( new BasicDomain( "id", 22, 111, ( short ) 1, ( short ) 4, 0.2, -12 ) ) ) {
+ return false;
+ }
+ final Domain a1 = new BasicDomain( "a", 1, 10, ( short ) 1, ( short ) 4, 0.1, -12 );
+ final BasicDomain a1_copy = new BasicDomain( "a", 1, 10, ( short ) 1, ( short ) 4, 0.1, -12 );
+ final BasicDomain a1_equal = new BasicDomain( "a", 524, 743994, ( short ) 1, ( short ) 300, 3.0005, 230 );
+ final BasicDomain a2 = new BasicDomain( "a", 1, 10, ( short ) 2, ( short ) 4, 0.1, -12 );
+ final BasicDomain a3 = new BasicDomain( "A", 1, 10, ( short ) 1, ( short ) 4, 0.1, -12 );
+ if ( !a1.equals( a1 ) ) {
+ return false;
+ }
+ if ( !a1.equals( a1_copy ) ) {
+ return false;
+ }
+ if ( !a1.equals( a1_equal ) ) {
+ return false;
+ }
+ if ( !a1.equals( a2 ) ) {
+ return false;
+ }
+ if ( a1.equals( a3 ) ) {
+ return false;
+ }
+ if ( a1.compareTo( a1 ) != 0 ) {
+ return false;
+ }
+ if ( a1.compareTo( a1_copy ) != 0 ) {
+ return false;
+ }
+ if ( a1.compareTo( a1_equal ) != 0 ) {
+ return false;
+ }
+ if ( a1.compareTo( a2 ) != 0 ) {
+ return false;
+ }
+ if ( a1.compareTo( a3 ) == 0 ) {
+ return false;
+ }
+ }
+ catch ( final Exception e ) {
+ e.printStackTrace( System.out );
+ return false;
+ }
+ return true;
+ }
+
+ private static boolean testBasicNodeMethods() {
+ try {
+ if ( PhylogenyNode.getNodeCount() != 0 ) {
+ return false;
+ }
+ final PhylogenyNode n1 = new PhylogenyNode();
+ final PhylogenyNode n2 = PhylogenyNode
+ .createInstanceFromNhxString( "", NHXParser.TAXONOMY_EXTRACTION.PFAM_STYLE_STRICT );
+ final PhylogenyNode n3 = PhylogenyNode
+ .createInstanceFromNhxString( "n3", NHXParser.TAXONOMY_EXTRACTION.PFAM_STYLE_STRICT );
+ final PhylogenyNode n4 = PhylogenyNode
+ .createInstanceFromNhxString( "n4:0.01", NHXParser.TAXONOMY_EXTRACTION.PFAM_STYLE_STRICT );
+ if ( n1.isHasAssignedEvent() ) {
+ return false;
+ }
+ if ( PhylogenyNode.getNodeCount() != 4 ) {
+ return false;
+ }
+ if ( n3.getIndicator() != 0 ) {
+ return false;
+ }
+ if ( n3.getNumberOfExternalNodes() != 1 ) {
+ return false;
+ }
+ if ( !n3.isExternal() ) {
+ return false;
+ }
+ if ( !n3.isRoot() ) {
+ return false;
+ }
+ if ( !n4.getName().equals( "n4" ) ) {
+ return false;
+ }
+ }
+ catch ( final Exception e ) {
+ e.printStackTrace( System.out );
+ return false;
+ }
+ return true;
+ }
+
+ private static boolean testCommonPrefix() {
+ final List<String> l0 = new ArrayList<String>();
+ l0.add( "abc" );
+ if ( !ForesterUtil.greatestCommonPrefix( l0 ).equals( "abc" ) ) {
+ return false;
+ }
+ final List<String> l1 = new ArrayList<String>();
+ l1.add( "abc" );
+ l1.add( "abX" );
+ if ( !ForesterUtil.greatestCommonPrefix( l1 ).equals( "ab" ) ) {
+ return false;
+ }
+ final List<String> l2 = new ArrayList<String>();
+ l2.add( "abc" );
+ l2.add( "abX" );
+ l2.add( "axy" );
+ if ( !ForesterUtil.greatestCommonPrefix( l2 ).equals( "a" ) ) {
+ return false;
+ }
+ final List<String> l3 = new ArrayList<String>();
+ l3.add( "abXsdfsdfsdfsdfsdfsd" );
+ l3.add( "abXsdfsdfsdfsdfsdfsd" );
+ l3.add( "abc" );
+ l3.add( "abXsdfsdfsdfsdfsdfsd" );
+ l3.add( "ab" );
+ l3.add( "abc" );
+ l3.add( "ab" );
+ if ( !ForesterUtil.greatestCommonPrefix( l3 ).equals( "ab" ) ) {
+ return false;
+ }
+ final List<String> l4 = new ArrayList<String>();
+ l4.add( "abXsdfsdfsdfsdfsdfsd" );
+ l4.add( "abXsdfsdfsdfsdfsdfsd" );
+ l4.add( "abc" );
+ l4.add( "Xsdfsdfsdfsdfsdfsd" );
+ l4.add( "ab" );
+ l4.add( "abc" );
+ if ( !ForesterUtil.greatestCommonPrefix( l4 ).equals( "" ) ) {
+ return false;
+ }
+ final List<String> l5 = new ArrayList<String>();
+ l5.add( "" );
+ if ( !ForesterUtil.greatestCommonPrefix( l5 ).equals( "" ) ) {
+ return false;
+ }
+ final List<String> l6 = new ArrayList<String>();
+ l6.add( "abc" );
+ l6.add( "abX" );
+ l6.add( "" );
+ if ( !ForesterUtil.greatestCommonPrefix( l6 ).equals( "" ) ) {
+ return false;
+ }
+ return true;
+ }
+
+ private static boolean testCommonPrefixSep() {
+ final List<String> l0 = new ArrayList<String>();
+ l0.add( "a.b.c" );
+ if ( !ForesterUtil.greatestCommonPrefix( l0, "." ).equals( "a.b.c" ) ) {
+ return false;
+ }
+ final List<String> l1 = new ArrayList<String>();
+ l1.add( "a.b.c" );
+ l1.add( "a.b.X" );
+ if ( !ForesterUtil.greatestCommonPrefix( l1, "." ).equals( "a.b" ) ) {
+ return false;
+ }
+ final List<String> l2 = new ArrayList<String>();
+ l2.add( "a.b.c." );
+ l2.add( "a.b.X." );
+ l2.add( "a.x.y." );
+ if ( !ForesterUtil.greatestCommonPrefix( l2, "." ).equals( "a" ) ) {
+ return false;
+ }
+ final List<String> l3 = new ArrayList<String>();
+ l3.add( "a/b/X/s/d/f/s/d/f/s/d/f/s/d/f/s/d/f/s/d/" );
+ l3.add( "a/b/X/s/d/f/s/d/f/s/d/f/s/d/f/s/d/f/s/d" );
+ l3.add( "a/b/c" );
+ l3.add( "a/b/X/s/d/f/s/d/f/s/d/f/s/d/f/s/d/f/s/d/" );
+ l3.add( "a/b/" );
+ l3.add( "a/b/c/" );
+ l3.add( "a/b////////" );
+ if ( !ForesterUtil.greatestCommonPrefix( l3, "/" ).equals( "a/b" ) ) {
+ return false;
+ }
+ final List<String> l4 = new ArrayList<String>();
+ l4.add( "a.b.X.s.d.f.s.d.f.s.d.f.s.d.f.s.d.f.s.d" );
+ l4.add( "a.b.X.s.d.f.s.d.f.s.d.f.s.d.f.s.d.f.s.d" );
+ l4.add( "a.b.c" );
+ l4.add( "X.s.d.f.s.d.f.s.d.f.s.d.f.s.d.f.s.d..." );
+ l4.add( "a.b" );
+ l4.add( "a.b.c" );
+ if ( !ForesterUtil.greatestCommonPrefix( l4, "." ).equals( "" ) ) {
+ return false;
+ }
+ final List<String> l5 = new ArrayList<String>();
+ l5.add( "" );
+ if ( !ForesterUtil.greatestCommonPrefix( l5, "_" ).equals( "" ) ) {
+ return false;
+ }
+ final List<String> l6 = new ArrayList<String>();
+ l6.add( "_" );
+ l6.add( "__" );
+ if ( !ForesterUtil.greatestCommonPrefix( l6, "_" ).equals( "" ) ) {
+ return false;
+ }
+ final List<String> l7 = new ArrayList<String>();
+ l7.add( "a,b,c" );
+ l7.add( "a,b,X" );
+ l7.add( "" );
+ l7.add( ",,,,,,,,,," );
+ if ( !ForesterUtil.greatestCommonPrefix( l7, "," ).equals( "" ) ) {
+ return false;
+ }
+ final List<String> l8 = new ArrayList<String>();
+ l8.add( "123.304.403.04" );
+ l8.add( "123.304.403.04.02" );
+ l8.add( "123.304.403.03.03" );
+ if ( !ForesterUtil.greatestCommonPrefix( l8, "." ).equals( "123.304.403" ) ) {
+ return false;
+ }
+ final List<String> l9 = new ArrayList<String>();
+ l9.add( "123.304.403.04" );
+ l9.add( "123.304.403.04.02" );
+ l9.add( "123.304.402.03.03" );
+ if ( !ForesterUtil.greatestCommonPrefix( l9, "." ).equals( "123.304" ) ) {
+ return false;
+ }
+ final List<String> l10 = new ArrayList<String>();
+ l10.add( "abcde" );
+ l10.add( "adc" );
+ if ( !ForesterUtil.greatestCommonPrefix( l10, "." ).equals( "" ) ) {
+ return false;
+ }
+ return true;
+ }
+
+ private static boolean testContainsPrefix() {
+ if ( !ForesterUtil.isContainsPrefix( "a.b", "a", "." ) ) {
+ return false;
+ }
+ if ( !ForesterUtil.isContainsPrefix( "a.b.c", "a", "." ) ) {
+ return false;
+ }
+ if ( !ForesterUtil.isContainsPrefix( "a.b.c", "a.b", "." ) ) {
+ return false;
+ }
+ if ( !ForesterUtil.isContainsPrefix( "a.b", "a.b", "." ) ) {
+ return false;
+ }
+ if ( !ForesterUtil.isContainsPrefix( "a", "a", "." ) ) {
+ return false;
+ }
+ if ( !ForesterUtil.isContainsPrefix( ".a.b", ".a", "." ) ) {
+ return false;
+ }
+ if ( !ForesterUtil.isContainsPrefix( ".a.b.", ".a", "." ) ) {
+ return false;
+ }
+ if ( !ForesterUtil.isContainsPrefix( ".a.b.", ".a.", "." ) ) {
+ return false;
+ }
+ if ( !ForesterUtil.isContainsPrefix( "a..b.", "a", "." ) ) {
+ return false;
+ }
+ if ( !ForesterUtil.isContainsPrefix( "a..b.", "a..", "." ) ) {
+ return false;
+ }
+ if ( ForesterUtil.isContainsPrefix( "a", "a.b", "." ) ) {
+ return false;
+ }
+ if ( ForesterUtil.isContainsPrefix( "a_b", "a", "." ) ) {
+ return false;
+ }
+ if ( ForesterUtil.isContainsPrefix( ".a.", ".a.b.", "." ) ) {
+ return false;
+ }
+ if ( ForesterUtil.isContainsPrefix( "a.b.c", "a.x", "." ) ) {
+ return false;
+ }
+ return true;
+ }
+
+ private static boolean testUTF8ParsingFromFile() {
+ try {
+ final PhyloXmlParser xml_parser = PhyloXmlParser.createPhyloXmlParser();
+ final Phylogeny[] phylogenies_xml = ParserBasedPhylogenyFactory.getInstance()
+ .create( new File( Test.PATH_TO_TEST_DATA + "chars.xml" ), xml_parser );
+ if ( xml_parser.getErrorCount() > 0 ) {
+ System.out.println( xml_parser.getErrorMessages().toString() );
+ return false;
+ }
+ if ( phylogenies_xml.length != 1 ) {
+ return false;
+ }
+ final Phylogeny[] phylogenies_xml2 = ParserBasedPhylogenyFactory.getInstance()
+ .create( new StringBuffer( phylogenies_xml[ 0 ].toPhyloXML( 0 ) ), xml_parser );
+ final Phylogeny[] phylogenies_nh = ParserBasedPhylogenyFactory.getInstance()
+ .create( new File( Test.PATH_TO_TEST_DATA + "chars.nh" ), new NHXParser() );
+ if ( phylogenies_nh.length != 1 ) {
+ return false;
+ }
+ final Phylogeny[] phylogenies_nex = ParserBasedPhylogenyFactory.getInstance()
+ .create( new File( Test.PATH_TO_TEST_DATA + "chars.nex" ), new NexusPhylogeniesParser() );
+ if ( phylogenies_nex.length != 1 ) {
+ return false;
+ }
+ final String[] xml_n = phylogenies_xml[ 0 ].getAllExternalNodeNames();
+ final String[] xml_n2 = phylogenies_xml2[ 0 ].getAllExternalNodeNames();
+ final String[] nh_n = phylogenies_nh[ 0 ].getAllExternalNodeNames();
+ final String[] nex_n = phylogenies_nex[ 0 ].getAllExternalNodeNames();
+ final String n0 = "AQ~!@#$%^&*()_+-=\\{}|;:\"<>?,./";
+ final String n1 = "€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜˜˜™š›œžŸ¡¢£¤¥¦§¨©ª«¬®¯°±¹²³´µ¶·¸º»¼¿À÷þÿ";
+ final String n2 = "漢字ひらがなカタカナ";
+ final String n3 = "อักษรไทย";
+ final String n4 = "繁體字";
+ final String n5 = "한글";
+ final String n6 = "देवनागरी";
+ final String n7 = "chữ Quốc ngữ";
+ final String n8 = "ру́сский язы́к";
+ final String n9 = "អក្សរខ្មែរ";
+ if ( !xml_n[ 0 ].equals( n0 ) ) {
+ System.out.println( xml_n[ 0 ] );
+ System.out.println( n0 );
+ return false;
+ }
+ if ( !xml_n2[ 0 ].equals( n0 ) ) {
+ System.out.println( xml_n2[ 0 ] );
+ System.out.println( n0 );
+ return false;
+ }
+ if ( !nh_n[ 0 ].equals( n0 ) ) {
+ System.out.println( nh_n[ 0 ] );
+ System.out.println( n0 );
+ return false;
+ }
+ if ( !nex_n[ 0 ].equals( n0 ) ) {
+ System.out.println( nex_n[ 0 ] );
+ System.out.println( n0 );
+ return false;
+ }
+ if ( !xml_n[ 1 ].equals( n1 ) ) {
+ System.out.println( xml_n[ 1 ] );
+ System.out.println( n1 );
+ return false;
+ }
+ if ( !xml_n2[ 1 ].equals( n1 ) ) {
+ System.out.println( xml_n2[ 1 ] );
+ System.out.println( n1 );
+ return false;
+ }
+ if ( !nh_n[ 1 ].equals( n1 ) ) {
+ System.out.println( nh_n[ 1 ] );
+ System.out.println( n1 );
+ return false;
+ }
+ if ( !nex_n[ 1 ].equals( n1 ) ) {
+ System.out.println( nex_n[ 1 ] );
+ System.out.println( n1 );
+ return false;
+ }
+ if ( !xml_n[ 2 ].equals( n2 ) ) {
+ System.out.println( xml_n[ 2 ] );
+ System.out.println( n2 );
+ return false;
+ }
+ if ( !xml_n2[ 2 ].equals( n2 ) ) {
+ System.out.println( xml_n2[ 2 ] );
+ System.out.println( n2 );
+ return false;
+ }
+ if ( !nh_n[ 2 ].equals( n2 ) ) {
+ System.out.println( nh_n[ 2 ] );
+ System.out.println( n2 );
+ return false;
+ }
+ if ( !nex_n[ 2 ].equals( n2 ) ) {
+ System.out.println( nex_n[ 2 ] );
+ System.out.println( n2 );
+ return false;
+ }
+ //
+ if ( !xml_n[ 3 ].equals( n3 ) ) {
+ System.out.println( xml_n[ 3 ] );
+ System.out.println( n3 );
+ return false;
+ }
+ if ( !xml_n2[ 3 ].equals( n3 ) ) {
+ System.out.println( xml_n2[ 3 ] );
+ System.out.println( n3 );
+ return false;
+ }
+ if ( !nh_n[ 3 ].equals( n3 ) ) {
+ System.out.println( nh_n[ 3 ] );
+ System.out.println( n3 );
+ return false;
+ }
+ if ( !nex_n[ 3 ].equals( n3 ) ) {
+ System.out.println( nex_n[ 3 ] );
+ System.out.println( n3 );
+ return false;
+ }
+ //
+ if ( !xml_n[ 4 ].equals( n4 ) ) {
+ System.out.println( xml_n[ 4 ] );
+ System.out.println( n4 );
+ return false;
+ }
+ if ( !nh_n[ 4 ].equals( n4 ) ) {
+ System.out.println( nh_n[ 4 ] );
+ System.out.println( n4 );
+ return false;
+ }
+ if ( !nex_n[ 4 ].equals( n4 ) ) {
+ System.out.println( nex_n[ 4 ] );
+ System.out.println( n4 );
+ return false;
+ }
+ //
+ if ( !xml_n[ 5 ].equals( n5 ) ) {
+ System.out.println( xml_n[ 5 ] );
+ System.out.println( n5 );
+ return false;
+ }
+ if ( !nh_n[ 5 ].equals( n5 ) ) {
+ System.out.println( nh_n[ 5 ] );
+ System.out.println( n5 );
+ return false;
+ }
+ if ( !nex_n[ 5 ].equals( n5 ) ) {
+ System.out.println( nex_n[ 5 ] );
+ System.out.println( n5 );
+ return false;
+ }
+ //
+ if ( !xml_n[ 6 ].equals( n6 ) ) {
+ System.out.println( xml_n[ 6 ] );
+ System.out.println( n6 );
+ return false;
+ }
+ if ( !nh_n[ 6 ].equals( n6 ) ) {
+ System.out.println( nh_n[ 6 ] );
+ System.out.println( n6 );
+ return false;
+ }
+ if ( !nex_n[ 6 ].equals( n6 ) ) {
+ System.out.println( nex_n[ 6 ] );
+ System.out.println( n6 );
+ return false;
+ }
+ //
+ if ( !xml_n[ 7 ].equals( n7 ) ) {
+ System.out.println( xml_n[ 7 ] );
+ System.out.println( n7 );
+ return false;
+ }
+ if ( !nh_n[ 7 ].equals( n7 ) ) {
+ System.out.println( nh_n[ 7 ] );
+ System.out.println( n7 );
+ return false;
+ }
+ if ( !nex_n[ 7 ].equals( n7 ) ) {
+ System.out.println( nex_n[ 7 ] );
+ System.out.println( n7 );
+ return false;
+ }
+ if ( !xml_n[ 8 ].equals( n8 ) ) {
+ System.out.println( xml_n[ 8 ] );
+ System.out.println( n8 );
+ return false;
+ }
+ if ( !nh_n[ 8 ].equals( n8 ) ) {
+ System.out.println( nh_n[ 8 ] );
+ System.out.println( n8 );
+ return false;
+ }
+ if ( !nex_n[ 8 ].equals( n8 ) ) {
+ System.out.println( nex_n[ 8 ] );
+ System.out.println( n8 );
+ return false;
+ }
+ if ( !xml_n[ 9 ].equals( n9 ) ) {
+ System.out.println( xml_n[ 9 ] );
+ System.out.println( n9 );
+ return false;
+ }
+ if ( !xml_n2[ 9 ].equals( n9 ) ) {
+ System.out.println( xml_n2[ 9 ] );
+ System.out.println( n9 );
+ return false;
+ }
+ if ( !nh_n[ 9 ].equals( n9 ) ) {
+ System.out.println( nh_n[ 9 ] );
+ System.out.println( n9 );
+ return false;
+ }
+ if ( !nex_n[ 9 ].equals( n9 ) ) {
+ System.out.println( nex_n[ 9 ] );
+ System.out.println( n9 );
+ return false;
+ }
+ if ( !phylogenies_xml[ 0 ].toNewHampshire().equals( phylogenies_nh[ 0 ].toNewHampshire() ) ) {
+ System.out.println( phylogenies_xml[ 0 ].toNewHampshire() );
+ System.out.println( phylogenies_nh[ 0 ].toNewHampshire() );
+ return false;
+ }
+ if ( !phylogenies_xml[ 0 ].toNewHampshire().equals( phylogenies_nex[ 0 ].toNewHampshire() ) ) {
+ System.out.println( phylogenies_xml[ 0 ].toNewHampshire() );
+ System.out.println( phylogenies_nex[ 0 ].toNewHampshire() );
+ return false;
+ }
+ }
+ catch ( final Exception e ) {
+ e.printStackTrace( System.out );
+ return false;
+ }
+ return true;
+ }
+
+ private static boolean testBasicPhyloXMLparsing() {
+ try {
+ final PhylogenyFactory factory = ParserBasedPhylogenyFactory.getInstance();
+ final PhyloXmlParser xml_parser = PhyloXmlParser.createPhyloXmlParser();
+ final Phylogeny[] phylogenies_0 = factory
+ .create( new File( Test.PATH_TO_TEST_DATA + "phyloxml_test_t1.xml" ), xml_parser );
+ if ( xml_parser.getErrorCount() > 0 ) {
+ System.out.println( xml_parser.getErrorMessages().toString() );
+ return false;
+ }
+ if ( phylogenies_0.length != 4 ) {
+ return false;
+ }
+ final Phylogeny t1 = phylogenies_0[ 0 ];
+ final Phylogeny t2 = phylogenies_0[ 1 ];
+ final Phylogeny t3 = phylogenies_0[ 2 ];
+ final Phylogeny t4 = phylogenies_0[ 3 ];
+ if ( t1.getNumberOfExternalNodes() != 1 ) {
+ return false;
+ }
+ if ( !t1.isRooted() ) {
+ return false;
+ }
+ if ( t1.isRerootable() ) {
+ return false;
+ }
+ if ( !t1.getType().equals( "gene_tree" ) ) {
+ return false;
+ }
+ if ( t2.getNumberOfExternalNodes() != 2 ) {
+ return false;
+ }
+ if ( !isEqual( t2.getNode( "node a" ).getDistanceToParent(), 1.0 ) ) {
+ return false;
+ }
+ if ( !isEqual( t2.getNode( "node b" ).getDistanceToParent(), 2.0 ) ) {
+ return false;
+ }
+ if ( t2.getNode( "node a" ).getNodeData().getTaxonomies().size() != 2 ) {
+ return false;
+ }
+ if ( !t2.getNode( "node a" ).getNodeData().getTaxonomy( 0 ).getCommonName().equals( "some parasite" ) ) {
+ return false;
+ }
+ if ( !t2.getNode( "node a" ).getNodeData().getTaxonomy( 1 ).getCommonName().equals( "the host" ) ) {
+ return false;
+ }
+ if ( t2.getNode( "node a" ).getNodeData().getSequences().size() != 2 ) {
+ return false;
+ }
+ if ( !t2.getNode( "node a" ).getNodeData().getSequence( 0 ).getMolecularSequence()
+ .startsWith( "actgtgggggt" ) ) {
+ return false;
+ }
+ if ( !t2.getNode( "node a" ).getNodeData().getSequence( 1 ).getMolecularSequence()
+ .startsWith( "ctgtgatgcat" ) ) {
+ return false;
+ }
+ if ( t3.getNumberOfExternalNodes() != 4 ) {
+ return false;
+ }
+ if ( !t1.getName().equals( "t1" ) ) {
+ return false;
+ }
+ if ( !t2.getName().equals( "t2" ) ) {
+ return false;
+ }
+ if ( !t3.getName().equals( "t3" ) ) {
+ return false;
+ }
+ if ( !t4.getName().equals( "t4" ) ) {
+ return false;
+ }
+ if ( !t3.getIdentifier().getValue().equals( "1-1" ) ) {
+ return false;
+ }
+ if ( !t3.getIdentifier().getProvider().equals( "treebank" ) ) {
+ return false;
+ }
+ if ( !t3.getNode( "root node" ).isDuplication() ) {
+ return false;
+ }
+ if ( !t3.getNode( "node a" ).isDuplication() ) {
+ return false;
+ }
+ if ( t3.getNode( "node a" ).isSpeciation() ) {
+ return false;
+ }
+ if ( t3.getNode( "node bc" ).isDuplication() ) {
+ return false;
+ }
+ if ( !t3.getNode( "node bc" ).isSpeciation() ) {
+ return false;
+ }
+ if ( !t3.getNode( "root node" ).getNodeData().getSequence().getType().equals( "protein" ) ) {
+ return false;
+ }
+ if ( !t3.getNode( "root node" ).getNodeData().getSequence().getName()
+ .equals( "Apoptosis facilitator Bcl-2-like 14 protein" ) ) {
+ return false;
+ }
+ if ( !t3.getNode( "root node" ).getNodeData().getSequence().getSymbol().equals( "BCL2L14" ) ) {
+ return false;
+ }
+ if ( !t3.getNode( "root node" ).getNodeData().getSequence().getAccession().getValue().equals( "Q9BZR8" ) ) {
+ return false;
+ }
+ if ( !t3.getNode( "root node" ).getNodeData().getSequence().getAccession().getSource()
+ .equals( "UniProtKB" ) ) {
+ return false;
+ }
+ if ( !( t3.getNode( "root node" ).getNodeData().getSequence().getAnnotation( 2 ) ).getDesc()
+ .equals( "apoptosis" ) ) {
+ return false;
+ }
+ if ( !( t3.getNode( "root node" ).getNodeData().getSequence().getAnnotation( 2 ) ).getRef()
+ .equals( "GO:0006915" ) ) {
+ return false;
+ }
+ if ( !( t3.getNode( "root node" ).getNodeData().getSequence().getAnnotation( 2 ) ).getSource()
+ .equals( "UniProtKB" ) ) {
+ return false;
+ }
+ if ( !( t3.getNode( "root node" ).getNodeData().getSequence().getAnnotation( 2 ) ).getEvidence()
+ .equals( "experimental" ) ) {
+ return false;
+ }
+ if ( !( t3.getNode( "root node" ).getNodeData().getSequence().getAnnotation( 2 ) ).getType()
+ .equals( "function" ) ) {
+ return false;
+ }
+ if ( ( t3.getNode( "root node" ).getNodeData().getSequence().getAnnotation( 2 ) ).getConfidence()
+ .getValue() != 1 ) {
+ return false;
+ }
+ if ( !( t3.getNode( "root node" ).getNodeData().getSequence().getAnnotation( 2 ) ).getConfidence().getType()
+ .equals( "ml" ) ) {
+ return false;
+ }
+ if ( !( t3.getNode( "root node" ).getNodeData().getSequence().getAnnotation( 2 ) ).getDesc()
+ .equals( "apoptosis" ) ) {
+ return false;
+ }
+ if ( ( t3.getNode( "root node" ).getNodeData().getSequence().getAnnotation( 2 ) ).getProperties()
+ .getProperties( "AFFY:expression" ).get( 0 ).getAppliesTo() != AppliesTo.ANNOTATION ) {
+ return false;
+ }
+ if ( !( t3.getNode( "root node" ).getNodeData().getSequence().getAnnotation( 2 ) ).getProperties()
+ .getProperties( "AFFY:expression" ).get( 0 ).getDataType().equals( "xsd:double" ) ) {
+ return false;
+ }
+ if ( !( t3.getNode( "root node" ).getNodeData().getSequence().getAnnotation( 2 ) ).getProperties()
+ .getProperties( "AFFY:expression" ).get( 0 ).getRef().equals( "AFFY:expression" ) ) {
+ return false;
+ }
+ if ( !( t3.getNode( "root node" ).getNodeData().getSequence().getAnnotation( 2 ) ).getProperties()
+ .getProperties( "AFFY:expression" ).get( 0 ).getUnit().equals( "AFFY:x" ) ) {
+ return false;
+ }
+ if ( !( t3.getNode( "root node" ).getNodeData().getSequence().getAnnotation( 2 ) ).getProperties()
+ .getProperties( "AFFY:expression" ).get( 0 ).getValue().equals( "0.2" ) ) {
+ return false;
+ }
+ if ( !( t3.getNode( "root node" ).getNodeData().getSequence().getAnnotation( 2 ) ).getProperties()
+ .getProperties( "MED:disease" ).get( 0 ).getValue().equals( "lymphoma" ) ) {
+ return false;
+ }
+ if ( !( t3.getNode( "root node" ).getNodeData().getSequence().getAnnotation( 1 ) ).getRef()
+ .equals( "GO:0005829" ) ) {
+ return false;
+ }
+ if ( !( t3.getNode( "root node" ).getNodeData().getSequence().getAnnotation( 0 ) ).getDesc()
+ .equals( "intracellular organelle" ) ) {
+ return false;
+ }
+ if ( !( t3.getNode( "root node" ).getNodeData().getSequence().getUri( 0 ).getType().equals( "source" ) ) ) {
+ return false;
+ }
+ if ( !( t3.getNode( "root node" ).getNodeData().getSequence().getUri( 0 ).getDescription()
+ .equals( "UniProt link" ) ) ) {
+ return false;
+ }
+ if ( !( t3.getNode( "root node" ).getNodeData().getSequence().getLocation().equals( "12p13-p12" ) ) ) {
+ return false;
+ }
+ final SortedSet<Accession> x = t3.getNode( "root node" ).getNodeData().getSequence().getCrossReferences();
+ if ( x.size() != 4 ) {
+ return false;
+ }
+ int c = 0;
+ for( final Accession acc : x ) {
+ if ( c == 0 ) {
+ if ( !acc.getSource().equals( "KEGG" ) ) {
+ return false;
+ }
+ if ( !acc.getValue().equals( "hsa:596" ) ) {
+ return false;
+ }
+ }
+ c++;
+ }
+ }
+ catch ( final Exception e ) {
+ e.printStackTrace( System.out );
+ return false;
+ }
+ return true;
+ }
+
+ private static boolean testBasicPhyloXMLparsingRoundtrip() {
+ try {
+ final PhylogenyFactory factory = ParserBasedPhylogenyFactory.getInstance();
+ final PhyloXmlParser xml_parser = PhyloXmlParser.createPhyloXmlParser();
+ if ( USE_LOCAL_PHYLOXML_SCHEMA ) {
+ xml_parser.setValidateAgainstSchema( PHYLOXML_LOCAL_XSD );
+ }
+ else {
+ xml_parser.setValidateAgainstSchema( PHYLOXML_REMOTE_XSD );
+ }
+ final Phylogeny[] phylogenies_0 = factory
+ .create( new File( Test.PATH_TO_TEST_DATA + "phyloxml_test_t1.xml" ), xml_parser );
+ if ( xml_parser.getErrorCount() > 0 ) {
+ System.out.println( xml_parser.getErrorMessages().toString() );
+ return false;
+ }
+ if ( phylogenies_0.length != 4 ) {
+ return false;
+ }
+ final StringBuffer t1_sb = new StringBuffer( phylogenies_0[ 0 ].toPhyloXML( 0 ) );
+ final Phylogeny[] phylogenies_t1 = factory.create( t1_sb, xml_parser );
+ if ( phylogenies_t1.length != 1 ) {
+ return false;
+ }
+ final Phylogeny t1_rt = phylogenies_t1[ 0 ];
+ if ( !t1_rt.getDistanceUnit().equals( "cc" ) ) {
+ return false;
+ }
+ if ( !t1_rt.isRooted() ) {
+ return false;
+ }
+ if ( t1_rt.isRerootable() ) {
+ return false;
+ }
+ if ( !t1_rt.getType().equals( "gene_tree" ) ) {
+ return false;
+ }
+ final StringBuffer t2_sb = new StringBuffer( phylogenies_0[ 1 ].toPhyloXML( 0 ) );
+ final Phylogeny[] phylogenies_t2 = factory.create( t2_sb, xml_parser );
+ final Phylogeny t2_rt = phylogenies_t2[ 0 ];
+ if ( t2_rt.getNode( "node a" ).getNodeData().getTaxonomies().size() != 2 ) {
+ return false;
+ }
+ if ( !t2_rt.getNode( "node a" ).getNodeData().getTaxonomy( 0 ).getCommonName().equals( "some parasite" ) ) {
+ return false;
+ }
+ if ( !t2_rt.getNode( "node a" ).getNodeData().getTaxonomy( 1 ).getCommonName().equals( "the host" ) ) {
+ return false;
+ }
+ if ( t2_rt.getNode( "node a" ).getNodeData().getSequences().size() != 2 ) {
+ return false;
+ }
+ if ( !t2_rt.getNode( "node a" ).getNodeData().getSequence( 0 ).getMolecularSequence()
+ .startsWith( "actgtgggggt" ) ) {
+ return false;
+ }
+ if ( !t2_rt.getNode( "node a" ).getNodeData().getSequence( 1 ).getMolecularSequence()
+ .startsWith( "ctgtgatgcat" ) ) {
+ return false;
+ }
+ final StringBuffer t3_sb_0 = new StringBuffer( phylogenies_0[ 2 ].toPhyloXML( 0 ) );
+ final Phylogeny[] phylogenies_1_0 = factory.create( t3_sb_0, xml_parser );
+ final StringBuffer t3_sb = new StringBuffer( phylogenies_1_0[ 0 ].toPhyloXML( 0 ) );
+ final Phylogeny[] phylogenies_1 = factory.create( t3_sb, xml_parser );
+ if ( phylogenies_1.length != 1 ) {
+ return false;
+ }
+ final Phylogeny t3_rt = phylogenies_1[ 0 ];
+ if ( !t3_rt.getName().equals( "t3" ) ) {
+ return false;
+ }
+ if ( t3_rt.getNumberOfExternalNodes() != 4 ) {
+ return false;
+ }
+ if ( !t3_rt.getIdentifier().getValue().equals( "1-1" ) ) {
+ return false;
+ }
+ if ( !t3_rt.getIdentifier().getProvider().equals( "treebank" ) ) {
+ return false;
+ }
+ if ( !t3_rt.getNode( "root node" ).getNodeData().getSequence().getType().equals( "protein" ) ) {
+ return false;
+ }
+ if ( !t3_rt.getNode( "root node" ).getNodeData().getSequence().getName()
+ .equals( "Apoptosis facilitator Bcl-2-like 14 protein" ) ) {
+ return false;
+ }
+ if ( !t3_rt.getNode( "root node" ).getNodeData().getSequence().getSymbol().equals( "BCL2L14" ) ) {
+ return false;
+ }
+ if ( !t3_rt.getNode( "root node" ).getNodeData().getSequence().getAccession().getValue()
+ .equals( "Q9BZR8" ) ) {
+ return false;
+ }
+ if ( !t3_rt.getNode( "root node" ).getNodeData().getSequence().getAccession().getSource()
+ .equals( "UniProtKB" ) ) {
+ return false;
+ }
+ if ( !( t3_rt.getNode( "root node" ).getNodeData().getSequence().getAnnotation( 2 ) ).getDesc()
+ .equals( "apoptosis" ) ) {
+ return false;
+ }
+ if ( !( t3_rt.getNode( "root node" ).getNodeData().getSequence().getAnnotation( 2 ) ).getRef()
+ .equals( "GO:0006915" ) ) {
+ return false;
+ }
+ if ( !( t3_rt.getNode( "root node" ).getNodeData().getSequence().getAnnotation( 2 ) ).getSource()
+ .equals( "UniProtKB" ) ) {
+ return false;
+ }
+ if ( !( t3_rt.getNode( "root node" ).getNodeData().getSequence().getAnnotation( 2 ) ).getEvidence()
+ .equals( "experimental" ) ) {
+ return false;
+ }
+ if ( !( t3_rt.getNode( "root node" ).getNodeData().getSequence().getAnnotation( 2 ) ).getType()
+ .equals( "function" ) ) {
+ return false;
+ }
+ if ( ( t3_rt.getNode( "root node" ).getNodeData().getSequence().getAnnotation( 2 ) ).getConfidence()
+ .getValue() != 1 ) {
+ return false;
+ }
+ if ( !( t3_rt.getNode( "root node" ).getNodeData().getSequence().getAnnotation( 2 ) ).getConfidence()
+ .getType().equals( "ml" ) ) {
+ return false;
+ }
+ if ( !( t3_rt.getNode( "root node" ).getNodeData().getSequence().getAnnotation( 2 ) ).getDesc()
+ .equals( "apoptosis" ) ) {
+ return false;
+ }
+ if ( ( t3_rt.getNode( "root node" ).getNodeData().getSequence().getAnnotation( 2 ) ).getProperties()
+ .getProperties( "AFFY:expression" ).get( 0 ).getAppliesTo() != AppliesTo.ANNOTATION ) {
+ return false;
+ }
+ if ( !( t3_rt.getNode( "root node" ).getNodeData().getSequence().getAnnotation( 2 ) ).getProperties()
+ .getProperties( "AFFY:expression" ).get( 0 ).getDataType().equals( "xsd:double" ) ) {
+ return false;
+ }
+ if ( !( t3_rt.getNode( "root node" ).getNodeData().getSequence().getAnnotation( 2 ) ).getProperties()
+ .getProperties( "AFFY:expression" ).get( 0 ).getRef().equals( "AFFY:expression" ) ) {
+ return false;
+ }
+ if ( !( t3_rt.getNode( "root node" ).getNodeData().getSequence().getAnnotation( 2 ) ).getProperties()
+ .getProperties( "AFFY:expression" ).get( 0 ).getUnit().equals( "AFFY:x" ) ) {
+ return false;
+ }
+ if ( !( t3_rt.getNode( "root node" ).getNodeData().getSequence().getAnnotation( 2 ) ).getProperties()
+ .getProperties( "AFFY:expression" ).get( 0 ).getValue().equals( "0.2" ) ) {
+ return false;
+ }
+ if ( !( t3_rt.getNode( "root node" ).getNodeData().getSequence().getAnnotation( 2 ) ).getProperties()
+ .getProperties( "MED:disease" ).get( 0 ).getValue().equals( "lymphoma" ) ) {
+ return false;
+ }
+ if ( !( t3_rt.getNode( "root node" ).getNodeData().getSequence().getAnnotation( 1 ) ).getRef()
+ .equals( "GO:0005829" ) ) {
+ return false;
+ }
+ if ( !( t3_rt.getNode( "root node" ).getNodeData().getSequence().getAnnotation( 0 ) ).getDesc()
+ .equals( "intracellular organelle" ) ) {