-
Notifications
You must be signed in to change notification settings - Fork 6
/
parser_spec.rb
84 lines (70 loc) · 2.61 KB
/
parser_spec.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
require 'helper'
describe Bio::Faster do
describe "#each_record" do
it "should read a FastQ file returning an array with sequence data" do
Bio::Faster.new(TEST_DATA+"/formats/illumina_full_range_as_illumina.fastq").each_record do |seq|
seq.class.should == Array
end
end
it "should handle correctly Phred64 qualities (Solexa)" do
file = TEST_DATA+"/formats/misc_rna_as_solexa.fastq"
bioruby_data = []
Bio::FlatFile.open(File.open(file)).each_entry do |seq|
seq.format = "fastq-solexa"
bioruby_data << [seq.entry_id,seq.seq,seq.qualities]
end
faster_data = []
Bio::Faster.new(file).each_record(:quality => :solexa) do |seq|
seq[0] = seq[0].split(" ").first
faster_data << seq
end
faster_data.should == bioruby_data
end
it "should read different FastQ formats and convert quality scores" do
files = Dir.glob(TEST_DATA+"/formats/*.fastq")
files.each do |file|
bioruby_data = []
Bio::FlatFile.open(Bio::Fastq,File.open(file)).each_entry do |seq|
bioruby_data << [seq.entry_id,seq.seq,seq.qualities]
end
faster_data = []
Bio::Faster.new(file).each_record do |seq|
seq[0] = seq[0].split(" ").first
faster_data << seq
end
faster_data.should == bioruby_data
end
end
it "should read different FastQ formats without converting quality scores" do
files = Dir.glob(TEST_DATA+"/formats/*.fastq")
files.each do |file|
bioruby_data = []
Bio::FlatFile.open(Bio::Fastq,File.open(file)).each_entry do |seq|
bioruby_data << [seq.entry_id,seq.seq,seq.quality_string]
end
faster_data = []
Bio::Faster.new(file).each_record(:quality => :raw) do |seq|
seq[0] = seq[0].split(" ").first
faster_data << seq
end
faster_data.should == bioruby_data
end
end
it "can read from the standard input" do
require 'digest/md5'
file = TEST_DATA+"/formats/illumina_full_range_as_illumina.fastq"
TEST = File.join(File.dirname(File.dirname(__FILE__)),"test")
system("cat "+file+" | ruby "+TEST+"/test_stdin.rb > stdin_test.out")
out = File.open("expected.out","w")
Bio::Faster.new(file).each_record do |seq|
out.write seq.to_s+"\n"
end
out.close()
md5_stdin = Digest::MD5.file("stdin_test.out")
md5_expected = Digest::MD5.file("expected.out")
md5_stdin.should == md5_expected
FileUtils.rm "stdin_test.out"
FileUtils.rm "expected.out"
end
end
end