X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=test%2Fjalview%2Fdatamodel%2FSeqCigarTest.java;h=761835d3ddb928aa00338d99639f67e7827cc34c;hb=73d0b3417c14be3e826826cd7848fc2923332e0e;hp=3b50ce129dea6bdcb1e9aab9b883f9d5db5f8514;hpb=ab22918ab8fc67d30dad1fb1ae0f37e51f49df95;p=jalview.git diff --git a/test/jalview/datamodel/SeqCigarTest.java b/test/jalview/datamodel/SeqCigarTest.java index 3b50ce1..761835d 100644 --- a/test/jalview/datamodel/SeqCigarTest.java +++ b/test/jalview/datamodel/SeqCigarTest.java @@ -1,8 +1,33 @@ +/* + * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$) + * Copyright (C) $$Year-Rel$$ The Jalview Authors + * + * This file is part of Jalview. + * + * Jalview 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 3 + * of the License, or (at your option) any later version. + * + * Jalview 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 Jalview. If not, see . + * The Jalview Authors are detailed in the 'AUTHORS' file. + */ package jalview.datamodel; +import static org.testng.Assert.assertTrue; import static org.testng.AssertJUnit.assertEquals; import static org.testng.AssertJUnit.assertFalse; +import jalview.gui.JvOptionPane; +import jalview.util.Comparison; + +import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; /** @@ -10,12 +35,67 @@ import org.testng.annotations.Test; */ public class SeqCigarTest { + + @BeforeClass(alwaysRun = true) + public void setUpJvOptionPane() + { + JvOptionPane.setInteractiveMode(false); + JvOptionPane.setMockResponse(JvOptionPane.CANCEL_OPTION); + } + + @Test(groups = { "Functional" }) + public void testFindPosition() + { + SequenceI oseq = new Sequence("MySeq", "ASD---ASD---ASD", 37, 45); + oseq.createDatasetSequence(); + SeqCigar cs = new SeqCigar(oseq); + assertEquals(oseq.getSequenceAsString(), cs.getSequenceString('-')); + for (int c = 0, cLen = oseq.getLength(); c < cLen; c++) + { + int os_p = oseq.findPosition(c); + int cigar_p = cs.findPosition(c); + if (Comparison.isGap(oseq.getCharAt(c))) + { + assertEquals("Expected gap at position " + os_p + " column " + c, + -1, cigar_p); + } + else + { + assertEquals("Positions don't match for at column " + c, os_p, + cigar_p); + } + } + } + + @Test(groups= {"Functional"}) + public void testReconstructSeq() + { + String o_seq = "asdfktryasdtqwrtsaslldddptyipqqwaslchvhttt"; + SequenceI s = new Sequence("MySeq", o_seq, 39, 80); + String orig_gapped = "----asdf------ktryas---dtqwrtsasll----dddptyipqqwa----slchvhttt"; + // name of sequence in a particular alignment should be recovered + SequenceI s_gapped = new Sequence("MySeqAlign", orig_gapped, 39, 80); + s_gapped.setDatasetSequence(s); + SeqCigar cg_sgapped = new SeqCigar(s_gapped); + assertTrue(testSeqRecovery(cg_sgapped,s_gapped,true)); + SequenceI subseq_gapped = s_gapped.getSubSequence(44, 60); + SeqCigar subseq_cg_range=new SeqCigar(s_gapped,44,59); + assertTrue(testSeqRecovery(subseq_cg_range, subseq_gapped, true),"SeqCigar created on range of sequence failed"); + + // test another way of reconstructing a sequence from seqCigar + SequenceI[] sqs=SeqCigar.createAlignmentSequences(new SeqCigar[] {subseq_cg_range}, '-', new HiddenColumns(), null); + assertTrue(testSeqRecovery(subseq_cg_range, sqs[0], true),"createAlignmentSequences didn't reconstruct same sequence as for SeqCigar created on range of sequence failed (used by AlignmentView for selections)"); + + subseq_gapped.setName("SubSeqMySeqAlign"); // name of sequence in a particular alignment should be recovered + SeqCigar subseq_cg = new SeqCigar(subseq_gapped); + assertTrue(testSeqRecovery(subseq_cg,subseq_gapped,true)); + } /* * refactored 'as is' from main method * * TODO: split into separate tests */ - @Test(groups ={ "Functional" }) + @Test(groups = { "Functional" }) public void testSomething() throws Exception { String o_seq = "asdfktryasdtqwrtsaslldddptyipqqwaslchvhttt"; @@ -38,20 +118,20 @@ public class SeqCigarTest assertEquals("Failed parseCigar", ex_cs_gapped, gen_sgapped.getCigarstring()); - testSeqRecovery(gen_sgapped, s_gapped); + assertTrue(testSeqRecovery(gen_sgapped, s_gapped,true)); /* * Test dataset resolution */ SeqCigar sub_gapped = new SeqCigar(s_subsequence_gapped); - testSeqRecovery(sub_gapped, s_subsequence_gapped); + assertTrue(testSeqRecovery(sub_gapped, s_subsequence_gapped,true)); /* * Test width functions */ assertEquals("Failed getWidth", sub_gapped_s.length(), sub_gapped.getWidth()); - + sub_gapped.getFullWidth(); assertFalse("hasDeletedRegions is incorrect", sub_gapped.hasDeletedRegions()); @@ -65,7 +145,7 @@ public class SeqCigarTest /* * TODO: can we add assertions to the sysouts that follow? */ - System.out.println("Original sequence align:\n" + sub_gapped_s + System.out.println("\nOriginal sequence align:\n" + sub_gapped_s + "\nReconstructed window from 8 to 48\n" + "XXXXXXXX" + sub_se_gp.getSequenceString('-') + "..." + "\nCigar String:" + sub_se_gp.getCigarstring() + "\n"); @@ -86,9 +166,8 @@ public class SeqCigarTest } } - SeqCigar[] set = new SeqCigar[] - { new SeqCigar(s), new SeqCigar(s_subsequence_gapped, 8, 48), - new SeqCigar(s_gapped) }; + SeqCigar[] set = new SeqCigar[] { new SeqCigar(s), + new SeqCigar(s_subsequence_gapped, 8, 48), new SeqCigar(s_gapped) }; Alignment al = new Alignment(set); for (int i = 0; i < al.getHeight(); i++) { @@ -99,9 +178,8 @@ public class SeqCigarTest } System.out.println("Gapped."); - set = new SeqCigar[] - { new SeqCigar(s), new SeqCigar(s_subsequence_gapped, 8, 48), - new SeqCigar(s_gapped) }; + set = new SeqCigar[] { new SeqCigar(s), + new SeqCigar(s_subsequence_gapped, 8, 48), new SeqCigar(s_gapped) }; set[0].deleteRange(20, 25); al = new Alignment(set); for (int i = 0; i < al.getHeight(); i++) @@ -126,31 +204,35 @@ public class SeqCigarTest * @return String */ - protected void testCigar_string(Sequence seq, String ex_cs_gapped) { SeqCigar c_sgapped = new SeqCigar(seq); String cs_gapped = c_sgapped.getCigarstring(); - assertEquals("Failed getCigarstring", ex_cs_gapped, - cs_gapped); + assertEquals("Failed getCigarstring", ex_cs_gapped, cs_gapped); } - - protected void testSeqRecovery(SeqCigar gen_sgapped, - SequenceI s_gapped) + protected boolean testSeqRecovery(SeqCigar gen_sgapped, SequenceI s_gapped,boolean startEndCheck) { // this is non-rigorous - start and end recovery is not tested. SequenceI gen_sgapped_s = gen_sgapped.getSeq('-'); // assertEquals("Couldn't reconstruct sequence", s_gapped.getSequence(), // gen_sgapped_s); - if (!gen_sgapped_s.getSequence().equals(s_gapped.getSequence())) + if (!gen_sgapped_s.getSequenceAsString().equals( + s_gapped.getSequenceAsString())) { // TODO: investigate errors reported here, to allow full conversion to // passing JUnit assertion form System.err.println("Couldn't reconstruct sequence.\n" + gen_sgapped_s.getSequenceAsString() + "\n" + s_gapped.getSequenceAsString()); + return false; + } + if (startEndCheck) + { + assertEquals("Start not conserved in reconstructed sequence",s_gapped.getStart(),gen_sgapped_s.getStart()); + assertEquals("End not conserved in reconstructed sequence",s_gapped.getEnd(),gen_sgapped_s.getEnd()); } + return true; } }