]> git.donarmstrong.com Git - biopieces.git/commitdiff
added sam.rb to ruby trunk
authormartinahansen <martinahansen@74ccb610-7750-0410-82ae-013aeee3265d>
Fri, 17 Jun 2011 13:48:04 +0000 (13:48 +0000)
committermartinahansen <martinahansen@74ccb610-7750-0410-82ae-013aeee3265d>
Fri, 17 Jun 2011 13:48:04 +0000 (13:48 +0000)
git-svn-id: http://biopieces.googlecode.com/svn/trunk@1480 74ccb610-7750-0410-82ae-013aeee3265d

code_ruby/test/maasha/test_sam.rb [new file with mode: 0755]

diff --git a/code_ruby/test/maasha/test_sam.rb b/code_ruby/test/maasha/test_sam.rb
new file mode 100755 (executable)
index 0000000..dc384cb
--- /dev/null
@@ -0,0 +1,188 @@
+#!/usr/bin/env ruby
+
+# Copyright (C) 2011 Martin A. Hansen.
+
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+
+# http://www.gnu.org/copyleft/gpl.html
+
+# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
+
+# This software is part of the Biopieces framework (www.biopieces.org).
+
+# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
+
+require 'test/unit'
+require 'maasha/sam'
+require 'pp'
+require 'stringio'
+
+SAM_TEST =
+%{@HD\tVN:1.3\tSO:coordinate
+@SQ\tSN:ref\tLN:45
+@CO\tMyComment
+r001\t163\tref\t7\t30\t8M2I4M1D3M\t=\t37\t39\tTTAGATAAAGGATACTG\t*
+r002\t0\tref\t9\t30\t3S6M1P1I4M\t*\t0\t0\tAAAAGATAAGGATA\t*
+r003\t0\tref\t9\t30\t5H6M\t*\t0\t0\tAGCTAA\t*\tNM:i:1
+r004\t0\tref\t16\t30\t6M14N5M\t*\t0\t0\tATAGCTTCAGC\t*
+r003\t16\tref\t29\t30\t6H5M\t*\t0\t0\tTAGGC\t*\tNM:i:0
+r001\t83\tref\t37\t30\t9M\t=\t7\t-39\tCAGCGCCAT\t*
+}
+
+class SamTest < Test::Unit::TestCase
+  def setup
+    @sam = Sam.new(StringIO.new(SAM_TEST))
+  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
+    sam = Sam.new(StringIO.new("@HD"))
+    assert_raise(SamError) { sam.header }
+  end
+
+  def test_Sam_header_parse_with_bad_version_number_raises
+    sam = Sam.new(StringIO.new("@HD\tXN:1.3"))
+    assert_raise(SamError) { sam.header }
+  end
+
+  def test_Sam_header_parse_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
+    sam = Sam.new(StringIO.new("@HD\tVN:1.3\tSO:fish"))
+    assert_raise(SamError) { sam.header }
+  end
+
+  def test_Sam_header_parse_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
+    sam = Sam.new(StringIO.new("@SQ"))
+    assert_raise(SamError) { sam.header }
+  end
+
+  def test_Sam_header_parse_with_bad_sequence_name_raises
+    sam = Sam.new(StringIO.new("@SQ\tSN:"))
+    assert_raise(SamError) { sam.header }
+  end
+
+  def test_Sam_header_parse_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
+    sam = Sam.new(StringIO.new("@SQ\tSN:ref\n@SQ\tSN:ref"))
+    assert_raise(SamError) { sam.header[:SQ][:SN][:ref] }
+  end
+
+  def test_Sam_header_parse_with_missing_sequence_length_raises
+    sam = Sam.new(StringIO.new("@SQ\tSN:ref"))
+    assert_raise(SamError) { sam.header }
+  end
+
+  def test_Sam_header_parse_with_bad_sequence_length_raises
+    sam = Sam.new(StringIO.new("@SQ\tSN:scaffold17_1_MH0083\tLN:x"))
+    assert_raise(SamError) { sam.header }
+  end
+
+  def test_Sam_header_parse_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
+    sam = Sam.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
+    sam = Sam.new(StringIO.new("@RG\tID:"))
+    assert_raise(SamError) { sam.header }
+  end
+
+  def test_Sam_header_parse_with_missing_read_group_identifier_raises
+    sam = Sam.new(StringIO.new("@RG"))
+    assert_raise(SamError) { sam.header }
+  end
+
+  def test_Sam_header_parse_with_duplicate_read_group_identifier_raises
+    sam = Sam.new(StringIO.new("@RG\tID:123\n@RG\tID:123"))
+    assert_raise(SamError) { sam.header }
+  end
+
+  def test_Sam_header_parse_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
+    sam = Sam.new(StringIO.new("@RG\tID:123\tFO:3"))
+    assert_raise(SamError) { sam.header }
+  end
+
+  def test_Sam_header_parse_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
+    sam = Sam.new(StringIO.new("@RG\tID:123\tPL:maersk"))
+    assert_raise(SamError) { sam.header }
+  end
+
+  def test_Sam_header_parse_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
+    sam = Sam.new(StringIO.new("@PG\tID:"))
+    assert_raise(SamError) { sam.header }
+  end
+
+  def test_Sam_header_parse_with_missing_program_identifier_raises
+    sam = Sam.new(StringIO.new("@PG"))
+    assert_raise(SamError) { sam.header }
+  end
+
+  def test_Sam_header_parse_with_duplicate_program_identifier_raises
+    sam = Sam.new(StringIO.new("@PG\tID:123\n@PG\tID:123"))
+    assert_raise(SamError) { sam.header }
+  end
+
+  def test_Sam_header_parse_with_bad_comment_raises
+    sam = Sam.new(StringIO.new("@CO\t"))
+    assert_raise(SamError) { sam.header }
+  end 
+
+  def test_Sam_header_parse_with_ok_comment_dont_raise
+    sam = Sam.new(StringIO.new("@CO\tfubar"))
+    assert_nothing_raised { sam.header }
+  end
+end
+