UNPKG

@gmod/jbrowse

Version:

JBrowse - client-side genome browser

308 lines (258 loc) 7.45 kB
use strict; use warnings; use lib 'tests/perl_tests/lib'; use JBlibs; use Test::More; use File::Spec::Functions 'catfile'; use File::Temp; use Capture::Tiny 'capture'; use FileSlurping 'slurp_tree'; my $tempdir = File::Temp->newdir; ## check behavior for missing ref seqs my ( $stdout, $stderr ) = capture { system $^X, 'bin/prepare-refseqs.pl', ( '--conf' => 'sample_data/raw/yeast_genbank.json', '--refs' => 'DOES NOT EXIST', '--out' => $tempdir, ); }; ok( ! $?, 'script succeeded for nonexistent ref' ); like( $stderr, qr/DOES NOT EXIST.+not found/i, 'warning message looks right' ); ## check basic formatting of volvox sequence $tempdir = File::Temp->newdir; system $^X, 'bin/prepare-refseqs.pl', ( #'--refs' => 'ctgA', '--fasta' => 'sample_data/raw/volvox/volvox.fa', '--out' => $tempdir, '--nohash', '--trackConfig' => '{ "foo": "bar" }' ); my $output = slurp_tree( $tempdir ); is_deeply( $output, slurp_tree('tests/data/volvox_formatted_refseqs'), 'got the right volvox formatted sequence', ) # or diag explain $output ; ## check basic formatting with --noSort $tempdir = File::Temp->newdir; system $^X, 'bin/prepare-refseqs.pl', ( '--fasta' => 'sample_data/raw/random_contigs.fa', '--out' => $tempdir, '--noSort', ); $output = slurp_tree( $tempdir ); is_deeply( $output, slurp_tree('tests/data/random_contigs_formatted_refseqs'), 'got the right random contigs formatted sequence', ) # or diag explain $output ; ## check genbank formatting $tempdir = File::Temp->newdir; system $^X, 'bin/prepare-refseqs.pl', ( '--refs' => 'NC_001133', '--conf' => 'sample_data/raw/yeast_genbank.json', '--out' => $tempdir ); ok( !$?, 'yeast genbank formatting ran OK' ); my @chunks = glob("$tempdir/seq/010/83b/05/NC_001133-*.txt"); is( scalar @chunks, 12, 'see 12 uncompressed seq chunks' ) or diag explain \@chunks; #diag explain [glob("$tempdir/seq/*/*/*/*.txt")]; ## check --reftypes support $tempdir = File::Temp->newdir; system $^X, 'bin/prepare-refseqs.pl', ( '--reftypes' => 'chromosome,nonexistent', '--conf' => 'sample_data/raw/yeast_genbank.json', '--out' => $tempdir ); ok( !$?, 'yeast genbank formatting ran OK with --reftypes' ); @chunks = glob("$tempdir/seq/010/83b/05/NC_001133-*.txt"); is( scalar @chunks, 12, 'see 12 uncompressed seq chunks' ) or diag explain \@chunks; #diag explain [glob("$tempdir/seq/*/*/*/*.txt")]; ## check compressed formatting $tempdir = File::Temp->newdir; system $^X, 'bin/prepare-refseqs.pl', ( '--refs' => 'NC_001133', '--conf' => 'sample_data/raw/yeast_genbank.json', '--out' => $tempdir, '--compress', ); ok( !$?, 'yeast genbank formatting ran OK' ); @chunks = glob("$tempdir/seq/*/*/*/NC_001133-*.txtz"); is( scalar @chunks, 3, 'see 3 COMPRESSED seq chunks' ); #diag explain \@chunks; ## check formatting from gff $tempdir = File::Temp->newdir; system $^X, 'bin/prepare-refseqs.pl', ( '--gff' => 'tests/data/embedded_sequence.gff3', '--out' => $tempdir, ); $output = slurp_tree( $tempdir ); is_deeply( $output->{"seq/refSeqs.json"}, [ { end => 10000, length => 10000, name => "Group1.36", seqChunkSize => 20000, start => 0, } ]); ## check formatting from --sizes $tempdir = File::Temp->newdir; system $^X, 'bin/prepare-refseqs.pl', ( '--sizes' => 'tests/data/volvox.sizes', '--out' => $tempdir, ); $output = slurp_tree( $tempdir ); is_deeply( $output->{"seq/refSeqs.json"}, [ { 'end' => '50001', 'length' => '50001', 'name' => 'ctgA', 'start' => 0 }, { 'end' => '6079', 'length' => '6079', 'name' => 'ctgB', 'start' => 0 } ]) or diag explain $output; ## check formatting from --gff-sizes $tempdir = File::Temp->newdir; system $^X, 'bin/prepare-refseqs.pl', ( '--gff-sizes' => 'tests/data/tomato_sequence_regions.gff3', '--out' => $tempdir, ); $output = slurp_tree( $tempdir ); is_deeply( $output->{"seq/refSeqs.json"}, [ { 'end' => 20852292, 'length' => 20852292, 'name' => 'SL3.0ch00', 'start' => 0 }, { 'end' => 98455869, 'length' => 98455869, 'name' => 'SL3.0ch01', 'start' => 0 }, { 'end' => 55977580, 'length' => 55977580, 'name' => 'SL3.0ch02', 'start' => 0 }, { 'end' => 72290146, 'length' => 72290146, 'name' => 'SL3.0ch03', 'start' => 0 }, { 'end' => 66557038, 'length' => 66557038, 'name' => 'SL3.0ch04', 'start' => 0 }, { 'end' => 66723567, 'length' => 66723567, 'name' => 'SL3.0ch05', 'start' => 0 }, { 'end' => 49794276, 'length' => 49794276, 'name' => 'SL3.0ch06', 'start' => 0 }, { 'end' => 68175699, 'length' => 68175699, 'name' => 'SL3.0ch07', 'start' => 0 }, { 'end' => 65987440, 'length' => 65987440, 'name' => 'SL3.0ch08', 'start' => 0 }, { 'end' => 72906345, 'length' => 72906345, 'name' => 'SL3.0ch09', 'start' => 0 }, { 'end' => 65633393, 'length' => 65633393, 'name' => 'SL3.0ch10', 'start' => 0 }, { 'end' => 56597135, 'length' => 56597135, 'name' => 'SL3.0ch11', 'start' => 0 }, { 'end' => 68126176, 'length' => 68126176, 'name' => 'SL3.0ch12', 'start' => 0 } ]) or diag explain $output; ## test formatting from a Bio::DB::SeqFeature::Store with a ## biodb-to-json.pl conf file $tempdir = File::Temp->newdir(); diag $tempdir; ($stdout, $stderr) = capture { local $ENV{PATH} = "extlib/bin:$ENV{PATH}"; local $ENV{PERL5LIB} = join ':', @INC; system 'bp_seqfeature_load.pl', ( '--adaptor' => 'DBI::SQLite', '--dsn' => "$tempdir/sqliteDB", '--create', 'sample_data/raw/volvox/volvox.gff3', 'sample_data/raw/volvox/volvox.fa', ); }; unlike( $stderr, qr/error/i, 'no errors stderr from bp_seqfeature_load' ); is( $stdout, '', 'nothing on stdout from bp_seqfeature_load' ); { open my $conf, '>', "$tempdir/conf" or die; $conf->print( <<EOCONF ); } { "TRACK DEFAULTS" : { "autocomplete" : "all", "class" : "feature" }, "db_args" : { "-adaptor" : "DBI::SQLite", "-dsn" : "$tempdir/sqliteDB" }, "description" : "Sequence Test Database", "db_adaptor" : "Bio::DB::SeqFeature::Store" } EOCONF { open my $conf, '>', "$tempdir/conf" or die; $conf->print( <<EOCONF ); } { system $^X, 'bin/prepare-refseqs.pl', ( '--conf' => "$tempdir/conf", '--out' => "$tempdir/out", '--refs' => 'ctgA,ctgB', '--nohash' ); $output = slurp_tree( "$tempdir/out" ); is_deeply( $output, slurp_tree('tests/data/volvox_formatted_refseqs'), 'got the right volvox formatted sequence with --nohash', );# or diag explain $output; } EOCONF done_testing;