2ef4c99396e15ba50b71483386e602fe14550fb1
[jalview.git] / test / jalview / io / gff / InterProScanHelperTest.java
1 package jalview.io.gff;
2
3 import static org.testng.AssertJUnit.assertEquals;
4 import static org.testng.AssertJUnit.assertSame;
5 import static org.testng.AssertJUnit.assertTrue;
6 import static org.testng.internal.junit.ArrayAsserts.assertArrayEquals;
7
8 import jalview.datamodel.AlignedCodonFrame;
9 import jalview.datamodel.Alignment;
10 import jalview.datamodel.AlignmentI;
11 import jalview.datamodel.Sequence;
12 import jalview.datamodel.SequenceDummy;
13 import jalview.datamodel.SequenceI;
14
15 import java.io.IOException;
16 import java.util.ArrayList;
17 import java.util.List;
18 import java.util.Map;
19
20 import org.testng.annotations.Test;
21
22 public class InterProScanHelperTest
23 {
24
25   /**
26    * Test processing one InterProScan GFF line
27    * 
28    * @throws IOException
29    */
30   @Test(groups = "Functional")
31   public void testProcessProteinMatch() throws IOException
32   {
33     InterProScanHelper testee = new InterProScanHelper();
34     List<SequenceI> newseqs = new ArrayList<SequenceI>();
35     String[] gff = "Submitted\tPfam\tprotein_match\t5\t30\t0\t+\t.\tName=PF12838;Target=Submitted 5 30;signature_desc=4Fe-4S dicluster domain;ID=match$17_5_30"
36             .split("\\t");
37     SequenceI seq = new Sequence("Prot1", "PQRASTGKEEDVMIWCHQN");
38     seq.createDatasetSequence();
39     AlignmentI align = new Alignment(new SequenceI[] {});
40     Map<String, List<String>> set = Gff3Helper.parseNameValuePairs(gff[8]);
41   
42     /*
43      * this should create a mapping from Prot1/5-30 to virtual sequence
44      * match$17_5_30 (added to newseqs) positions 1-26
45      */
46     testee.processProteinMatch(set, seq, gff, align, newseqs, false);
47     assertEquals(1, newseqs.size());
48     assertTrue(newseqs.get(0) instanceof SequenceDummy);
49     assertEquals("match$17_5_30", newseqs.get(0).getName());
50     assertEquals(1, align.getCodonFrames().size());
51     AlignedCodonFrame mapping = align.getCodonFrames().iterator().next();
52
53     /*
54      * 'dnaseqs' (map from) is here [Prot1]
55      * 'aaseqs' (map to) is here [match$17_5_30]
56      */
57     // TODO use more suitable naming in AlignedCodonFrame
58     assertEquals(1, mapping.getAaSeqs().length);
59     assertSame(seq.getDatasetSequence(), mapping.getdnaSeqs()[0]);
60     assertEquals(1, mapping.getdnaSeqs().length);
61     assertSame(newseqs.get(0), mapping.getAaSeqs()[0]);
62     assertEquals(1, mapping.getdnaToProt().length);
63     assertEquals(1, mapping.getdnaToProt()[0].getFromRanges().size());
64     assertArrayEquals(new int[] { 5, 30 }, mapping.getdnaToProt()[0]
65             .getFromRanges().get(0));
66     assertEquals(1, mapping.getdnaToProt()[0].getToRanges().size());
67     assertArrayEquals(new int[] { 1, 26 }, mapping.getdnaToProt()[0]
68             .getToRanges().get(0));
69   }
70
71 }