The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
# -*-Perl-*- Test Harness script for Bioperl
# $Id$

use strict;

BEGIN {
    use lib '.';
    use Bio::Root::Test;
    
    test_begin(-tests => 175);
    
    use_ok('Bio::Phenotype::OMIM::OMIMparser');
}


my $omim_parser = Bio::Phenotype::OMIM::OMIMparser->new( -genemap  => test_input_file('omim_genemap_test'),
                                                         -omimtext => test_input_file('omim_text_test'));

isa_ok( $omim_parser, "Bio::Phenotype::OMIM::OMIMparser");

my $omim_entry = $omim_parser->next_phenotype();

isa_ok($omim_entry, "Bio::Phenotype::OMIM::OMIMentry");

is( $omim_entry->MIM_number(), "100500" );
is( $omim_entry->title(), "*100500 title" );
is( $omim_entry->alternative_titles_and_symbols(), ";;title1;;\ntitle2;;\ntitle3" );
is( $omim_entry->more_than_two_genes(), 0 );
is( $omim_entry->is_separate(), 1 );
is( $omim_entry->description(), undef); # "DESCRIPTION1\nDESCRIPTION2" );
is( $omim_entry->mapping_method(), "M method 1" );
is( $omim_entry->gene_status(), "C" );
is( $omim_entry->comment(), "comment1" );
is( $omim_entry->edited(), undef); # "ed1\ned2\ned3" );
is( $omim_entry->created(), undef); # "cd1\ncd2\ncd3" );
is( $omim_entry->contributors, undef); # "cn1\ncn2\ncn3" );
is( $omim_entry->additional_references(), "sa" );
is( ref($omim_entry->clinical_symptoms()), 'HASH' );
is( $omim_entry->species()->binomial(), "Homo sapiens" );


my $mini_mim = $omim_entry->miniMIM();

isa_ok( $mini_mim,"Bio::Phenotype::OMIM::MiniMIMentry" );
is( $mini_mim->description(), "Mini MIM text" );
is( $mini_mim->created(), "Mini MIM - cd" );
is( $mini_mim->contributors(), "Mini MIM - cn" );
is( $mini_mim->edited(), "Mini MIM - ed" );


my @corrs      = $omim_entry->each_Correlate();

is( $corrs[ 0 ]->name(), "mousecorrelate1" );
is( $corrs[ 0 ]->type(), "OMIM mouse correlate" );
is( $corrs[ 0 ]->species()->binomial(), "Mus musculus" );


my @cps        = $omim_entry->each_CytoPosition();

is( $cps[ 0 ]->value(), "1pter-p36.14" );


my @gss        = $omim_entry->each_gene_symbol();

is( $gss[ 0 ], "gene-symbol1" );


my @refs       = $omim_entry->each_Reference();

is( $refs[ 0 ]->authors(), "Author11, A. A.; Author12, A. A." );
is( $refs[ 0 ]->title(), "Title 1." );
is( $refs[ 0 ]->location(), "Am. J. Med. Genet1. 11 11-111 \(1981\)" );

is( $refs[ 1 ]->authors(), "Author21, A. A.; Author22, A. A." );
is( $refs[ 1 ]->title(), "Title 2." );
is( $refs[ 1 ]->location(), "Am. J. Med. Genet2. 12 22-222 \(1982\)" );

is( $refs[ 2 ]->authors(), "Author31, A. A.; Author32, A. A." );
is( $refs[ 2 ]->title(), "Title 3." );
is( $refs[ 2 ]->location(), "Am. J. Med. Genet3. 13 33-333 \(1983\)" );

is( $refs[ 3 ]->authors(), "" );
is( $refs[ 3 ]->title(), "other reference undef format" );
is( $refs[ 3 ]->location(), "" );



my @avs        = $omim_entry->each_AllelicVariant();

is( $avs[ 0 ]->number(), ".0001" );
is( $avs[ 0 ]->title(), "ALCOHOL INTOLERANCE, ACUTE" );
is( $avs[ 0 ]->symbol(), "ALDH2" );
is( $avs[ 0 ]->description(), "AV1-text" );
is( $avs[ 0 ]->aa_ori(), "GLU" );
is( $avs[ 0 ]->aa_mut(), "LYS" );
is( $avs[ 0 ]->position(), "487" );
is( $avs[ 0 ]->additional_mutations(), "" );


is( $avs[ 1 ]->number(), ".0002" );
is( $avs[ 1 ]->title(), "MYASTHENIC SYNDROME, SLOW-CHANNEL CONGENITAL" );
is( $avs[ 1 ]->symbol(), "CHRNA1" );
is( $avs[ 1 ]->description(), "AV2-text" );
is( $avs[ 1 ]->aa_ori(), "VAL" );
is( $avs[ 1 ]->aa_mut(), "MET" );
is( $avs[ 1 ]->position(), "156" );
is( $avs[ 1 ]->additional_mutations(), "" );


is( $avs[ 2 ]->number(), ".0003" );
is( $avs[ 2 ]->title(), "MYASTHENIC SYNDROME, SLOW-CHANNEL CONGENITAL" );
is( $avs[ 2 ]->symbol(), "CHRNE" );
is( $avs[ 2 ]->description(), "AV2-text a\nAV2-text b" );
is( $avs[ 2 ]->aa_ori(), "ARG" );
is( $avs[ 2 ]->aa_mut(), "LEU" );
is( $avs[ 2 ]->position(), "147" );
is( $avs[ 2 ]->additional_mutations(), "" );


is( $avs[ 3 ]->number(), ".0004" );
is( $avs[ 3 ]->title(), "MYASTHENIC SYNDROME, SLOW-CHANNEL CONGENITAL" );
is( $avs[ 3 ]->symbol(), "CHRNE" );
is( $avs[ 3 ]->description(), "Sieb et al. (2000) found that a brother and sister with congenital\nmyasthenic syndrome (601462) were compound heterozygotes for a deletion\nof 911T and a splicing mutation (IVS4+1G-A; 100725.0007)." );
is( $avs[ 3 ]->aa_ori(), "" );
is( $avs[ 3 ]->aa_mut(), "" );
is( $avs[ 3 ]->position(), "" );
is( $avs[ 3 ]->additional_mutations(), "1-BP DEL, 911T" );


is( $avs[ 4 ]->number(), ".0005" );
is( $avs[ 4 ]->title(), "MYASTHENIC SYNDROME, SLOW-CHANNEL CONGENITAL" );
is( $avs[ 4 ]->symbol(), "CHRNE" );
is( $avs[ 4 ]->description(), "See 100725.0006 and Sieb et al. (2000)." );
is( $avs[ 4 ]->aa_ori(), "" );
is( $avs[ 4 ]->aa_mut(), "" );
is( $avs[ 4 ]->position(), "" );
is( $avs[ 4 ]->additional_mutations(), "IVS4DS, G-A, +1" );



is( $avs[ 5 ]->number(), ".0006" );
is( $avs[ 5 ]->title(), "MYASTHENIC SYNDROME, SLOW-CHANNEL CONGENITAL" );
is( $avs[ 5 ]->symbol(), "CHRNE" );
is( $avs[ 5 ]->description(), "AV6-text" );
is( $avs[ 5 ]->aa_ori(), "" );
is( $avs[ 5 ]->aa_mut(), "" );
is( $avs[ 5 ]->position(), "" );
is( $avs[ 5 ]->additional_mutations(), "1-BP DEL, 1030C" );





my $omim_entry2 = $omim_parser->next_phenotype();


isa_ok( $omim_entry2, "Bio::Phenotype::OMIM::OMIMentry" );

is( $omim_entry2->MIM_number(), "100501" );
is( $omim_entry2->title(), "#100501 second entry" );
is( $omim_entry2->alternative_titles_and_symbols(), ";;title1;;\ntitle2;;\ntitle3" );
is( $omim_entry2->more_than_two_genes(), 1 );
is( $omim_entry2->is_separate(), 0 );
is( $omim_entry2->description(), undef); # "DESCRIPTION1\nDESCRIPTION2" );
is( $omim_entry2->mapping_method(), "M method 2" );
is( $omim_entry2->gene_status(), "C" );
is( $omim_entry2->comment(), "comment2" );
is( $omim_entry2->edited(), undef); # "ed1\ned2\ned3" );
is( $omim_entry2->created(), undef); # "cd1\ncd2\ncd3" );
is( $omim_entry2->contributors(), undef); # "cn1\ncn2\ncn3" );
is( $omim_entry2->additional_references(), "sa" );

my $cs = $omim_entry2->clinical_symptoms();
is( ref($cs), 'HASH' );
is( $omim_entry2->species()->binomial(), "Homo sapiens" );


$mini_mim   = $omim_entry2->miniMIM();

isa_ok( $mini_mim, "Bio::Phenotype::OMIM::MiniMIMentry" );
is( $mini_mim->description(), "Mini MIM text" );
is( $mini_mim->created(), "Mini MIM - cd" );
is( $mini_mim->contributors(), "Mini MIM - cn" );
is( $mini_mim->edited(), "Mini MIM - ed" );


@corrs      = $omim_entry2->each_Correlate();

is( $corrs[ 0 ]->name(), "mousecorrelate2" );
is( $corrs[ 0 ]->type(), "OMIM mouse correlate" );
is( $corrs[ 0 ]->species()->binomial(), "Mus musculus" );


@cps        = $omim_entry2->each_CytoPosition();

is( $cps[ 0 ]->value(), "1pter-p36.15" );


@gss        = $omim_entry2->each_gene_symbol();

is( $gss[ 0 ], "gene-symbol2" );


@refs       = $omim_entry2->each_Reference();

is( $refs[ 0 ]->authors(), "Author11, A. A.; Author12, A. A." );
is( $refs[ 0 ]->title(), "Title 1." );
is( $refs[ 0 ]->location(), "Am. J. Med. Genet1. 11 11-111 \(1981\)" );

is( $refs[ 1 ]->authors(), "Author21, A. A.; Author22, A. A." );
is( $refs[ 1 ]->title(), "Title 2." );
is( $refs[ 1 ]->location(), "Am. J. Med. Genet2. 12 22-222 \(1982\)" );

is( $refs[ 2 ]->authors(), "Author31, A. A.; Author32, A. A." );
is( $refs[ 2 ]->title(), "Title 3." );
is( $refs[ 2 ]->location(), "Am. J. Med. Genet3. 13 33-333 \(1983\)" );

is( $refs[ 3 ]->authors(), "" );
is( $refs[ 3 ]->title(), "other reference undef format" );
is( $refs[ 3 ]->location(), "" );



@avs        = $omim_entry2->each_AllelicVariant();

is( $avs[ 0 ]->number(), ".0001" );
is( $avs[ 0 ]->title(), "ALCOHOL INTOLERANCE, ACUTE" );
is( $avs[ 0 ]->symbol(), "ALDH2" );
is( $avs[ 0 ]->description(), "AV1-text" );
is( $avs[ 0 ]->aa_ori(), "GLU" );
is( $avs[ 0 ]->aa_mut(), "LYS" );
is( $avs[ 0 ]->position(), "487" );
is( $avs[ 0 ]->additional_mutations(), "" );


is( $avs[ 1 ]->number(), ".0002" );
is( $avs[ 1 ]->title(), "MYASTHENIC SYNDROME, SLOW-CHANNEL CONGENITAL" );
is( $avs[ 1 ]->symbol(), "CHRNA1" );
is( $avs[ 1 ]->description(), "AV2-text" );
is( $avs[ 1 ]->aa_ori(), "VAL" );
is( $avs[ 1 ]->aa_mut(), "MET" );
is( $avs[ 1 ]->position(), "156" );
is( $avs[ 1 ]->additional_mutations(), "" );


is( $avs[ 2 ]->number(), ".0003" );
is( $avs[ 2 ]->title(), "MYASTHENIC SYNDROME, SLOW-CHANNEL CONGENITAL" );
is( $avs[ 2 ]->symbol(), "CHRNE" );
is( $avs[ 2 ]->description(), "AV2-text a\nAV2-text b" );
is( $avs[ 2 ]->aa_ori(), "ARG" );
is( $avs[ 2 ]->aa_mut(), "LEU" );
is( $avs[ 2 ]->position(), "147" );
is( $avs[ 2 ]->additional_mutations(), "" );


is( $avs[ 3 ]->number(), ".0004" );
is( $avs[ 3 ]->title(), "MYASTHENIC SYNDROME, SLOW-CHANNEL CONGENITAL" );
is( $avs[ 3 ]->symbol(), "CHRNE" );
is( $avs[ 3 ]->description(), "Sieb et al. (2000) found that a brother and sister with congenital\nmyasthenic syndrome (601462) were compound heterozygotes for a deletion\nof 911T and a splicing mutation (IVS4+1G-A; 100725.0007)." );
is( $avs[ 3 ]->aa_ori(), "" );
is( $avs[ 3 ]->aa_mut(), "" );
is( $avs[ 3 ]->position(), "" );
is( $avs[ 3 ]->additional_mutations(), "1-BP DEL, 911T" );


is( $avs[ 4 ]->number(), ".0005" );
is( $avs[ 4 ]->title(), "MYASTHENIC SYNDROME, SLOW-CHANNEL CONGENITAL" );
is( $avs[ 4 ]->symbol(), "CHRNE" );
is( $avs[ 4 ]->description(), "See 100725.0006 and Sieb et al. (2000)." );
is( $avs[ 4 ]->aa_ori(), "" );
is( $avs[ 4 ]->aa_mut(), "" );
is( $avs[ 4 ]->position(), "" );
is( $avs[ 4 ]->additional_mutations(), "IVS4DS, G-A, +1" );



is( $avs[ 5 ]->number(), ".0006" );
is( $avs[ 5 ]->title(), "MYASTHENIC SYNDROME, SLOW-CHANNEL CONGENITAL" );
is( $avs[ 5 ]->symbol(), "CHRNE" );
is( $avs[ 5 ]->description(), "AV6-text" );
is( $avs[ 5 ]->aa_ori(), "" );
is( $avs[ 5 ]->aa_mut(), "" );
is( $avs[ 5 ]->position(), "" );
is( $avs[ 5 ]->additional_mutations(), "1-BP DEL, 1030C" );


# catch missing linebreak
throws_ok { my $omim_parser = Bio::Phenotype::OMIM::OMIMparser->new(
    -genemap  => test_input_file('omim_genemap_test_linebreak'),
    -omimtext => test_input_file('omim_text_test'));
} qr/linebreak/, 'missing linebreak caught';