From: martinahansen Date: Fri, 17 Jun 2011 13:48:04 +0000 (+0000) Subject: added sam.rb to ruby trunk X-Git-Url: https://git.donarmstrong.com/?a=commitdiff_plain;h=f1145cf9194bd20e9482dde9279719b2c721763f;p=biopieces.git added sam.rb to ruby trunk git-svn-id: http://biopieces.googlecode.com/svn/trunk@1480 74ccb610-7750-0410-82ae-013aeee3265d --- diff --git a/code_ruby/test/maasha/test_sam.rb b/code_ruby/test/maasha/test_sam.rb new file mode 100755 index 0000000..dc384cb --- /dev/null +++ b/code_ruby/test/maasha/test_sam.rb @@ -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 +