X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=test%2Fjalview%2Fio%2Fgff%2FGffHelperBaseTest.java;fp=test%2Fjalview%2Fio%2Fgff%2FGffHelperBaseTest.java;h=fe8f88ed7cffed7e7716170b2835f37b40574950;hb=8f920d337154e092f5f9056ffde3cdf2735eca43;hp=0000000000000000000000000000000000000000;hpb=da768251d307c7ce11283d72e0e522b2c5fac526;p=jalview.git diff --git a/test/jalview/io/gff/GffHelperBaseTest.java b/test/jalview/io/gff/GffHelperBaseTest.java new file mode 100644 index 0000000..fe8f88e --- /dev/null +++ b/test/jalview/io/gff/GffHelperBaseTest.java @@ -0,0 +1,168 @@ +package jalview.io.gff; + +import static org.testng.AssertJUnit.assertEquals; +import static org.testng.AssertJUnit.assertFalse; +import static org.testng.AssertJUnit.assertTrue; + +import java.util.Arrays; +import java.util.List; +import java.util.Map; + +import org.testng.annotations.Test; + +public class GffHelperBaseTest +{ + + /** + * Test the method that parses lines like
+ * ID=2345;Name=Something,Another thing;Notes=Hello;Notes=World + */ + @Test(groups = { "Functional" }) + public void testParseNameValuePairs() + { + assertTrue(GffHelperBase.parseNameValuePairs(null, ";", ' ', ",") + .isEmpty()); + assertTrue(GffHelperBase.parseNameValuePairs("", ";", ' ', ",") + .isEmpty()); + assertTrue(GffHelperBase.parseNameValuePairs("hello=world", ";", ' ', + ",").isEmpty()); + + Map> map = GffHelperBase.parseNameValuePairs( + "hello world", ";", ' ', ", "); + assertEquals(1, map.size()); + assertEquals(1, map.get("hello").size()); + assertEquals("world", map.get("hello").get(0)); + + map = GffHelperBase + .parseNameValuePairs( + "Method= manual curation ;nothing; Notes=F2 S ; Notes=Metal,Shiny; Type=", + ";", '=', ","); + + // Type is ignored as no value was supplied + assertEquals(2, map.size()); + + assertEquals(1, map.get("Method").size()); + assertEquals("manual curation", map.get("Method").get(0)); // trimmed + + assertEquals(3, map.get("Notes").size()); + assertEquals("F2 S", map.get("Notes").get(0)); + assertEquals("Metal", map.get("Notes").get(1)); + assertEquals("Shiny", map.get("Notes").get(2)); + } + + /** + * Test for the method that tries to trim mappings to equivalent lengths + */ + @Test(groups = "Functional") + public void testTrimMapping() + { + int[] from = { 1, 12 }; + int[] to = { 20, 31 }; + assertTrue(GffHelperBase.trimMapping(from, to, 1, 1)); + assertEquals("[1, 12]", Arrays.toString(from)); // unchanged + assertEquals("[20, 31]", Arrays.toString(to)); // unchanged + + // from too long: + from = new int[] { 1, 13 }; + assertTrue(GffHelperBase.trimMapping(from, to, 1, 1)); + assertEquals("[1, 12]", Arrays.toString(from)); // trimmed + assertEquals("[20, 31]", Arrays.toString(to)); // unchanged + + // to too long: + to = new int[] { 20, 33 }; + assertTrue(GffHelperBase.trimMapping(from, to, 1, 1)); + assertEquals("[1, 12]", Arrays.toString(from)); // unchanged + assertEquals("[20, 31]", Arrays.toString(to)); // trimmed + + // from reversed: + from = new int[] { 12, 1 }; + assertTrue(GffHelperBase.trimMapping(from, to, 1, 1)); + assertEquals("[12, 1]", Arrays.toString(from)); // unchanged + assertEquals("[20, 31]", Arrays.toString(to)); // unchanged + + // to reversed: + to = new int[] { 31, 20 }; + assertTrue(GffHelperBase.trimMapping(from, to, 1, 1)); + assertEquals("[12, 1]", Arrays.toString(from)); // unchanged + assertEquals("[31, 20]", Arrays.toString(to)); // unchanged + + // from reversed and too long: + from = new int[] { 14, 1 }; + assertTrue(GffHelperBase.trimMapping(from, to, 1, 1)); + assertEquals("[14, 3]", Arrays.toString(from)); // end trimmed + assertEquals("[31, 20]", Arrays.toString(to)); // unchanged + + // to reversed and too long: + to = new int[] { 31, 10 }; + assertTrue(GffHelperBase.trimMapping(from, to, 1, 1)); + assertEquals("[14, 3]", Arrays.toString(from)); // unchanged + assertEquals("[31, 20]", Arrays.toString(to)); // end trimmed + + // cdna to peptide (matching) + from = new int[] { 1, 18 }; + to = new int[] { 4, 9 }; + assertTrue(GffHelperBase.trimMapping(from, to, 3, 1)); + assertEquals("[1, 18]", Arrays.toString(from)); // unchanged + assertEquals("[4, 9]", Arrays.toString(to)); // unchanged + + // overlong cdna to peptide + from = new int[] { 1, 20 }; + assertTrue(GffHelperBase.trimMapping(from, to, 3, 1)); + assertEquals("[1, 18]", Arrays.toString(from)); // end trimmed + assertEquals("[4, 9]", Arrays.toString(to)); // unchanged + + // overlong cdna (reversed) to peptide + from = new int[] { 20, 1 }; + assertTrue(GffHelperBase.trimMapping(from, to, 3, 1)); + assertEquals("[20, 3]", Arrays.toString(from)); // end trimmed + assertEquals("[4, 9]", Arrays.toString(to)); // unchanged + + // overlong cdna (reversed) to peptide (reversed) + from = new int[] { 20, 1 }; + to = new int[] { 9, 4 }; + assertTrue(GffHelperBase.trimMapping(from, to, 3, 1)); + assertEquals("[20, 3]", Arrays.toString(from)); // end trimmed + assertEquals("[9, 4]", Arrays.toString(to)); // unchanged + + // peptide to cdna (matching) + from = new int[] { 4, 9 }; + to = new int[] { 1, 18 }; + assertTrue(GffHelperBase.trimMapping(from, to, 1, 3)); + assertEquals("[4, 9]", Arrays.toString(from)); // unchanged + assertEquals("[1, 18]", Arrays.toString(to)); // unchanged + + // peptide to overlong cdna + to = new int[] { 1, 20 }; + assertTrue(GffHelperBase.trimMapping(from, to, 1, 3)); + assertEquals("[4, 9]", Arrays.toString(from)); // unchanged + assertEquals("[1, 18]", Arrays.toString(to)); // end trimmed + + // peptide to overlong cdna (reversed) + to = new int[] { 20, 1 }; + assertTrue(GffHelperBase.trimMapping(from, to, 1, 3)); + assertEquals("[4, 9]", Arrays.toString(from)); // unchanged + assertEquals("[20, 3]", Arrays.toString(to)); // end trimmed + + // peptide (reversed) to overlong cdna (reversed) + from = new int[] { 9, 4 }; + to = new int[] { 20, 1 }; + assertTrue(GffHelperBase.trimMapping(from, to, 1, 3)); + assertEquals("[9, 4]", Arrays.toString(from)); // unchanged + assertEquals("[20, 3]", Arrays.toString(to)); // end trimmed + + // overlong peptide to word-length cdna + from = new int[] { 4, 10 }; + to = new int[] { 1, 18 }; + assertTrue(GffHelperBase.trimMapping(from, to, 1, 3)); + assertEquals("[4, 9]", Arrays.toString(from)); // end trimmed + assertEquals("[1, 18]", Arrays.toString(to)); // unchanged + + // overlong peptide to non-word-length cdna + from = new int[] { 4, 10 }; + to = new int[] { 1, 19 }; + assertFalse(GffHelperBase.trimMapping(from, to, 1, 3)); + assertEquals("[4, 10]", Arrays.toString(from)); // unchanged + assertEquals("[1, 19]", Arrays.toString(to)); // unchanged + + } +}