Skip to content

Commit 451b559

Browse files
committed
tests for transcript sequence
1 parent a273e7c commit 451b559

9 files changed

Lines changed: 260 additions & 11 deletions

File tree

biojava-core/src/main/java/org/biojava/nbio/core/sequence/ExonComparator.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,6 @@ public class ExonComparator implements Comparator<ExonSequence>, Serializable{
3737

3838
@Override
3939
public int compare(ExonSequence o1, ExonSequence o2) {
40-
4140
return o1.getBioBegin() - o2.getBioBegin();
4241
}
4342

biojava-core/src/main/java/org/biojava/nbio/core/sequence/ExonSequence.java

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,15 +22,12 @@
2222
*/
2323
package org.biojava.nbio.core.sequence;
2424

25-
26-
2725
/**
2826
* A gene contains a collection of Exon sequences
2927
* @author Scooter Willis
3028
*/
3129
public class ExonSequence extends DNASequence {
3230

33-
//private static final Logger log = Logger.getLogger(ExonSequence.class.getName());
3431

3532
/**
3633
* Need a parent gene sequence and the bioBegin and bioEnd. An Exon sequence doesn't actually imply what the

biojava-core/src/main/java/org/biojava/nbio/core/sequence/TranscriptSequence.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,6 @@ public TranscriptSequence(GeneSequence parentDNASequence, int begin, int end) {
5959
setBioBegin(begin);
6060
setBioEnd(end);
6161
this.setCompoundSet(DNACompoundSet.getDNACompoundSet());
62-
6362
}
6463

6564
@Override
@@ -108,7 +107,7 @@ public LinkedHashMap<String, CDSSequence> getCDSSequences() {
108107
*/
109108
public CDSSequence addCDS(AccessionID accession, int begin, int end, int phase) throws Exception {
110109
if (cdsSequenceHashMap.containsKey(accession.getID())) {
111-
throw new Exception("Duplicate accesion id " + accession.getID());
110+
throw new Exception("Duplicate accession id " + accession.getID());
112111
}
113112
CDSSequence cdsSequence = new CDSSequence(this, begin, end, phase); //sense should be the same as parent
114113
cdsSequence.setAccession(accession);

biojava-core/src/test/java/org/biojava/nbio/core/sequence/ChromosomeSequenceTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,8 @@ void before() throws CompoundNotFoundException {
2626
@Test
2727
void beginAndEndAreLengthOfSequence() {
2828
assertEquals(1, seq.getBioBegin());
29-
assertEquals(208, seq.getBioEnd());
30-
assertEquals(208, seq.getLength());
29+
assertEquals(210, seq.getBioEnd());
30+
assertEquals(210, seq.getLength());
3131
}
3232

3333
@Test
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
package org.biojava.nbio.core.sequence;
2+
3+
import org.junit.jupiter.api.Test;
4+
5+
import java.util.ArrayList;
6+
import java.util.Collections;
7+
import java.util.List;
8+
9+
import static org.biojava.nbio.core.sequence.SequenceTestUtils.*;
10+
import static org.junit.jupiter.api.Assertions.*;
11+
12+
class ExonComparatorTest {
13+
14+
@Test
15+
void sortPositiveStrandExons() throws Exception {
16+
GeneSequence geneSequence = anyGeneSequence();
17+
// added in order 2,3,1
18+
ExonSequence e2 = geneSequence.addExon(new AccessionID("b"), 40, 60);
19+
ExonSequence e3 = geneSequence.addExon(new AccessionID("c"), 80, 100);
20+
ExonSequence e1 = geneSequence.addExon(new AccessionID("a"), 10, 30);
21+
List<ExonSequence> exonsToSort = new ArrayList<>();
22+
exonsToSort.add(e2);
23+
exonsToSort.add(e3);
24+
exonsToSort.add(e1);
25+
Collections.sort(exonsToSort, new ExonComparator());
26+
// sorted by starting position, in 5' to 3' order
27+
assertEquals("a", exonsToSort.get(0).getAccession().getID());
28+
assertEquals("b", exonsToSort.get(1).getAccession().getID());
29+
assertEquals("c", exonsToSort.get(2).getAccession().getID());
30+
}
31+
32+
@Test
33+
void sortNegativeStrandExons() throws Exception {
34+
GeneSequence geneSequence = anyGeneSequence();
35+
geneSequence.setStrand(Strand.NEGATIVE);
36+
// added in order 2,3,1
37+
ExonSequence e2 = geneSequence.addExon(new AccessionID("b"), 60, 40);
38+
ExonSequence e3 = geneSequence.addExon(new AccessionID("c"), 100, 80);
39+
ExonSequence e1 = geneSequence.addExon(new AccessionID("a"), 30, 10);
40+
List<ExonSequence> exonsToSort = new ArrayList<>();
41+
exonsToSort.add(e2);
42+
exonsToSort.add(e3);
43+
exonsToSort.add(e1);
44+
Collections.sort(exonsToSort, new ExonComparator());
45+
// sorted by starting position - this is 3' - 5' order
46+
assertEquals("a", exonsToSort.get(0).getAccession().getID());
47+
assertEquals("b", exonsToSort.get(1).getAccession().getID());
48+
assertEquals("c", exonsToSort.get(2).getAccession().getID());
49+
}
50+
51+
}
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package org.biojava.nbio.core.sequence;
2+
3+
import org.biojava.nbio.core.exceptions.CompoundNotFoundException;
4+
import org.junit.jupiter.api.Disabled;
5+
import org.junit.jupiter.api.Test;
6+
7+
import static org.biojava.nbio.core.sequence.SequenceTestUtils.anyGeneSequence;
8+
import static org.junit.jupiter.api.Assertions.*;
9+
10+
class ExonSequenceTest {
11+
@Test
12+
void createExon() throws CompoundNotFoundException {
13+
GeneSequence gene = anyGeneSequence();
14+
ExonSequence es = new ExonSequence(gene, 30, 40);
15+
assertEquals(11, es.getLength());
16+
}
17+
18+
@Test
19+
@Disabled("getAsList throws NPE in AbstractSequence#equals")
20+
void equalsAndHaschcode() throws CompoundNotFoundException {
21+
GeneSequence gene = anyGeneSequence();
22+
ExonSequence es = new ExonSequence(gene, 30, 40);
23+
ExonSequence es2 = new ExonSequence(gene, 30, 40);
24+
// calling equals throws npe
25+
// assertEquals(es, es2);
26+
27+
// this also throws NPE
28+
assertEquals(es.hashCode(), es2.hashCode());
29+
}
30+
31+
}

biojava-core/src/test/java/org/biojava/nbio/core/sequence/GeneSequenceTest.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -93,12 +93,14 @@ void getPositiveStrandSequence5To3Prime() {
9393
}
9494

9595
@Test
96-
@Disabled("not complementing - seems to complement twice???")
97-
void getNegativeStrandSequence5To3Prime() {
98-
geneSequence = new GeneSequence(chromosomeSequence, 5,15, Strand.NEGATIVE);
96+
@Disabled("not complementing - seems to complement twice???")
97+
void getNegativeStrandSequence5To3Prime() throws CompoundNotFoundException {
98+
ChromosomeSequence shortChrSeq= new ChromosomeSequence("TTTTTTTTTTTTTTT");
99+
geneSequence = new GeneSequence(shortChrSeq, 5,10, Strand.NEGATIVE);
99100
// this must be set to avoid NPE
100101
geneSequence.setAccession(new AccessionID("geneId"));
101102
DNASequence seq = geneSequence.getSequence5PrimeTo3Prime();
103+
//This should be sequence of A's ( as it's on complemetnary strand)but it is TTTTTTTT
102104
System.err.println( geneSequence.getSequence5PrimeTo3Prime().getSequenceAsString());
103105
}
104106

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
package org.biojava.nbio.core.sequence;
2+
3+
import org.biojava.nbio.core.exceptions.CompoundNotFoundException;
4+
5+
/**
6+
* Test utility methods for classes in this package
7+
*/
8+
public class SequenceTestUtils {
9+
10+
/**
11+
* A gene sequence of 190 bp length on + strand
12+
*
13+
* @return
14+
* @throws CompoundNotFoundException
15+
*/
16+
static GeneSequence anyGeneSequence() throws CompoundNotFoundException {
17+
ChromosomeSequence chr = new ChromosomeSequence(ChromosomeSequenceTest.CHROMOSOME_SEQ);
18+
GeneSequence gene = new GeneSequence(chr, 10, 200, Strand.POSITIVE);
19+
return gene;
20+
}
21+
22+
/**
23+
* A gene sequence of 190 bp length on MINUS strand
24+
*
25+
* @return
26+
* @throws CompoundNotFoundException
27+
*/
28+
static GeneSequence any3GeneSequence() throws CompoundNotFoundException {
29+
ChromosomeSequence chr = new ChromosomeSequence(ChromosomeSequenceTest.CHROMOSOME_SEQ);
30+
GeneSequence gene = new GeneSequence(chr, 10, 200, Strand.NEGATIVE);
31+
return gene;
32+
}
33+
34+
/**
35+
* Generate a GeneSequence as a subsequence of defined chromosome sequence.
36+
* Accession ID is set to avoid NPE thrown
37+
*
38+
* @param chromosomeSequence
39+
* @param bioStart
40+
* @param bioEnd
41+
* @param strand
42+
* @return
43+
* @throws CompoundNotFoundException
44+
*/
45+
static GeneSequence fromSequence(String chromosomeSequence, int bioStart, int bioEnd, Strand strand) throws CompoundNotFoundException {
46+
ChromosomeSequence chr = new ChromosomeSequence(chromosomeSequence);
47+
GeneSequence gene = new GeneSequence(chr, bioStart, bioEnd, strand);
48+
gene.setAccession(new AccessionID("Gene1"));
49+
return gene;
50+
}
51+
52+
/**
53+
* Creates a transcript from coordinates on the supplied chromosome sequence.
54+
* The GeneSequence is set to same length as Chromosomal sequence for simplicity.
55+
* Accession ID is set to avoid NPE thrown from some methods
56+
*
57+
* @param chromosomeSequence
58+
* @param bioStart
59+
* @param bioEnd
60+
* @param strand
61+
* @return
62+
* @throws CompoundNotFoundException
63+
*/
64+
static TranscriptSequence transcriptFromSequence(String chromosomeSequence, int bioStart, int bioEnd, Strand strand) throws CompoundNotFoundException {
65+
GeneSequence gene = fromSequence(chromosomeSequence, 1, chromosomeSequence.length(), strand);
66+
TranscriptSequence ts = new TranscriptSequence(gene, bioStart, bioEnd);
67+
ts.setAccession(new AccessionID("Transcript1"));
68+
return ts;
69+
}
70+
}
Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
package org.biojava.nbio.core.sequence;
2+
3+
import org.biojava.nbio.core.exceptions.CompoundNotFoundException;
4+
import org.junit.jupiter.api.BeforeEach;
5+
import org.junit.jupiter.api.Disabled;
6+
import org.junit.jupiter.api.Nested;
7+
import org.junit.jupiter.api.Test;
8+
9+
import static org.junit.jupiter.api.Assertions.*;
10+
11+
class TranscriptSequenceTest {
12+
GeneSequence anyGeneSequence;
13+
GeneSequence anyNegativeGeneSequence;
14+
TranscriptSequence transcriptSeq;
15+
TranscriptSequence transcriptNegativeSeq;
16+
17+
18+
@BeforeEach
19+
void setUp() throws CompoundNotFoundException {
20+
anyGeneSequence = SequenceTestUtils.anyGeneSequence();
21+
transcriptSeq = new TranscriptSequence(anyGeneSequence, 5, 100);
22+
anyNegativeGeneSequence = SequenceTestUtils.any3GeneSequence();
23+
transcriptNegativeSeq = new TranscriptSequence(anyNegativeGeneSequence, 5, 100);
24+
}
25+
26+
@Nested
27+
class AfterValidConstruction {
28+
@Test
29+
void lengthIsTSLength() {
30+
assertEquals(96, transcriptSeq.getLength());
31+
}
32+
33+
@Test
34+
void strandIsSameAsGene() {
35+
assertEquals(anyGeneSequence.getStrand(), transcriptSeq.getStrand());
36+
assertEquals(anyNegativeGeneSequence.getStrand(), transcriptNegativeSeq.getStrand());
37+
}
38+
39+
@Test
40+
void CDSListIsEmpty() {
41+
assertEquals(0, transcriptSeq.getCDSSequences().size());
42+
}
43+
44+
@Test
45+
@Disabled("NPE thrown from AbstractSequence 'getAsList'")
46+
void equals() {
47+
assertFalse(transcriptSeq.equals(transcriptNegativeSeq));
48+
}
49+
50+
@Test
51+
@Disabled("NPE thrown from AbstractSequence 'getAsList'")
52+
void hashcode() {
53+
assertFalse(transcriptSeq.hashCode() == (transcriptNegativeSeq.hashCode()));
54+
}
55+
}
56+
57+
@Test
58+
void addCDS() throws Exception {
59+
transcriptSeq.addCDS(new AccessionID("b"), 40, 50, 1);
60+
assertEquals(1, transcriptSeq.getCDSSequences().size());
61+
}
62+
63+
@Test
64+
void getCDNASeqPositiveStrand() throws Exception {
65+
String chrSeq = ChromosomeSequenceTest.CHROMOSOME_SEQ;
66+
// must set this to avoid NPE when generating sequence
67+
68+
transcriptSeq.setAccession(new AccessionID("T1"));
69+
// make 2 CDS that are contiguous. These can be added in any order and are sorted OK
70+
CDSSequence s1 = transcriptSeq.addCDS(new AccessionID("a"), 11, 20, 1);
71+
assertEquals(chrSeq, s1.getSequenceAsString());
72+
73+
CDSSequence s2 = transcriptSeq.addCDS(new AccessionID("b"), 1, 10, 1);
74+
assertEquals(chrSeq, s2.getSequenceAsString());
75+
76+
DNASequence cDNA = transcriptSeq.getDNACodingSequence();
77+
assertEquals(chrSeq.substring(0, 20), cDNA.getSequenceAsString());
78+
assertEquals(20, cDNA.getLength());
79+
}
80+
81+
@Test
82+
@Disabled("is reversed, not complemented?")
83+
void getCDNASeqNegativeStrand() throws Exception {
84+
TranscriptSequence ts = SequenceTestUtils.transcriptFromSequence("AAAAACCCCCTTTTGGGGGG", 3, 10, Strand.NEGATIVE);
85+
CDSSequence s2 = ts.addCDS(new AccessionID("b"), 1, 10, 0);
86+
// this should be GGGGGTTTTT( ie the reverse complement of the chromosome sequence,
87+
// but is just reversed and generates CCCCCAAAAA
88+
//assertEquals("GGGGGTTTTT", ts.getDNACodingSequence());
89+
}
90+
91+
@Test
92+
@Disabled("Can't remove, as NPE thrown from equals()")
93+
void removeCDS() throws Exception {
94+
transcriptSeq.addCDS(new AccessionID("a"), 50, 60, 1);
95+
assertEquals(1, transcriptSeq.getCDSSequences().size());
96+
// throws NPE
97+
transcriptSeq.removeCDS("a");
98+
assertEquals(0, transcriptSeq.getCDSSequences().size());
99+
}
100+
}

0 commit comments

Comments
 (0)