+
+ 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;
+ }
+ 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;
+ }
+