# # test/unit/bio/appl/blast/test_report.rb - Unit test for Bio::Blast::Report # # Copyright:: Copyright (C) 2005, 2008 # Mitsuteru Nakao , # Naohisa Goto # License:: The Ruby License # # $Id:$ # # loading helper routine for testing bioruby require 'pathname' load Pathname.new(File.join(File.dirname(__FILE__), ['..'] * 4, 'bioruby_test_helper.rb')).cleanpath.to_s # libraries needed for the tests require 'test/unit' require 'bio/appl/blast/report' module Bio module TestBlastReportHelper TestDataBlast = Pathname.new(File.join(BioRubyTestDataPath, 'blast')).cleanpath.to_s private def get_input_data(basename = 'b0002.faa') File.open(File.join(TestDataBlast, basename)).read end def get_output_data(basename = 'b0002.faa', format = 7) fn = basename + ".m#{format.to_i}" # available filenames: # 'b0002.faa.m0' # 'b0002.faa.m7' # 'b0002.faa.m8' File.open(File.join(TestDataBlast, fn)).read end def create_report_object(basename = 'b0002.faa') case self.class.name.to_s when /XMLParser/i text = get_output_data(basename, 7) Bio::Blast::Report.new(text, :xmlparser) when /REXML/i text = get_output_data(basename, 7) Bio::Blast::Report.new(text, :rexml) when /Default/i text = get_output_data(basename, 0) Bio::Blast::Default::Report.new(text) when /Tab/i text = get_output_data(basename, 8) Bio::Blast::Report.new(text) else text = get_output_data(basename, 7) Bio::Blast::Report.new(text) end end end #module TestBlastReportHelper module TemplateTestBlastReport include TestBlastReportHelper def setup @report = create_report_object end def test_iterations assert(@report.iterations) end def test_parameters assert_equal('BLOSUM62', @report.parameters['matrix']) assert_equal(10, @report.parameters['expect']) assert_equal(11, @report.parameters['gap-open']) assert_equal(1, @report.parameters['gap-extend']) assert_equal('S', @report.parameters['filter']) end def test_program assert_equal('blastp', @report.program) end def test_version assert_equal('blastp 2.2.10 [Oct-19-2004]', @report.version) end def test_reference text_str = '~Reference: Altschul, Stephen F., Thomas L. Madden, Alejandro A. Schaffer, ~Jinghui Zhang, Zheng Zhang, Webb Miller, and David J. Lipman (1997), ~"Gapped BLAST and PSI-BLAST: a new generation of protein database search~programs", Nucleic Acids Res. 25:3389-3402.' assert_equal(text_str, @report.reference) end def test_db assert_equal('b0002.faa', @report.db) end def test_query_id assert_equal('lcl|QUERY', @report.query_id) end def test_query_def assert_equal('eco:b0002 thrA, Hs, thrD, thrA2, thrA1; bifunctional: aspartokinase I (N-terminal); homoserine dehydrogenase I (C-terminal) [EC:2.7.2.4 1.1.1.3]; K00003 homoserine dehydrogenase; K00928 aspartate kinase (A)', @report.query_def) end def test_query_len assert_equal(820, @report.query_len) end def test_matrix assert_equal('BLOSUM62', @report.matrix) end def test_expect assert_equal(10, @report.expect) end def test_inclusion assert_nothing_raised { @report.inclusion } end def test_sc_match assert_nothing_raised { @report.sc_match } end def test_sc_mismatch assert_nothing_raised { @report.sc_mismatch } end def test_gap_open assert_equal(11, @report.gap_open) end def test_gap_extend assert_equal(1, @report.gap_extend) end def test_filter assert_equal('S', @report.filter) end def test_pattern assert_equal(nil, @report.pattern) end def test_entrez_query assert_equal(nil, @report.entrez_query) end def test_each_iteration assert_nothing_raised { @report.each_iteration { |itr| } } end def test_each_hit assert_nothing_raised { @report.each_hit { |hit| } } end def test_hits assert(@report.hits) end def test_statistics assert_equal({"kappa"=>0.041, "db-num"=>1, "eff-space"=>605284.0, "hsp-len"=>42, "db-len"=>820, "lambda"=>0.267, "entropy"=>0.14}, @report.statistics) end def test_db_num assert_equal(1, @report.db_num) end def test_db_len assert_equal(820, @report.db_len) end def test_hsp_len assert_equal(42, @report.hsp_len) end def test_eff_space assert_equal(605284, @report.eff_space) end def test_kappa assert_equal(0.041, @report.kappa) end def test_lambda assert_equal(0.267, @report.lambda) end def test_entropy assert_equal(0.14, @report.entropy) end def test_message assert_equal(nil, @report.message) end end #module TemplateTestBlastReport module TemplateTestBlastReportIteration include TestBlastReportHelper def setup report = create_report_object @itr = report.iterations.first end def test_hits assert(@itr.hits) end def test_statistics stat = {"kappa" => 0.041, "eff-space" => 605284, "db-num" => 1, "hsp-len" => 42, "db-len" => 820, "lambda" => 0.267, "entropy" => 0.14} assert_equal(stat, @itr.statistics) end def test_num assert_equal(1, @itr.num) end def test_message assert_equal(nil, @itr.message) end end #module TemplateTestBlastReportIteration module TemplateTestBlastReportHit include TestBlastReportHelper def setup report = create_report_object @hit = report.hits.first end def test_Hit_hsps assert(@hit.hsps) end def test_Hit_query_id assert_equal('lcl|QUERY', @hit.query_id) end def test_Hit_query_def assert_equal('eco:b0002 thrA, Hs, thrD, thrA2, thrA1; bifunctional: aspartokinase I (N-terminal); homoserine dehydrogenase I (C-terminal) [EC:2.7.2.4 1.1.1.3]; K00003 homoserine dehydrogenase; K00928 aspartate kinase (A)', @hit.query_def) end def test_Hit_query_len assert_equal(820, @hit.query_len) end def test_Hit_num assert(@hit.num) end def test_Hit_hit_id assert_equal('gnl|BL_ORD_ID|0', @hit.hit_id) end def test_Hit_len assert_equal(820, @hit.len) end def test_Hit_target_len assert_equal(820, @hit.target_len) end def test_Hit_definition assert(@hit.definition) end def test_Hit_taeget_def assert(@hit.target_def) end def test_Hit_accession assert(@hit.accession) end def test_Hit_target_id assert(@hit.target_id) end def test_Hit_evalue assert_equal(0, @hit.evalue) end def test_Hit_bit_score assert_equal(1567.75, @hit.bit_score) end def test_Hit_identity assert_equal(820, @hit.identity) end def test_Hit_overlap assert_equal(820, @hit.overlap) end def test_Hit_query_seq seq = 'MRVLKFGGTSVANAERFLRVADILESNARQGQVATVLSAPAKITNHLVAMIEKTISGQDALPNISDAERIFAELLTGLAAAQPGFPLAQLKTFVDQEFAQIKHVLHGISLLGQCPDSINAALICRGEKMSIAIMAGVLEARGHNVTVIDPVEKLLAVGHYLESTVDIAESTRRIAASRIPADHMVLMAGFTAGNEKGELVVLGRNGSDYSAAVLAACLRADCCEIWTDVDGVYTCDPRQVPDARLLKSMSYQEAMELSYFGAKVLHPRTITPIAQFQIPCLIKNTGNPQAPGTLIGASRDEDELPVKGISNLNNMAMFSVSGPGMKGMVGMAARVFAAMSRARISVVLITQSSSEYSISFCVPQSDCVRAERAMQEEFYLELKEGLLEPLAVTERLAIISVVGDGMRTLRGISAKFFAALARANINIVAIAQGSSERSISVVVNNDDATTGVRVTHQMLFNTDQVIEVFVIGVGGVGGALLEQLKRQQSWLKNKHIDLRVCGVANSKALLTNVHGLNLENWQEELAQAKEPFNLGRLIRLVKEYHLLNPVIVDCTSSQAVADQYADFLREGFHVVTPNKKANTSSMDYYHQLRYAAEKSRRKFLYDTNVGAGLPVIENLQNLLNAGDELMKFSGILSGSLSYIFGKLDEGMSFSEATTLAREMGYTEPDPRDDLSGMDVARKLLILARETGRELELADIEIEPVLPAEFNAEGDVAAFMANLSQLDDLFAARVAKARDEGKVLRYVGNIDEDGVCRVKIAEVDGNDPLFKVKNGENALAFYSHYYQPLPLVLRGYGAGNDVTAAGVFADLLRTLSWKLGV' assert_equal(seq, @hit.query_seq) end def test_Hit_target_seq seq = 'MRVLKFGGTSVANAERFLRVADILESNARQGQVATVLSAPAKITNHLVAMIEKTISGQDALPNISDAERIFAELLTGLAAAQPGFPLAQLKTFVDQEFAQIKHVLHGISLLGQCPDSINAALICRGEKMSIAIMAGVLEARGHNVTVIDPVEKLLAVGHYLESTVDIAESTRRIAASRIPADHMVLMAGFTAGNEKGELVVLGRNGSDYSAAVLAACLRADCCEIWTDVDGVYTCDPRQVPDARLLKSMSYQEAMELSYFGAKVLHPRTITPIAQFQIPCLIKNTGNPQAPGTLIGASRDEDELPVKGISNLNNMAMFSVSGPGMKGMVGMAARVFAAMSRARISVVLITQSSSEYSISFCVPQSDCVRAERAMQEEFYLELKEGLLEPLAVTERLAIISVVGDGMRTLRGISAKFFAALARANINIVAIAQGSSERSISVVVNNDDATTGVRVTHQMLFNTDQVIEVFVIGVGGVGGALLEQLKRQQSWLKNKHIDLRVCGVANSKALLTNVHGLNLENWQEELAQAKEPFNLGRLIRLVKEYHLLNPVIVDCTSSQAVADQYADFLREGFHVVTPNKKANTSSMDYYHQLRYAAEKSRRKFLYDTNVGAGLPVIENLQNLLNAGDELMKFSGILSGSLSYIFGKLDEGMSFSEATTLAREMGYTEPDPRDDLSGMDVARKLLILARETGRELELADIEIEPVLPAEFNAEGDVAAFMANLSQLDDLFAARVAKARDEGKVLRYVGNIDEDGVCRVKIAEVDGNDPLFKVKNGENALAFYSHYYQPLPLVLRGYGAGNDVTAAGVFADLLRTLSWKLGV' assert_equal(seq, @hit.target_seq) end def test_Hit_midline seq = 'MRVLKFGGTSVANAERFLRVADILESNARQGQVATVLSAPAKITNHLVAMIEKTISGQDALPNISDAERIFAELLTGLAAAQPGFPLAQLKTFVDQEFAQIKHVLHGISLLGQCPDSINAALICRGEKMSIAIMAGVLEARGHNVTVIDPVEKLLAVGHYLESTVDIAESTRRIAASRIPADHMVLMAGFTAGNEKGELVVLGRNGSDYSAAVLAACLRADCCEIWTDVDGVYTCDPRQVPDARLLKSMSYQEAMELSYFGAKVLHPRTITPIAQFQIPCLIKNTGNPQAPGTLIGASRDEDELPVKGISNLNNMAMFSVSGPGMKGMVGMAARVFAAMSRARISVVLITQSSSEYSISFCVPQSDCVRAERAMQEEFYLELKEGLLEPLAVTERLAIISVVGDGMRTLRGISAKFFAALARANINIVAIAQGSSERSISVVVNNDDATTGVRVTHQMLFNTDQVIEVFVIGVGGVGGALLEQLKRQQSWLKNKHIDLRVCGVANSKALLTNVHGLNLENWQEELAQAKEPFNLGRLIRLVKEYHLLNPVIVDCTSSQAVADQYADFLREGFHVVTPNKKANTSSMDYYHQLRYAAEKSRRKFLYDTNVGAGLPVIENLQNLLNAGDELMKFSGILSGSLSYIFGKLDEGMSFSEATTLAREMGYTEPDPRDDLSGMDVARKLLILARETGRELELADIEIEPVLPAEFNAEGDVAAFMANLSQLDDLFAARVAKARDEGKVLRYVGNIDEDGVCRVKIAEVDGNDPLFKVKNGENALAFYSHYYQPLPLVLRGYGAGNDVTAAGVFADLLRTLSWKLGV' assert_equal(seq, @hit.midline) end def test_Hit_query_start assert_equal(1, @hit.query_start) # assert_equal(1, @hit.query_from) end def test_Hit_query_end assert_equal(820, @hit.query_end) # assert_equal(820, @hit.query_to) end def test_Hit_target_start assert_equal(1, @hit.target_start) # assert_equal(1, @hit.hit_from) end def test_Hit_target_end assert_equal(820, @hit.target_end) # assert_equal(820, @hit.hit_to) end def test_Hit_lap_at assert_equal([1, 820, 1, 820], @hit.lap_at) end end #module TemplateTestBlastReportHit module TemplateTestBlastReportHsp include TestBlastReportHelper def setup report = create_report_object @hsp = report.hits.first.hsps.first end def test_Hsp_num assert_equal(1, @hsp.num) end def test_Hsp_bit_score assert_equal(1567.75, @hsp.bit_score) end def test_Hsp_score assert_equal(4058, @hsp.score) end def test_Hsp_evalue assert_equal(0, @hsp.evalue) end def test_Hsp_identity assert_equal(820, @hsp.identity) end def test_Hsp_gaps assert_nothing_raised { @hsp.gaps } end def test_Hsp_positive assert_equal(820, @hsp.positive) end def test_Hsp_align_len assert_equal(820, @hsp.align_len) end def test_Hsp_density assert(@hsp.density) end def test_Hsp_query_frame assert_equal(1, @hsp.query_frame) end def test_Hsp_query_from assert_equal(1, @hsp.query_from) end def test_Hsp_query_to assert_equal(820, @hsp.query_to) end def test_Hsp_hit_frame assert_equal(1, @hsp.hit_frame) end def test_Hsp_hit_from assert_equal(1, @hsp.hit_from) end def test_Hsp_hit_to assert_equal(820, @hsp.hit_to) end def test_Hsp_pattern_from assert_nothing_raised { @hsp.pattern_from } end def test_Hsp_pattern_to assert_nothing_raised { @hsp.pattern_to } end def test_Hsp_qseq seq = 'MRVLKFGGTSVANAERFLRVADILESNARQGQVATVLSAPAKITNHLVAMIEKTISGQDALPNISDAERIFAELLTGLAAAQPGFPLAQLKTFVDQEFAQIKHVLHGISLLGQCPDSINAALICRGEKMSIAIMAGVLEARGHNVTVIDPVEKLLAVGHYLESTVDIAESTRRIAASRIPADHMVLMAGFTAGNEKGELVVLGRNGSDYSAAVLAACLRADCCEIWTDVDGVYTCDPRQVPDARLLKSMSYQEAMELSYFGAKVLHPRTITPIAQFQIPCLIKNTGNPQAPGTLIGASRDEDELPVKGISNLNNMAMFSVSGPGMKGMVGMAARVFAAMSRARISVVLITQSSSEYSISFCVPQSDCVRAERAMQEEFYLELKEGLLEPLAVTERLAIISVVGDGMRTLRGISAKFFAALARANINIVAIAQGSSERSISVVVNNDDATTGVRVTHQMLFNTDQVIEVFVIGVGGVGGALLEQLKRQQSWLKNKHIDLRVCGVANSKALLTNVHGLNLENWQEELAQAKEPFNLGRLIRLVKEYHLLNPVIVDCTSSQAVADQYADFLREGFHVVTPNKKANTSSMDYYHQLRYAAEKSRRKFLYDTNVGAGLPVIENLQNLLNAGDELMKFSGILSGSLSYIFGKLDEGMSFSEATTLAREMGYTEPDPRDDLSGMDVARKLLILARETGRELELADIEIEPVLPAEFNAEGDVAAFMANLSQLDDLFAARVAKARDEGKVLRYVGNIDEDGVCRVKIAEVDGNDPLFKVKNGENALAFYSHYYQPLPLVLRGYGAGNDVTAAGVFADLLRTLSWKLGV' assert_equal(seq, @hsp.qseq) end def test_Hsp_midline seq = 'MRVLKFGGTSVANAERFLRVADILESNARQGQVATVLSAPAKITNHLVAMIEKTISGQDALPNISDAERIFAELLTGLAAAQPGFPLAQLKTFVDQEFAQIKHVLHGISLLGQCPDSINAALICRGEKMSIAIMAGVLEARGHNVTVIDPVEKLLAVGHYLESTVDIAESTRRIAASRIPADHMVLMAGFTAGNEKGELVVLGRNGSDYSAAVLAACLRADCCEIWTDVDGVYTCDPRQVPDARLLKSMSYQEAMELSYFGAKVLHPRTITPIAQFQIPCLIKNTGNPQAPGTLIGASRDEDELPVKGISNLNNMAMFSVSGPGMKGMVGMAARVFAAMSRARISVVLITQSSSEYSISFCVPQSDCVRAERAMQEEFYLELKEGLLEPLAVTERLAIISVVGDGMRTLRGISAKFFAALARANINIVAIAQGSSERSISVVVNNDDATTGVRVTHQMLFNTDQVIEVFVIGVGGVGGALLEQLKRQQSWLKNKHIDLRVCGVANSKALLTNVHGLNLENWQEELAQAKEPFNLGRLIRLVKEYHLLNPVIVDCTSSQAVADQYADFLREGFHVVTPNKKANTSSMDYYHQLRYAAEKSRRKFLYDTNVGAGLPVIENLQNLLNAGDELMKFSGILSGSLSYIFGKLDEGMSFSEATTLAREMGYTEPDPRDDLSGMDVARKLLILARETGRELELADIEIEPVLPAEFNAEGDVAAFMANLSQLDDLFAARVAKARDEGKVLRYVGNIDEDGVCRVKIAEVDGNDPLFKVKNGENALAFYSHYYQPLPLVLRGYGAGNDVTAAGVFADLLRTLSWKLGV' assert_equal(seq, @hsp.midline) end def test_Hsp_hseq seq = 'MRVLKFGGTSVANAERFLRVADILESNARQGQVATVLSAPAKITNHLVAMIEKTISGQDALPNISDAERIFAELLTGLAAAQPGFPLAQLKTFVDQEFAQIKHVLHGISLLGQCPDSINAALICRGEKMSIAIMAGVLEARGHNVTVIDPVEKLLAVGHYLESTVDIAESTRRIAASRIPADHMVLMAGFTAGNEKGELVVLGRNGSDYSAAVLAACLRADCCEIWTDVDGVYTCDPRQVPDARLLKSMSYQEAMELSYFGAKVLHPRTITPIAQFQIPCLIKNTGNPQAPGTLIGASRDEDELPVKGISNLNNMAMFSVSGPGMKGMVGMAARVFAAMSRARISVVLITQSSSEYSISFCVPQSDCVRAERAMQEEFYLELKEGLLEPLAVTERLAIISVVGDGMRTLRGISAKFFAALARANINIVAIAQGSSERSISVVVNNDDATTGVRVTHQMLFNTDQVIEVFVIGVGGVGGALLEQLKRQQSWLKNKHIDLRVCGVANSKALLTNVHGLNLENWQEELAQAKEPFNLGRLIRLVKEYHLLNPVIVDCTSSQAVADQYADFLREGFHVVTPNKKANTSSMDYYHQLRYAAEKSRRKFLYDTNVGAGLPVIENLQNLLNAGDELMKFSGILSGSLSYIFGKLDEGMSFSEATTLAREMGYTEPDPRDDLSGMDVARKLLILARETGRELELADIEIEPVLPAEFNAEGDVAAFMANLSQLDDLFAARVAKARDEGKVLRYVGNIDEDGVCRVKIAEVDGNDPLFKVKNGENALAFYSHYYQPLPLVLRGYGAGNDVTAAGVFADLLRTLSWKLGV' assert_equal(seq, @hsp.hseq) end def test_Hsp_percent_identity assert_nothing_raised { @hsp.percent_identity } end def test_Hsp_mismatch_count assert_nothing_raised { @hsp.mismatch_count } end end #module TestBlastReportHsp class TestBlastReport < Test::Unit::TestCase include TemplateTestBlastReport end class TestBlastReportIteration < Test::Unit::TestCase include TemplateTestBlastReportIteration end class TestBlastReportHit < Test::Unit::TestCase include TemplateTestBlastReportHit end class TestBlastReportHsp < Test::Unit::TestCase include TemplateTestBlastReportHsp end class TestBlastReportREXML < Test::Unit::TestCase include TemplateTestBlastReport end class TestBlastReportIterationREXML < Test::Unit::TestCase include TemplateTestBlastReportIteration end class TestBlastReportHitREXML < Test::Unit::TestCase include TemplateTestBlastReportHit end class TestBlastReportHspREXML < Test::Unit::TestCase include TemplateTestBlastReportHsp end if defined? XMLParser then class TestBlastReportXMLParser < Test::Unit::TestCase include TemplateTestBlastReport end class TestBlastReportIterationXMLParser < Test::Unit::TestCase include TemplateTestBlastReportIteration end class TestBlastReportHitXMLParser < Test::Unit::TestCase include TemplateTestBlastReportHit end class TestBlastReportHspXMLParser < Test::Unit::TestCase include TemplateTestBlastReportHsp end end #if defined? XMLParser class TestBlastReportDefault < Test::Unit::TestCase include TemplateTestBlastReport undef test_entrez_query undef test_filter undef test_hsp_len undef test_inclusion undef test_parameters undef test_query_id undef test_statistics def test_program assert_equal('BLASTP', @report.program) end def test_reference text_str = 'Reference: Altschul, Stephen F., Thomas L. Madden, Alejandro A. Schaffer, Jinghui Zhang, Zheng Zhang, Webb Miller, and David J. Lipman (1997), "Gapped BLAST and PSI-BLAST: a new generation of protein database search programs", Nucleic Acids Res. 25:3389-3402.' assert_equal(text_str, @report.reference) end def test_version assert_equal('BLASTP 2.2.10 [Oct-19-2004]', @report.version) end def test_kappa assert_equal(0.134, @report.kappa) end def test_lambda assert_equal(0.319, @report.lambda) end def test_entropy assert_equal(0.383, @report.entropy) end def test_gapped_kappa assert_equal(0.0410, @report.gapped_kappa) end def test_gapped_lambda assert_equal(0.267, @report.gapped_lambda) end def test_gapped_entropy assert_equal(0.140, @report.gapped_entropy) end end #class TestBlastReportDefault class TestBlastReportIterationDefault < Test::Unit::TestCase include TemplateTestBlastReportIteration undef test_statistics end class TestBlastReportHitDefault < Test::Unit::TestCase include TemplateTestBlastReportHit undef test_Hit_accession undef test_Hit_hit_id undef test_Hit_num undef test_Hit_query_def undef test_Hit_query_id undef test_Hit_query_len def setup @filtered_query_sequence = 'MRVLKFGGTSVANAERFLRVADILESNARQGQVATVLSAPAKITNHLVAMIEKTISGQDALPNISDAERIFAELLTGLAAAQPGFPLAQLKTFVDQEFAQIKHVLHGISLLGQCPDSINAALICRGEKMSIAIMAGVLEARGHNVTVIDPVEKLLAVGHYLESTVDIAESTRRIAASRIPADHMVLMAGFTAGNEKGELVVLGRNGSDYSAAVLAACLRADCCEIWTDVDGVYTCDPRQVPDARLLKSMSYQEAMELSYFGAKVLHPRTITPIAQFQIPCLIKNTGNPQAPGTLIGASRDEDELPVKGISNLNNMAMFSVSGPGMKGMVGMAARVFAAMSRARISVVLITQSSSEYSISFCVPQSDCVRAERAMQEEFYLELKEGLLEPLAVTERLAIISVVGDGMRTLRGISAKFFAALARANINIVAIAQGSSERSISVVVNNDDATTGVRVTHQMLFNTDQxxxxxxxxxxxxxxALLEQLKRQQSWLKNKHIDLRVCGVANSKALLTNVHGLNLENWQEELAQAKEPFNLGRLIRLVKEYHLLNPVIVDCTSSQAVADQYADFLREGFHVVTPNKKANTSSMDYYHQLRYAAEKSRRKFLYDTNVGAGLPVIENLQNLLNAGDELMKFSGILSGSLSYIFGKLDEGMSFSEATTLAREMGYTEPDPRDDLSGMDVARKLLILARETGRELELADIEIEPVLPAEFNAEGDVAAFMANLSQLDDLFAARVAKARDEGKVLRYVGNIDEDGVCRVKIAEVDGNDPLFKVKNGENALAFYSHYYQPLPLVLRGYGAGNDVTAAGVFADLLRTLSWKLGV' super end def test_Hit_bit_score # differs from XML because of truncation in the default format assert_equal(1567.0, @hit.bit_score) end def test_Hit_identity # differs from XML because filtered residues are not counted in the # default format assert_equal(806, @hit.identity) end def test_Hit_midline # differs from XML because filtered residues are not specified in XML seq = @filtered_query_sequence.gsub(/x/, ' ') assert_equal(seq, @hit.midline) end def test_Hit_query_seq # differs from XML because filtered residues are not specified in XML seq = @filtered_query_sequence.gsub(/x/, 'X') assert_equal(seq, @hit.query_seq) end end #class TestBlastReportHitDefault class TestBlastReportHspDefault < Test::Unit::TestCase include TemplateTestBlastReportHsp undef test_Hsp_density undef test_Hsp_mismatch_count undef test_Hsp_num undef test_Hsp_pattern_from undef test_Hsp_pattern_to def setup @filtered_query_sequence = 'MRVLKFGGTSVANAERFLRVADILESNARQGQVATVLSAPAKITNHLVAMIEKTISGQDALPNISDAERIFAELLTGLAAAQPGFPLAQLKTFVDQEFAQIKHVLHGISLLGQCPDSINAALICRGEKMSIAIMAGVLEARGHNVTVIDPVEKLLAVGHYLESTVDIAESTRRIAASRIPADHMVLMAGFTAGNEKGELVVLGRNGSDYSAAVLAACLRADCCEIWTDVDGVYTCDPRQVPDARLLKSMSYQEAMELSYFGAKVLHPRTITPIAQFQIPCLIKNTGNPQAPGTLIGASRDEDELPVKGISNLNNMAMFSVSGPGMKGMVGMAARVFAAMSRARISVVLITQSSSEYSISFCVPQSDCVRAERAMQEEFYLELKEGLLEPLAVTERLAIISVVGDGMRTLRGISAKFFAALARANINIVAIAQGSSERSISVVVNNDDATTGVRVTHQMLFNTDQxxxxxxxxxxxxxxALLEQLKRQQSWLKNKHIDLRVCGVANSKALLTNVHGLNLENWQEELAQAKEPFNLGRLIRLVKEYHLLNPVIVDCTSSQAVADQYADFLREGFHVVTPNKKANTSSMDYYHQLRYAAEKSRRKFLYDTNVGAGLPVIENLQNLLNAGDELMKFSGILSGSLSYIFGKLDEGMSFSEATTLAREMGYTEPDPRDDLSGMDVARKLLILARETGRELELADIEIEPVLPAEFNAEGDVAAFMANLSQLDDLFAARVAKARDEGKVLRYVGNIDEDGVCRVKIAEVDGNDPLFKVKNGENALAFYSHYYQPLPLVLRGYGAGNDVTAAGVFADLLRTLSWKLGV' super end def test_Hsp_identity # differs from XML because filtered residues are not counted in the # default format assert_equal(806, @hsp.identity) end def test_Hsp_positive # differs from XML because filtered residues are not counted in the # default format assert_equal(806, @hsp.positive) end def test_Hsp_midline # differs from XML because filtered residues are not specified in XML seq = @filtered_query_sequence.gsub(/x/, ' ') assert_equal(seq, @hsp.midline) end def test_Hsp_qseq # differs from XML because filtered residues are not specified in XML seq = @filtered_query_sequence.gsub(/x/, 'X') assert_equal(seq, @hsp.qseq) end def test_Hsp_bit_score # differs from XML because of truncation in the default format assert_equal(1567.0, @hsp.bit_score) end def test_Hsp_hit_frame # differs from XML because not available in the default BLASTP format assert_equal(nil, @hsp.hit_frame) end def test_Hsp_query_frame # differs from XML because not available in the default BLASTP format assert_equal(nil, @hsp.query_frame) end end #class TestBlastReportHspDefault module TestBlastReportTabularHelper def def_test_assert_nil(test_method) str = test_method.to_s name = str.sub(/test(\_(Hit|Hsp))?\_/, '') method = name.intern instance = case self.to_s when /Iteration/ :@itr when /Hit/ :@hit when /Hsp/ :@hsp else :@report end define_method(test_method) do assert_nil(instance_variable_get(instance).__send__(method)) end end end #module TestBlastReportTabularHelper class TestBlastReportTabular < Test::Unit::TestCase extend TestBlastReportTabularHelper include TemplateTestBlastReport def_test_assert_nil :test_db def_test_assert_nil :test_db_len def_test_assert_nil :test_db_num def_test_assert_nil :test_eff_space def_test_assert_nil :test_entropy def_test_assert_nil :test_expect def_test_assert_nil :test_filter def_test_assert_nil :test_gap_extend def_test_assert_nil :test_gap_open def_test_assert_nil :test_hsp_len def_test_assert_nil :test_kappa def_test_assert_nil :test_lambda def_test_assert_nil :test_matrix def_test_assert_nil :test_program def_test_assert_nil :test_query_len def_test_assert_nil :test_reference def_test_assert_nil :test_version # No parameters information available in the "-m 8" format def test_parameters assert_equal({}, @report.parameters) end def test_query_def # differs from XML because of truncation in the "-m 8" format assert_equal("eco:b0002", @report.query_def) end def test_query_id # differs from XML because of the limited data assert_equal("eco:b0002", @report.query_id) end # No statistics information available in the "-m 8" format def test_statistics assert_equal({}, @report.statistics) end end #class TestBlastReportTabular class TestBlastReportIterationTabular < Test::Unit::TestCase include TemplateTestBlastReportIteration # No statistics information available in the "-m 8" format def test_statistics assert_equal({}, @itr.statistics) end end #class TestBlastReportIterationTabular class TestBlastReportHitTabular < Test::Unit::TestCase extend TestBlastReportTabularHelper include TemplateTestBlastReportHit def_test_assert_nil :test_Hit_hit_id def_test_assert_nil :test_Hit_identity def_test_assert_nil :test_Hit_len def_test_assert_nil :test_Hit_midline def_test_assert_nil :test_Hit_query_len def_test_assert_nil :test_Hit_query_seq def_test_assert_nil :test_Hit_target_len def_test_assert_nil :test_Hit_target_seq def test_Hit_bit_score # differs from XML because of truncation in the "-m 8" format assert_equal(1567.0, @hit.bit_score) end def test_Hit_query_def # differs from XML because of truncation in the "-m 8" format assert_equal("eco:b0002", @hit.query_def) end def test_Hit_query_id # differs from XML because of the limited data assert_equal("eco:b0002", @hit.query_id) end end #class TestBlastReportHitTabular class TestBlastReportHspTabular < Test::Unit::TestCase extend TestBlastReportTabularHelper include TemplateTestBlastReportHsp def_test_assert_nil :test_Hsp_density def_test_assert_nil :test_Hsp_hit_frame def_test_assert_nil :test_Hsp_hseq def_test_assert_nil :test_Hsp_identity def_test_assert_nil :test_Hsp_midline def_test_assert_nil :test_Hsp_positive def_test_assert_nil :test_Hsp_qseq def_test_assert_nil :test_Hsp_query_frame def_test_assert_nil :test_Hsp_score def test_Hsp_bit_score # differs from XML because of truncation in the "-m 8" format assert_equal(1567.0, @hsp.bit_score) end end #class TestBlastReportHspTabular ######################################################################## # Tests for new BLAST XML format (blastall 2.2.14 or later) # with the result of multiple query sequences ######################################################################## module TemplateTestBlastReportMulti include TestBlastReportHelper def setup @report = create_report_object('blastp-multi') @overall = [ @report ] + @report.reports end def test_reports assert_equal(5, @report.reports.size) end def test_iterations assert_equal(1, @report.iterations.size) assert_equal([ 1, 1, 1, 1, 1], @report.reports.collect { |x| x.iterations.size }) end def test_parameters @overall.each do |r| assert_equal('BLOSUM62', r.parameters['matrix']) assert_equal(0.001, r.parameters['expect']) assert_equal(11, r.parameters['gap-open']) assert_equal(1, r.parameters['gap-extend']) assert_equal('F', r.parameters['filter']) end end def test_program @overall.each do |r| assert_equal('blastp', r.program) end end def test_version @overall.each do |r| assert_equal('blastp 2.2.18 [Mar-02-2008]', r.version) end end def test_reference text_str = '~Reference: Altschul, Stephen F., Thomas L. Madden, Alejandro A. Schaffer, ~Jinghui Zhang, Zheng Zhang, Webb Miller, and David J. Lipman (1997), ~"Gapped BLAST and PSI-BLAST: a new generation of protein database search~programs", Nucleic Acids Res. 25:3389-3402.' @overall.each do |r| assert_equal(text_str, r.reference) end end def test_db @overall.each do |r| assert_equal('BA000007.faa', r.db) end end def test_query_id qids = [ 'lcl|1_0', 'lcl|2_0', 'lcl|3_0', nil, 'lcl|5_0' ] assert_equal(qids[0], @report.query_id) assert_equal(qids, @report.reports.collect { |r| r.query_id }) end def test_query_def qdefs = [ 'gi|1790845|gb|AAC77338.1| predicted DNA-binding transcriptional regulator [Escherichia coli str. K-12 substr. MG1655]', 'gi|1790846|gb|AAC77339.1| lipoate-protein ligase A [Escherichia coli str. K-12', 'gi|1790847|gb|AAC77340.1| conserved protein [Escherichia coli str. K-12 substr. MG1655]', nil, 'gi|1790849|gb|AAC77341.1| 3-phosphoserine phosphatase [Escherichia coli str. K-12 substr. MG1655]' ] assert_equal(qdefs[0], @report.query_def) assert_equal(qdefs, @report.reports.collect { |r| r.query_def }) end def test_query_len qlens = [ 443, 346, 214, nil, 322 ] assert_equal(qlens[0], @report.query_len) assert_equal(qlens, @report.reports.collect { |r| r.query_len }) end def test_matrix @overall.each do |r| assert_equal('BLOSUM62', r.matrix) end end def test_expect @overall.each do |r| assert_equal(0.001, r.expect) end end def test_gap_open @overall.each do |r| assert_equal(11, r.gap_open) end end def test_gap_extend @overall.each do |r| assert_equal(1, r.gap_extend) end end def test_filter @overall.each do |r| assert_equal('F', r.filter) end end def test_pattern @overall.each do |r| assert_equal(nil, r.pattern) end end def test_each_iteration @overall.each do |r| count = 0 assert_nothing_raised { r.each_iteration { |itr| count += 1 } } assert_equal(1, count) end end def test_each_hit @overall.each do |r| assert_nothing_raised { r.each_hit { |hit| } } end end def test_hits hsizes = [ 0, 1, 1, 0, 2 ] assert_equal(hsizes[0], @report.hits.size) assert_equal(hsizes, @report.reports.collect { |r| r.hits.size }) end def test_statistics assert_equal({}, @report.statistics) stat = { "kappa" => 0.041, "eff-space" => 0, "db-num" => 5361, "hsp-len" => 0, "db-len" => 1609188, "lambda" => 0.267, "entropy" => 0.14 } stats = [ {}, stat, stat, {}, stat ] @report.reports.each do |r| assert_equal(stats.shift, r.statistics) end end def test_db_num assert_equal(nil, @report.db_num) ary = [ nil, 5361, 5361, nil, 5361 ] @report.reports.each do |r| assert_equal(ary.shift, r.db_num) end end def test_db_len assert_equal(nil, @report.db_len) ary = [ nil, 1609188, 1609188, nil, 1609188 ] @report.reports.each do |r| assert_equal(ary.shift, r.db_len) end end def test_hsp_len assert_equal(nil, @report.hsp_len) ary = [ nil, 0, 0, nil, 0 ] @report.reports.each do |r| assert_equal(ary.shift, r.hsp_len) end end def test_eff_space assert_equal(nil, @report.eff_space) ary = [ nil, 0, 0, nil, 0 ] @report.reports.each do |r| assert_equal(ary.shift, r.eff_space) end end def test_kappa assert_equal(nil, @report.kappa) ary = [ nil, 0.041, 0.041, nil, 0.041 ] @report.reports.each do |r| assert_equal(ary.shift, r.kappa) end end def test_lambda assert_equal(nil, @report.lambda) ary = [ nil, 0.267, 0.267, nil, 0.267 ] @report.reports.each do |r| assert_equal(ary.shift, r.lambda) end end def test_entropy assert_equal(nil, @report.entropy) ary = [ nil, 0.14, 0.14, nil, 0.14 ] @report.reports.each do |r| assert_equal(ary.shift, r.entropy) end end def test_message @overall.each do |r| assert_equal(nil, r.message) end end end #module TemplateTestBlastReportMulti module TemplateTestBlastReportIterationMulti include TestBlastReportHelper def setup report = create_report_object('blastp-multi') @itr = report.reports[4].iterations[0] end def test_query_id assert_equal('lcl|5_0', @itr.query_id) end def test_query_def assert_equal('gi|1790849|gb|AAC77341.1| 3-phosphoserine phosphatase [Escherichia coli str. K-12 substr. MG1655]', @itr.query_def) end def test_query_len assert_equal(322, @itr.query_len) end def test_hits assert_equal(2, @itr.hits.size) end def test_each count = 0 assert_nothing_raised { @itr.each { |hit| count += 1 } } assert_equal(2, count) end def test_statistics stat = { "kappa" => 0.041, "eff-space" => 0, "db-num" => 5361, "hsp-len" => 0, "db-len" => 1609188, "lambda" => 0.267, "entropy" => 0.14 } assert_equal(stat, @itr.statistics) end def test_num assert_equal(5, @itr.num) end def test_message assert_equal(nil, @itr.message) end end #module TemplateTestBlastReportIterationMulti module TemplateTestBlastReportHitMulti include TestBlastReportHelper def setup report = create_report_object('blastp-multi') @hit = report.reports[4].iterations[0].hits[1] end def test_Hit_hsps assert_equal(1, @hit.hsps.size) end def test_Hit_query_id assert_equal('lcl|5_0', @hit.query_id) end def test_Hit_query_def assert_equal('gi|1790849|gb|AAC77341.1| 3-phosphoserine phosphatase [Escherichia coli str. K-12 substr. MG1655]', @hit.query_def) end def test_Hit_query_len assert_equal(322, @hit.query_len) end def test_Hit_num assert_equal(2, @hit.num) end def test_Hit_hit_id assert_equal('gi|13363792|dbj|BAB37741.1|', @hit.hit_id) end def test_Hit_len assert_equal(732, @hit.len) end def test_Hit_target_len assert_equal(732, @hit.target_len) end def test_Hit_definition assert_equal('zinc-transporting ATPase [Escherichia coli O157:H7 str. Sakai]', @hit.definition) end def test_Hit_taeget_def assert_equal('zinc-transporting ATPase [Escherichia coli O157:H7 str. Sakai]', @hit.target_def) end def test_Hit_accession assert_equal('BAB37741', @hit.accession) end def test_Hit_target_id #assert_equal('gi|13363792|dbj|BAB37741.1|', @hit.target_id) assert_equal('BAB37741', @hit.target_id) end def test_Hit_evalue assert_equal(0.000899657, @hit.evalue) end def test_Hit_bit_score assert_equal(38.1206, @hit.bit_score) end def test_Hit_identity assert_equal(39, @hit.identity) end def test_Hit_overlap # alignment length assert_equal(123, @hit.overlap) end def test_Hit_query_seq seq = 'VLKLETLGWKVAIASGGFTFFAEYLRDKLRLTAVVANELEIMDGKFTGNVIGDIVDAQYKAKTLTRLAQEYEIPLAQTVAIGDGANDLPMIKAAGLGIAYHAKPKVN-EKAEVTIRHADLMGV' assert_equal(seq, @hit.query_seq) end def test_Hit_target_seq seq = 'ISELNALGVKGVILTG----------DNPRAAAAIAGELGL---EFKAGLL-----PEDKVKAVTELNQHA--PLAM---VGDGINDAPAMKAAAIGIAMGSGTDVALETADAALTHNHLRGL' assert_equal(seq, @hit.target_seq) end def test_Hit_midline seq = '+ +L LG K I +G D R A +A EL + +F ++ + K K +T L Q PLA +GDG ND P +KAA +GIA + V E A+ + H L G+' assert_equal(seq, @hit.midline) end def test_Hit_query_start assert_equal(190, @hit.query_start) # assert_equal(190, @hit.query_from) end def test_Hit_query_end assert_equal(311, @hit.query_end) # assert_equal(311, @hit.query_to) end def test_Hit_target_start assert_equal(569, @hit.target_start) # assert_equal(569, @hit.hit_from) end def test_Hit_target_end assert_equal(668, @hit.target_end) # assert_equal(668, @hit.hit_to) end def test_Hit_lap_at assert_equal([190, 311, 569, 668], @hit.lap_at) end end #module TemplateTestBlastReportHitMulti module TemplateTestBlastReportHspMulti include TestBlastReportHelper def setup report = create_report_object('blastp-multi') @hsp = report.reports[4].iterations[0].hits[1].hsps[0] end def test_Hsp_num assert_equal(1, @hsp.num) end def test_Hsp_bit_score assert_equal(38.1206, @hsp.bit_score) end def test_Hsp_score assert_equal(87, @hsp.score) end def test_Hsp_evalue assert_equal(0.000899657, @hsp.evalue) end def test_Hsp_identity assert_equal(39, @hsp.identity) end def test_Hsp_gaps assert_equal(24, @hsp.gaps) end def test_Hsp_positive assert_equal(56, @hsp.positive) end def test_Hsp_align_len assert_equal(123, @hsp.align_len) end def test_Hsp_density assert_nothing_raised { @hsp.density } end def test_Hsp_query_frame assert_equal(1, @hsp.query_frame) end def test_Hsp_query_from assert_equal(190, @hsp.query_from) end def test_Hsp_query_to assert_equal(311, @hsp.query_to) end def test_Hsp_hit_frame assert_equal(1, @hsp.hit_frame) end def test_Hsp_hit_from assert_equal(569, @hsp.hit_from) end def test_Hsp_hit_to assert_equal(668, @hsp.hit_to) end def test_Hsp_pattern_from assert_nothing_raised { @hsp.pattern_from } end def test_Hsp_pattern_to assert_nothing_raised { @hsp.pattern_to } end def test_Hsp_qseq seq = 'VLKLETLGWKVAIASGGFTFFAEYLRDKLRLTAVVANELEIMDGKFTGNVIGDIVDAQYKAKTLTRLAQEYEIPLAQTVAIGDGANDLPMIKAAGLGIAYHAKPKVN-EKAEVTIRHADLMGV' assert_equal(seq, @hsp.qseq) end def test_Hsp_midline seq = '+ +L LG K I +G D R A +A EL + +F ++ + K K +T L Q PLA +GDG ND P +KAA +GIA + V E A+ + H L G+' assert_equal(seq, @hsp.midline) end def test_Hsp_hseq seq = 'ISELNALGVKGVILTG----------DNPRAAAAIAGELGL---EFKAGLL-----PEDKVKAVTELNQHA--PLAM---VGDGINDAPAMKAAAIGIAMGSGTDVALETADAALTHNHLRGL' assert_equal(seq, @hsp.hseq) end def test_Hsp_percent_identity assert_nothing_raised { @hsp.percent_identity } end def test_Hsp_mismatch_count assert_nothing_raised { @hsp.mismatch_count } end end #module TemplateTestBlastReportHspMulti class TestBlastReportMulti < Test::Unit::TestCase include TemplateTestBlastReportMulti end class TestBlastReportIterationMulti < Test::Unit::TestCase include TemplateTestBlastReportIterationMulti end class TestBlastReportHitMulti < Test::Unit::TestCase include TemplateTestBlastReportHitMulti end class TestBlastReportHspMulti < Test::Unit::TestCase include TemplateTestBlastReportHspMulti end # Tests for REXML version class TestBlastReportMultiREXML < Test::Unit::TestCase include TemplateTestBlastReportMulti end class TestBlastReportIterationMultiREXML < Test::Unit::TestCase include TemplateTestBlastReportIterationMulti end class TestBlastReportHitMultiREXML < Test::Unit::TestCase include TemplateTestBlastReportHitMulti end class TestBlastReportHspMultiREXML < Test::Unit::TestCase include TemplateTestBlastReportHspMulti end # Tests for XMLParser version if defined? XMLParser then class TestBlastReportMultiXMLParser < Test::Unit::TestCase include TemplateTestBlastReportMulti end class TestBlastReportIterationMultiXMLParser < Test::Unit::TestCase include TemplateTestBlastReportIterationMulti end class TestBlastReportHitMultiXMLParser < Test::Unit::TestCase include TemplateTestBlastReportHitMulti end class TestBlastReportHspMultiXMLParser < Test::Unit::TestCase include TemplateTestBlastReportHspMulti end end #if defined? XMLParser end # module Bio