Supply TEMPLATE and SUFFIX for temporary query sequence files.
[bioperl-run.git] / t / Newbler.t
blobb5b04f970cbbe89a3ef22f9aa04ccba9aea10aad
1 use strict;
3 BEGIN {
4     use Bio::Root::Test;
5     use File::Basename;
6     test_begin(-tests => 98,
7                -requires_modules => [qw(IPC::Run Bio::Tools::Run::Newbler)]);
8     use_ok('Bio::SeqIO');
11 my $assembler;
12 ok($assembler = Bio::Tools::Run::Newbler->new());
13 isa_ok($assembler, 'Bio::Tools::Run::Newbler');
15 ok($assembler->program_name('aaa'));
16 is($assembler->program_name, 'aaa');
18 ok($assembler->program_dir('/dir'));
19 is($assembler->program_dir, '/dir');
21 my @params = @Bio::Tools::Run::Newbler::program_params;
22 for my $param (@params) {
23   ok($assembler->$param(321));
24   is($assembler->$param(), 321);
27 my @switches = @Bio::Tools::Run::Newbler::program_switches;
28 for my $switch (@switches) {
29   ok($assembler->$switch(1));
30   is($assembler->$switch(), 1);
33 # Test that weird types of input will make it to the assembler
34 my $fasta_file = test_input_file('sample_dataset_1.fa');
35 my $input_file = $fasta_file;
36 my $input_dir  = dirname($fasta_file);
37 my $mid_prefix = 'mi2d@';
38 my $combo_file = $mid_prefix.$input_file;
39 my $combo_dir  = $mid_prefix.$input_dir;
40 ok($assembler->_check_sequence_input($input_file));
41 ok($assembler->_check_sequence_input($input_dir));
42 ok($assembler->_check_sequence_input($combo_file));
43 ok($assembler->_check_sequence_input($combo_dir));
45 # Test the Newbler assembler program itself
46 my $program_name = $Bio::Tools::Run::Newbler::program_name;
47 ok($assembler->program_name($program_name));
48 SKIP: {
49     test_skip(-requires_executable => $assembler,
50               -tests => 46);
52    # Input data
53    my $result_file = 'results.ace';
54    my $qual_file  = test_input_file('sample_dataset_1.qual');
55    my $io = Bio::SeqIO->new( -file => $fasta_file, -format => 'fasta' );
56    my @seq_arr;
57    while (my $seq = $io->next_seq) {
58       push @seq_arr, $seq;
59    }
60    $io = Bio::SeqIO->new( -file => $qual_file, -format => 'qual' );
61    my @qual_arr;
62    while (my $qual = $io->next_seq) {
63       push @qual_arr, $qual;
64    }
66    my $asm;
67    ok($assembler = Bio::Tools::Run::Newbler->new());
69    # Try FASTA or sequence object input
70    ok($asm = $assembler->run($fasta_file));
71    isa_ok($asm, 'Bio::Assembly::ScaffoldI');
72    is($asm->get_nof_singlets, 0);
73    is($asm->get_nof_contigs, 2);
75    ok($asm = $assembler->run(\@seq_arr));
76    isa_ok($asm, 'Bio::Assembly::ScaffoldI');
77    is($asm->get_nof_singlets, 0);
78    is($asm->get_nof_contigs, 2);
80    # Try optional quality score input as a QUAL file or bioperl objects
81    ok($asm = $assembler->run($fasta_file, $qual_file));
82    isa_ok($asm, 'Bio::Assembly::ScaffoldI');
83    is($asm->get_nof_singlets, 0);
84    is($asm->get_nof_contigs, 2);
86    ok($asm = $assembler->run(\@seq_arr, \@qual_arr));
87    isa_ok($asm, 'Bio::Assembly::ScaffoldI');
88    is($asm->get_nof_singlets, 0);
89    is($asm->get_nof_contigs, 2);
91    # Try the different output types
92    ok($assembler->out_type($result_file));
93    ok($asm = $assembler->run(\@seq_arr));
94    ok($asm eq $result_file);
95    is((-f $asm), 1);
96    unlink $result_file;
98    ok($assembler->out_type('Bio::Assembly::IO'));
99    ok($asm = $assembler->run(\@seq_arr));
100    isa_ok($asm, 'Bio::Assembly::IO');
101    is($asm->{'variant'}, '454', 'ACE 454 variant');
102    ok($asm->next_assembly);
104    ok($assembler->out_type('Bio::Assembly::ScaffoldI'));
105    ok($asm = $assembler->run(\@seq_arr));
106    isa_ok($asm, 'Bio::Assembly::ScaffoldI');
107    is($asm->get_nof_singlets, 0);
108    is($asm->get_nof_contigs, 2);
110    # Try some Newbler specific parameters
111    ok($assembler->expected_depth(2.1));
112    ok($asm = $assembler->run(\@seq_arr));
113    is($asm->get_nof_singlets, 0);
114    is($asm->get_nof_contigs, 2);
116    ok($assembler->min_ovl_length(1000));
117    ok($asm = $assembler->run(\@seq_arr));
118    is($asm->get_nof_singlets, 0);
119    # We really expect 0 contigs... must be a bug in Newbler! 
120    #is($asm->get_nof_contigs, 0);
121    is($asm->get_nof_contigs, 2);
123    ok($assembler->min_ovl_identity(100));
124    ok($assembler->min_ovl_length(1));
125    ok($asm = $assembler->run(\@seq_arr));
126    is($asm->get_nof_singlets, 0);
127    is($asm->get_nof_contigs, 0);
129    # Function alias
130    ok($assembler->minimum_overlap_similarity(100));
131    ok($assembler->minimum_overlap_length(20));