]> git.donarmstrong.com Git - biopieces.git/commitdiff
worked on unit tests for sam.rb
authormartinahansen <martinahansen@74ccb610-7750-0410-82ae-013aeee3265d>
Tue, 23 Aug 2011 14:29:01 +0000 (14:29 +0000)
committermartinahansen <martinahansen@74ccb610-7750-0410-82ae-013aeee3265d>
Tue, 23 Aug 2011 14:29:01 +0000 (14:29 +0000)
git-svn-id: http://biopieces.googlecode.com/svn/trunk@1493 74ccb610-7750-0410-82ae-013aeee3265d

code_ruby/lib/maasha/sam.rb
code_ruby/test/maasha/test_sam.rb

index 3ffc56d361c8c92e474c23a23d0699df0421bcd5..f29e6219fb72cf12ddbfbdeeeb3b1b4f1424218c 100644 (file)
@@ -248,19 +248,17 @@ class Sam < Filesys
     seq   = fields[9]
     qual  = fields[10]
 
-    raise SamError, "Bad qname: #{qname}" unless qname =~ /^[!-?A-~]{1,255}$/
-    raise SamError, "Bad flag: #{flag}"   unless (0 .. 2**16 - 1).include? flag
-    raise SamError, "Bad rname: #{rname}" unless rname =~ /^(\*|[!-()+-<>-~][!-~]*)$/
-    raise SamError, "Bad pos: #{pos}"     unless (0 .. 2**29 - 1).include? pos
-    raise SamError, "Bad mapq: #{mapq}"   unless (0 .. 2**8 - 1).include? mapq
-    raise SamError, "Bad cigar: #{cigar}" unless cigar =~ /^(\*|([0-9]+[MIDNSHPX=])+)$/
-    raise SamError, "Bad rnext: #{rnext}" unless rnext =~ /^(\*|=|[!-()+-<>-~][!-~]*)$/
-    raise SamError, "Bad pnext: #{pnext}" unless (0 .. 2**29 - 1).include? pnext
-    raise SamError, "Bad tlen: #{tlen}"   unless (-2**29 + 1 .. 2**29 - 1).include? tlen
-    raise SamError, "Bad seq: #{seq}"     unless seq  =~ /^(\*|[A-Za-z=.]+)$/
-    raise SamError, "Bad qual: #{qual}"   unless qual =~ /^[!-~]+$/
-
+    check_qname(qname)
+    check_flag(flag)
     check_rname(rname)
+    check_pos(pos)
+    check_mapq(mapq)
+    check_cigar(cigar)
+    check_rnext(rnext)
+    check_pnext(pnext)
+    check_tlen(tlen)
+    check_seq(seq)
+    check_qual(qual)
 
     entry = {}
     entry[:QNAME] = qname
@@ -272,16 +270,28 @@ class Sam < Filesys
     entry[:RNEXT] = rnext
     entry[:PNEXT] = pnext
     entry[:TLEN]  = tlen
-    entry[:SEQ]   = seq
+    entry[:SEQ]   = Seq.new(qname, seq)
     entry[:QUAL]  = qual
 
     entry
   end
 
+  # Method to check qname.
+  def check_qname(qname)
+    raise SamError, "Bad qname: #{qname}" unless qname =~ /^[!-?A-~]{1,255}$/
+  end
+
+  # Method to check flag.
+  def check_flag(flag)
+    raise SamError, "Bad flag: #{flag}" unless (0 .. 2**16 - 1).include? flag
+  end
+
   # Method to check if rname, when not '*' and
   # @SQ header lines are present, is located in
   # the header hash.
   def check_rname(rname)
+    raise SamError, "Bad rname: #{rname}" unless rname =~ /^(\*|[!-()+-<>-~][!-~]*)$/
+
     unless @header.empty? or rname == '*'
       unless @header[:SQ][:SN].has_key? rname.to_sym
         raise SamError, "rname not found in header hash: #{rname}"
@@ -289,16 +299,53 @@ class Sam < Filesys
     end
   end
 
+  # Method to check pos.
+  def check_pos(pos)
+    raise SamError, "Bad pos: #{pos}" unless (0 .. 2**29 - 1).include? pos
+  end
+
+  # Method to check mapq.
+  def check_mapq(mapq)
+    raise SamError, "Bad mapq: #{mapq}"   unless (0 .. 2**8 - 1).include? mapq
+  end
+
+  # Method to check cigar.
+  def check_cigar(cigar)
+    raise SamError, "Bad cigar: #{cigar}" unless cigar =~ /^(\*|([0-9]+[MIDNSHPX=])+)$/
+  end
+
   # Method to check if rnext, when not '*' or '='
   # and @SQ header lines are present, is located
   # in the header hash.
   def check_rnext(rnext)
+    raise SamError, "Bad rnext: #{rnext}" unless rnext =~ /^(\*|=|[!-()+-<>-~][!-~]*)$/
+
     unless @header.empty? or rnext == '*' or rnext == '='
       unless @header[:SQ][:SN].has_key? rnext.to_sym
         raise SamError, "rnext not found in header hash: #{rnext}"
       end
     end
   end
+
+  # Method to check pnext.
+  def check_pnext(pnext)
+    raise SamError, "Bad pnext: #{pnext}" unless (0 .. 2**29 - 1).include? pnext
+  end
+
+  # Method to check tlen.
+  def check_tlen(tlen)
+    raise SamError, "Bad tlen: #{tlen}"   unless (-2**29 + 1 .. 2**29 - 1).include? tlen
+  end
+
+  # Method to check seq.
+  def check_seq(seq)
+    raise SamError, "Bad seq: #{seq}"     unless seq  =~ /^(\*|[A-Za-z=.]+)$/
+  end
+
+  # Method to check qual.
+  def check_qual(qual)
+    raise SamError, "Bad qual: #{qual}"   unless qual =~ /^[!-~]+$/
+  end
 end
 
 
index 8642f64c31a92a142df57e61797d5d23848d20dc..6421ffbe14e49d9e9517b15ea853c245d13d5ae5 100755 (executable)
@@ -46,124 +46,119 @@ class SamTest < Test::Unit::TestCase
     @sam = Sam.new(StringIO.new(SAM_DATA))
   end
 
-#  def test_Sam_header_without_entry_returns_nil
-#    @sam.io = StringIO.new
-#    assert_nil(@sam.header)
-#  end
-
-  def test_Sam_header_parse_with_missing_version_number_raises
+  def test_Sam_new_with_missing_version_number_raises
     assert_raise(SamError) { Sam.new(StringIO.new("@HD")) }
   end
 
-  def test_Sam_header_parse_with_bad_version_number_raises
+  def test_Sam_new_with_bad_version_number_raises
     assert_raise(SamError) { Sam.new(StringIO.new("@HD\tXN:1.3")) }
   end
 
-  def test_Sam_header_parse_with_ok_version_number_returns_correctly
+  def test_Sam_new_with_ok_version_number_returns_correctly
     sam = Sam.new(StringIO.new("@HD\tVN:1.3"))
     assert_equal(1.3, sam.header[:HD][:VN])
   end
 
-  def test_Sam_header_parse_with_bad_sort_order_raises
+  def test_Sam_new_with_bad_sort_order_raises
     assert_raise(SamError) { Sam.new(StringIO.new("@HD\tVN:1.3\tSO:fish")) }
   end
 
-  def test_Sam_header_parse_with_ok_sort_order_returns_correctly
+  def test_Sam_new_with_ok_sort_order_returns_correctly
     %w{unknown unsorted queryname coordinate}.each do |order|
       sam = Sam.new(StringIO.new("@HD\tVN:1.3\tSO:#{order}"))
       assert_equal(order, sam.header[:HD][:SO])
     end
   end
 
-  def test_Sam_header_parse_with_missing_sequence_name_raises
+  def test_Sam_new_with_missing_sequence_name_raises
     assert_raise(SamError) { Sam.new(StringIO.new("@SQ")) }
   end
 
-  def test_Sam_header_parse_with_bad_sequence_name_raises
+  def test_Sam_new_with_bad_sequence_name_raises
     assert_raise(SamError) { Sam.new(StringIO.new("@SQ\tSN:")) }
   end
 
-  def test_Sam_header_parse_with_ok_sequence_name_returns_correctly
+  def test_Sam_new_with_ok_sequence_name_returns_correctly
     sam = Sam.new(StringIO.new("@SQ\tSN:ref\tLN:45"))
     assert_equal({:LN=>45}, sam.header[:SQ][:SN][:ref])
   end
 
-  def test_Sam_header_parse_with_duplicate_sequence_name_raises
+  def test_Sam_new_with_duplicate_sequence_name_raises
     assert_raise(SamError) { Sam.new(StringIO.new("@SQ\tSN:ref\n@SQ\tSN:ref")) }
   end
 
-  def test_Sam_header_parse_with_missing_sequence_length_raises
+  def test_Sam_new_with_missing_sequence_length_raises
     assert_raise(SamError) { Sam.new(StringIO.new("@SQ\tSN:ref")) }
   end
 
-  def test_Sam_header_parse_with_bad_sequence_length_raises
+  def test_Sam_new_with_bad_sequence_length_raises
     assert_raise(SamError) { Sam.new(StringIO.new("@SQ\tSN:scaffold17_1_MH0083\tLN:x")) }
   end
 
-  def test_Sam_header_parse_with_ok_sequence_length_returns_correctly
+  def test_Sam_new_with_ok_sequence_length_returns_correctly
     sam = Sam.new(StringIO.new("@SQ\tSN:scaffold17_1_MH0083\tLN:995"))
     assert_equal(995, sam.header[:SQ][:SN][:scaffold17_1_MH0083][:LN])
   end
 
-  def test_Sam_header_parse_with_full_SQ_dont_raise
+  def test_Sam_new_with_full_SQ_dont_raise
     sam = Sam.new(StringIO.new("@SQ\tSN:ref\tLN:45\tAS:ident\tM5:87e6b2aedf51b1f9c89becfab9267f41\tSP:E.coli\tUR:http://www.biopieces.org"))
     assert_nothing_raised { sam.header }
   end
 
-  def test_Sam_header_parse_with_bad_read_group_identifier_raises
+  def test_Sam_new_with_bad_read_group_identifier_raises
     assert_raise(SamError) { Sam.new(StringIO.new("@RG\tID:")) }
   end
 
-  def test_Sam_header_parse_with_missing_read_group_identifier_raises
+  def test_Sam_new_with_missing_read_group_identifier_raises
     assert_raise(SamError) { Sam.new(StringIO.new("@RG")) }
   end
 
-  def test_Sam_header_parse_with_duplicate_read_group_identifier_raises
+  def test_Sam_new_with_duplicate_read_group_identifier_raises
     assert_raise(SamError) { Sam.new(StringIO.new("@RG\tID:123\n@RG\tID:123")) }
   end
 
-  def test_Sam_header_parse_with_ok_read_group_identifier_dont_raise
+  def test_Sam_new_with_ok_read_group_identifier_dont_raise
     sam = Sam.new(StringIO.new("@RG\tID:123\n@RG\tID:124"))
     assert_nothing_raised { sam.header }
   end
 
-  def test_Sam_header_parse_with_bad_flow_order_raises
+  def test_Sam_new_with_bad_flow_order_raises
     assert_raise(SamError) { Sam.new(StringIO.new("@RG\tID:123\tFO:3")) }
   end
 
-  def test_Sam_header_parse_with_ok_flow_order_dont_raise
+  def test_Sam_new_with_ok_flow_order_dont_raise
     sam = Sam.new(StringIO.new("@RG\tID:123\tFO:*"))
     assert_nothing_raised { sam.header }
     sam = Sam.new(StringIO.new("@RG\tID:123\tFO:ACMGRSVTWYHKDBN"))
     assert_nothing_raised { sam.header }
   end
 
-  def test_Sam_header_parse_with_bad_platform_raises
+  def test_Sam_new_with_bad_platform_raises
     assert_raise(SamError) { Sam.new(StringIO.new("@RG\tID:123\tPL:maersk")) }
   end
 
-  def test_Sam_header_parse_with_ok_platform_dont_raise
+  def test_Sam_new_with_ok_platform_dont_raise
     sam = Sam.new(StringIO.new("@RG\tID:123\tPL:ILLUMINA"))
     assert_nothing_raised { sam.header }
   end
 
-  def test_Sam_header_parse_with_bad_program_identifier_raises
+  def test_Sam_new_with_bad_program_identifier_raises
     assert_raise(SamError) { Sam.new(StringIO.new("@PG\tID:")) }
   end
 
-  def test_Sam_header_parse_with_missing_program_identifier_raises
+  def test_Sam_new_with_missing_program_identifier_raises
     assert_raise(SamError) { Sam.new(StringIO.new("@PG")) }
   end
 
-  def test_Sam_header_parse_with_duplicate_program_identifier_raises
+  def test_Sam_new_with_duplicate_program_identifier_raises
     assert_raise(SamError) { Sam.new(StringIO.new("@PG\tID:123\n@PG\tID:123")) }
   end
 
-  def test_Sam_header_parse_with_bad_comment_raises
+  def test_Sam_new_with_bad_comment_raises
     assert_raise(SamError) { Sam.new(StringIO.new("@CO\t")) }
   end 
 
-  def test_Sam_header_parse_with_ok_comment_dont_raise
+  def test_Sam_new_with_ok_comment_dont_raise
     sam = Sam.new(StringIO.new("@CO\tfubar"))
     assert_nothing_raised { sam.header }
   end
@@ -347,5 +342,21 @@ class SamTest < Test::Unit::TestCase
     sam = Sam.new(StringIO.new("@SQ\tSN:ref\tLN:45\n*\t*\t*\t*\t*\t*\t*\t*\t\*\t*\t*\n"))
     assert_nothing_raised { sam.each }
   end
+
+  def test_Sam_each_with_rnext_missing_from_header_raises
+    sam = Sam.new(StringIO.new("@SQ\tSN:ref\tLN:45\n*\t*\t*\t*\t*\t*\tMIS\t*\t\*\t*\t*\n"))
+    assert_raise(SamError) { sam.each }
+  end
+
+  def test_Sam_each_with_rnext_present_in_header_dont_raise
+    sam = Sam.new(StringIO.new("@SQ\tSN:ref\tLN:45\n*\t*\t*\t*\t*\t*\t*\t*\t\*\t*\t*\n"))
+    assert_nothing_raised { sam.each }
+
+    sam = Sam.new(StringIO.new("@SQ\tSN:ref\tLN:45\n*\t*\t*\t*\t*\t*\t=\t*\t\*\t*\t*\n"))
+    assert_nothing_raised { sam.each }
+
+    sam = Sam.new(StringIO.new("@SQ\tSN:ref\tLN:45\n*\t*\t*\t*\t*\t*\tref\t*\t\*\t*\t*\n"))
+    assert_nothing_raised { sam.each }
+  end
 end