X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=test%2Fjalview%2Futil%2FDnaUtilsTest.java;fp=test%2Fjalview%2Futil%2FDnaUtilsTest.java;h=af76885ba19d017a8b8deb4bd94a5f4e2357a49d;hb=a4507b66add69be7e5097dcc8fbd9bd08b0626cb;hp=0000000000000000000000000000000000000000;hpb=ca15c06c7c05af6f540fdd2a6f9a8fb76f8ef76d;p=jalview.git diff --git a/test/jalview/util/DnaUtilsTest.java b/test/jalview/util/DnaUtilsTest.java new file mode 100644 index 0000000..af76885 --- /dev/null +++ b/test/jalview/util/DnaUtilsTest.java @@ -0,0 +1,107 @@ +package jalview.util; + +import static org.testng.AssertJUnit.assertEquals; +import static org.testng.AssertJUnit.assertNull; +import static org.testng.AssertJUnit.fail; + +import java.util.List; + +import org.testng.annotations.Test; + +public class DnaUtilsTest +{ + /** + * Tests for parsing an ENA/GenBank location specifier + * + * @see http://www.insdc.org/files/feature_table.html#3.4 + */ + @Test(groups = { "Functional" }) + public void testParseLocation() + { + /* + * simple range + */ + List ranges = DnaUtils.parseLocation("12..78"); + assertEquals(1, ranges.size()); + assertEquals(12, ranges.get(0)[0]); + assertEquals(78, ranges.get(0)[1]); + + /* + * join of simple ranges + */ + ranges = DnaUtils.parseLocation("join(12..78,134..202,322..345)"); + assertEquals(3, ranges.size()); + assertEquals(12, ranges.get(0)[0]); + assertEquals(78, ranges.get(0)[1]); + assertEquals(134, ranges.get(1)[0]); + assertEquals(202, ranges.get(1)[1]); + assertEquals(322, ranges.get(2)[0]); + assertEquals(345, ranges.get(2)[1]); + + /* + * complement of a simple range + */ + ranges = DnaUtils.parseLocation("complement(34..126)"); + assertEquals(1, ranges.size()); + assertEquals(126, ranges.get(0)[0]); + assertEquals(34, ranges.get(0)[1]); + + /* + * complement of a join + */ + ranges = DnaUtils + .parseLocation("complement(join(2691..4571,4918..5163))"); + assertEquals(2, ranges.size()); + assertEquals(5163, ranges.get(0)[0]); + assertEquals(4918, ranges.get(0)[1]); + assertEquals(4571, ranges.get(1)[0]); + assertEquals(2691, ranges.get(1)[1]); + + /* + * join of two complements + */ + ranges = DnaUtils + .parseLocation("join(complement(4918..5163),complement(2691..4571))"); + assertEquals(2, ranges.size()); + assertEquals(5163, ranges.get(0)[0]); + assertEquals(4918, ranges.get(0)[1]); + assertEquals(4571, ranges.get(1)[0]); + assertEquals(2691, ranges.get(1)[1]); + + /* + * join complement to non-complement + * @see http://www.ncbi.nlm.nih.gov/genbank/genomesubmit_annotation/ Transpliced Genes + */ + ranges = DnaUtils + .parseLocation("join(complement(36618..36700),86988..87064)"); + assertEquals(2, ranges.size()); + assertEquals(36700, ranges.get(0)[0]); + assertEquals(36618, ranges.get(0)[1]); + assertEquals(86988, ranges.get(1)[0]); + assertEquals(87064, ranges.get(1)[1]); + + /* + * valid things we don't yet handle + */ + assertNull(DnaUtils.parseLocation("<34..126")); + assertNull(DnaUtils.parseLocation("34..>126")); + assertNull(DnaUtils.parseLocation("34.126")); + assertNull(DnaUtils.parseLocation("34^126")); + + /* + * invalid things + */ + assertNull(DnaUtils.parseLocation("")); + assertNull(DnaUtils.parseLocation("JOIN(1..2)")); + assertNull(DnaUtils.parseLocation("join(1..2")); + try + { + assertNull(DnaUtils.parseLocation(null)); + fail("Expected exception"); + } catch (NullPointerException e) + { + // expected + } + } + +}