3 # testing StandAloneBlastPlus.pm
11 test_begin(-tests => 73);
12 # -requires_modules => [qw( Bio::Tools::Run::BlastPlus)]);
15 use_ok( 'Bio::Tools::Run::StandAloneBlastPlus' );
16 use_ok( 'Bio::Tools::Run::WrapperBase' );
17 use_ok( 'Bio::Tools::Run::WrapperBase::CommandExts' );
21 ok my $bpfac = Bio::Tools::Run::BlastPlus->new(-command => 'makeblastdb'),
25 test_skip( -tests => 65,
26 -requires_executable => $bpfac);
27 diag('DB and mask make tests');
29 # testing using fasta files as input...
30 ok my $fac = Bio::Tools::Run::StandAloneBlastPlus->new(
31 -db_data => test_input_file('test-spa.fas'),
34 ok $fac->make_db, "test db made with fasta";
35 like $fac->db, qr/DB.{5}/, "temp db";
36 is ($fac->db_type, 'nucl', "right type");
39 ok $fac = Bio::Tools::Run::StandAloneBlastPlus->new(
41 -db_data => test_input_file('test-spa.fas'),
45 like($fac->program_version, qr/2\.\d+\.\d+/, 'program version');
46 like($fac->package_version, qr/2\.\d+\.\d+/, 'package version');
48 ok $fac->make_db, "named db made";
49 ok $fac->check_db, "check_db";
50 is $fac->db, 'test', "correct name";
51 is ref $fac->db_info, 'HASH', "dbinfo hash returned";
52 is $fac->db_type, 'nucl', "correct type";
55 -data => test_input_file('test-spa.fas'),
56 -masker => 'windowmasker'
57 ), "windowmasker mask made";
59 -data => test_input_file('test-spa.fas'),
60 -masker => 'dustmasker'
61 ), "dustmasker mask made";
64 $fac = Bio::Tools::Run::StandAloneBlastPlus->new(
65 -db_data => test_input_file('test-spa-p.fas'),
68 ok $fac->check_db('test'), "check_db with arg";
69 is $fac->db_info('test')->{_db_type}, 'nucl', "db_info with arg";
70 ok $fac->make_db, "protein db made";
71 is $fac->db_type, 'prot', "correct type";
72 ok $fac->make_mask(-data=>$fac->db, -masker=>'segmasker'), "segmasker mask made";
75 -masker => 'segmasker'
76 ), "segmasker mask made; blastdb as data";
77 $fac->_register_temp_for_cleanup('test');
80 ok $fac = Bio::Tools::Run::StandAloneBlastPlus->new(
81 -db_data => test_input_file('test-spa-p.fas'),
82 -mask_file => test_input_file('segmask_data.asn'),
85 ok $fac->make_db, "protein db made with pre-built mask";
86 is $fac->db_filter_algorithms->[0]{algorithm_name}, 'seg', "db_info records mask info";
89 ok $fac = Bio::Tools::Run::StandAloneBlastPlus->new(
90 -db_data => test_input_file('test-spa.fas'),
91 -masker => 'windowmasker',
92 -mask_data => test_input_file('test-spa.fas'),
95 $fac->no_throw_on_crash(1);
96 ok $fac->make_db, "mask built and db made on construction (windowmasker)";
99 ok $fac = Bio::Tools::Run::StandAloneBlastPlus->new(
100 -db_data => test_input_file('test-spa-p.fas'),
101 -masker => 'segmasker',
102 -mask_data => test_input_file('test-spa-p.fas'),
105 $fac->no_throw_on_crash(1);
106 ok $fac->make_db, "mask built and db made on construction (segmasker)";
109 ok $fac = Bio::Tools::Run::StandAloneBlastPlus->new(
110 -db_data => test_input_file('test-spa.fas'),
111 -masker => 'dustmasker',
112 -mask_data => test_input_file('test-spa.fas'),
115 $fac->no_throw_on_crash(1);
116 ok $fac->make_db, "mask built and db made on construction (dustmasker)";
119 # tests with Bio:: objects as input
120 ok my $sio = Bio::SeqIO->new(-file => test_input_file('test-spa.fas'));
121 ok my $aio = Bio::AlignIO->new(-file => test_input_file('test-spa-p.fas'));
123 ok $fac = Bio::Tools::Run::StandAloneBlastPlus->new(
128 ok $fac->make_db, "make db from Bio::SeqIO";
131 ok $fac = Bio::Tools::Run::StandAloneBlastPlus->new(
136 ok $fac->make_db, "make db from Bio::AlignIO";
139 $aio = Bio::AlignIO->new(-file => test_input_file('test-aln.msf'));
140 my @seqs = $aio->next_aln->each_seq;
141 ok $fac = Bio::Tools::Run::StandAloneBlastPlus->new(
146 ok $fac->make_db, 'make db from \@seqs';
148 $fac->_register_temp_for_cleanup( 'aiodb', 'siodb' );
153 mkdir "./a"; mkdir "./a/b";
154 ok $fac = Bio::Tools::Run::StandAloneBlastPlus->new(
157 -db_data => test_input_file('test-spa.fas'),
159 ), "dbdir : ./a/b; dbname : test; create";
160 ok $fac->make_db, "make db";
161 lives_ok { Bio::Tools::Run::StandAloneBlastPlus->new(
165 lives_ok { Bio::Tools::Run::StandAloneBlastPlus->new(
167 -db_name => "a/b/test"
169 lives_ok { Bio::Tools::Run::StandAloneBlastPlus->new(
170 -db_name => "a/b/test"
172 dies_ok { Bio::Tools::Run::StandAloneBlastPlus->new(
173 -db_name => "/a/b/test"
175 $fac->_register_temp_for_cleanup('a/b/test');
179 # exception tests here someday.
182 diag("run BLAST methods");
184 $fac = Bio::Tools::Run::StandAloneBlastPlus->new(
185 -db_data => test_input_file('test-spa.fas'),
189 ok my $result = $fac->run(-method => 'blastn',
190 -query => test_input_file('test-query.fas')
192 is $result->num_hits, 291, "default hit limit";
193 ok $result = $fac->blastn(-query => test_input_file('test-query.fas'),
194 -method_args => [ -num_alignments => 1000 ]
195 ), "return more alignments (arg spec)";
196 is $result->num_hits, 291, "got more hits";
199 my $ntseq = Bio::Seq->new(-seq => 'GACGATCCTTCGGTGAGCAAAGAAATTTTAGCAGAAGCTAAAAAGCTAAACGATGCTCAAGCACCAAAAG',
201 my $aaseq = $ntseq->translate;
203 ok $result = $fac->blastn( -query => $ntseq ), "run blastn with Bio::Seq query";
204 $fac->no_throw_on_crash(1);
205 ok $result = $fac->tblastn( -query => $aaseq ), "run tblastn";
206 is $result->num_hits, 299, "tblastn hits";
207 ok $result = $fac->tblastx( -query => $ntseq ), "run tblastx";
208 is $result->num_hits, 299, "tblastx hits";
211 ok $fac = Bio::Tools::Run::StandAloneBlastPlus->new(
212 -db_data => test_input_file('test-spa-p.fas'),
215 ok $result = $fac->blastp( -query => $aaseq ), "run blastp";
216 is $result->num_hits, 222, "blastp hits";
219 $sio = Bio::SeqIO->new(-file=>test_input_file('test-spa.fas'));
221 my $seq1 = $sio->next_seq;
222 my $seq2 = $sio->next_seq;
224 ok $result = $fac->bl2seq(-method => 'blastn',
227 ), "bl2seq (blastn)";
228 is $result->num_hits, 1, "got hit";
230 ok $result = $fac->bl2seq(-method => 'tblastx',
233 ), "bl2seq (tblastx)";
234 is $result->num_hits, 1, "got hit";
236 $seq2 = $seq2->translate(-frame => 1);
237 ok $result = $fac->bl2seq(-method => 'blastx',
240 ), "bl2seq (blastx)";
241 is $result->num_hits, 1, "got hit";
243 # There is no similarity between the sequences
244 # at these reading frames, so there should be no hits
245 my $seq1_frame0 = $seq1->translate;
246 ok $result = $fac->bl2seq(-method => 'blastp',
247 -query => $seq1_frame0,
249 ), "bl2seq (blastp)";
250 is $result->num_hits, 0, "no hit";
252 # There is similarity between the sequences
253 # at these reading frames, so there should be hits
254 $seq1 = $seq1->translate(-frame => 2);
255 ok $result = $fac->bl2seq(-method => 'blastp',
258 ), "bl2seq (blastp)";
259 is $result->num_hits, 1, "got hit";
261 # issue #12 (https://github.com/bioperl/bioperl-run/issues/12) : 4 tests
262 $sio = Bio::SeqIO->new(-file=>test_input_file('test-spa.fas'));
264 $seq1 = $sio->next_seq;
265 $seq2 = $sio->next_seq;
267 lives_ok { $fac->bl2seq(-method => 'tblastx',
270 -method_args => [ '-outfmt' => '"6 qseqid sseqid"' ]
271 ) } "bl2seq (tblastx) - multiple outfmt options";
273 lives_ok { $fac->bl2seq(-method => 'tblastx',
276 -outformat => '"6 qseqid sseqid"',
277 ) } "bl2seq (tblastx) - multiple outfmt options (use method arg)";
279 lives_ok { $fac->bl2seq(-method => 'tblastx',
282 -outformat => '6 qseqid sseqid',
283 ) } "bl2seq (tblastx) - multiple outfmt options (no explict quotes should also work)";
285 lives_ok { $fac->bl2seq(-method => 'tblastx',
289 ) } "bl2seq (tblastx) - multiple outfmt options (a single format number in quotes";