| 1 |
|
|
| 2 |
|
|
| 3 |
|
|
| 4 |
|
|
| 5 |
|
|
| 6 |
|
|
| 7 |
|
|
| 8 |
|
|
| 9 |
|
|
| 10 |
|
|
| 11 |
|
|
| 12 |
|
|
| 13 |
|
|
| 14 |
|
|
| 15 |
|
|
| 16 |
|
|
| 17 |
|
|
| 18 |
|
|
| 19 |
|
|
| 20 |
|
|
| 21 |
|
package jalview.io; |
| 22 |
|
|
| 23 |
|
import static org.testng.AssertJUnit.assertEquals; |
| 24 |
|
import static org.testng.AssertJUnit.assertFalse; |
| 25 |
|
import static org.testng.AssertJUnit.assertNotNull; |
| 26 |
|
import static org.testng.AssertJUnit.assertSame; |
| 27 |
|
import static org.testng.AssertJUnit.assertTrue; |
| 28 |
|
import static org.testng.internal.junit.ArrayAsserts.assertArrayEquals; |
| 29 |
|
|
| 30 |
|
import java.awt.Color; |
| 31 |
|
import java.io.File; |
| 32 |
|
import java.io.IOException; |
| 33 |
|
import java.util.HashMap; |
| 34 |
|
import java.util.Iterator; |
| 35 |
|
import java.util.List; |
| 36 |
|
import java.util.Map; |
| 37 |
|
|
| 38 |
|
import org.testng.annotations.AfterClass; |
| 39 |
|
import org.testng.annotations.BeforeClass; |
| 40 |
|
import org.testng.annotations.Test; |
| 41 |
|
|
| 42 |
|
import jalview.api.FeatureColourI; |
| 43 |
|
import jalview.api.FeatureRenderer; |
| 44 |
|
import jalview.datamodel.Alignment; |
| 45 |
|
import jalview.datamodel.AlignmentI; |
| 46 |
|
import jalview.datamodel.SequenceDummy; |
| 47 |
|
import jalview.datamodel.SequenceFeature; |
| 48 |
|
import jalview.datamodel.SequenceI; |
| 49 |
|
import jalview.datamodel.features.FeatureMatcher; |
| 50 |
|
import jalview.datamodel.features.FeatureMatcherI; |
| 51 |
|
import jalview.datamodel.features.FeatureMatcherSet; |
| 52 |
|
import jalview.datamodel.features.FeatureMatcherSetI; |
| 53 |
|
import jalview.datamodel.features.SequenceFeatures; |
| 54 |
|
import jalview.gui.AlignFrame; |
| 55 |
|
import jalview.gui.Desktop; |
| 56 |
|
import jalview.gui.JvOptionPane; |
| 57 |
|
import jalview.schemes.FeatureColour; |
| 58 |
|
import jalview.structure.StructureSelectionManager; |
| 59 |
|
import jalview.util.matcher.Condition; |
| 60 |
|
import jalview.viewmodel.seqfeatures.FeatureRendererModel; |
| 61 |
|
import jalview.viewmodel.seqfeatures.FeatureRendererModel.FeatureSettingsBean; |
| 62 |
|
import junit.extensions.PA; |
| 63 |
|
|
| |
|
| 99.8% |
Uncovered Elements: 1 (422) |
Complexity: 19 |
Complexity Density: 0.05 |
|
| 64 |
|
public class FeaturesFileTest |
| 65 |
|
{ |
| 66 |
|
private static String simpleGffFile = "examples/testdata/simpleGff3.gff"; |
| 67 |
|
|
| |
|
| 100% |
Uncovered Elements: 0 (2) |
Complexity: 1 |
Complexity Density: 0.5 |
|
| 68 |
1 |
@AfterClass(alwaysRun = true)... |
| 69 |
|
public void tearDownAfterClass() |
| 70 |
|
{ |
| 71 |
|
|
| 72 |
|
|
| 73 |
|
|
| 74 |
1 |
StructureSelectionManager ssm = StructureSelectionManager |
| 75 |
|
.getStructureSelectionManager(Desktop.instance); |
| 76 |
1 |
ssm.resetAll(); |
| 77 |
|
} |
| 78 |
|
|
| |
|
| 100% |
Uncovered Elements: 0 (2) |
Complexity: 1 |
Complexity Density: 0.5 |
|
| 79 |
1 |
@BeforeClass(alwaysRun = true)... |
| 80 |
|
public void setUpJvOptionPane() |
| 81 |
|
{ |
| 82 |
1 |
JvOptionPane.setInteractiveMode(false); |
| 83 |
1 |
JvOptionPane.setMockResponse(JvOptionPane.CANCEL_OPTION); |
| 84 |
|
} |
| 85 |
|
|
| |
|
| 100% |
Uncovered Elements: 0 (69) |
Complexity: 1 |
Complexity Density: 0.01 |
1PASS
|
|
| 86 |
1 |
@Test(groups = { "Functional" })... |
| 87 |
|
public void testParse() throws Exception |
| 88 |
|
{ |
| 89 |
1 |
File f = new File("examples/uniref50.fa"); |
| 90 |
1 |
AlignmentI al = readAlignmentFile(f); |
| 91 |
1 |
AlignFrame af = new AlignFrame(al, 500, 500); |
| 92 |
1 |
Map<String, FeatureColourI> colours = af.getFeatureRenderer() |
| 93 |
|
.getFeatureColours(); |
| 94 |
1 |
FeaturesFile featuresFile = new FeaturesFile( |
| 95 |
|
"examples/exampleFeatures.txt", DataSourceType.FILE); |
| 96 |
1 |
assertTrue( |
| 97 |
|
"Test " + "Features file test" |
| 98 |
|
+ "\nFailed to parse features file.", |
| 99 |
|
featuresFile.parse(al.getDataset(), colours, true)); |
| 100 |
|
|
| 101 |
|
|
| 102 |
|
|
| 103 |
|
|
| 104 |
|
|
| 105 |
1 |
colours = af.getFeatureRenderer().getFeatureColours(); |
| 106 |
1 |
assertEquals("27 feature group colours not found", 27, colours.size()); |
| 107 |
1 |
assertEquals(colours.get("Cath").getColour(), new Color(0x93b1d1)); |
| 108 |
1 |
assertEquals(colours.get("ASX-MOTIF").getColour(), new Color(0x6addbb)); |
| 109 |
1 |
FeatureColourI kdColour = colours.get("kdHydrophobicity"); |
| 110 |
1 |
assertTrue(kdColour.isGraduatedColour()); |
| 111 |
1 |
assertTrue(kdColour.isAboveThreshold()); |
| 112 |
1 |
assertEquals(-2f, kdColour.getThreshold()); |
| 113 |
|
|
| 114 |
|
|
| 115 |
|
|
| 116 |
|
|
| 117 |
1 |
List<SequenceFeature> sfs = al.getSequenceAt(0).getDatasetSequence() |
| 118 |
|
.getSequenceFeatures(); |
| 119 |
1 |
SequenceFeatures.sortFeatures(sfs, true); |
| 120 |
1 |
assertEquals(8, sfs.size()); |
| 121 |
|
|
| 122 |
|
|
| 123 |
|
|
| 124 |
|
|
| 125 |
1 |
SequenceFeature sf = sfs.get(0); |
| 126 |
1 |
assertEquals("Pfam family%LINK%", sf.description); |
| 127 |
1 |
assertEquals(0, sf.begin); |
| 128 |
1 |
assertEquals(0, sf.end); |
| 129 |
1 |
assertEquals("uniprot", sf.featureGroup); |
| 130 |
1 |
assertEquals("Pfam", sf.type); |
| 131 |
1 |
assertEquals(1, sf.links.size()); |
| 132 |
1 |
assertEquals("Pfam family|http://pfam.xfam.org/family/PF00111", |
| 133 |
|
sf.links.get(0)); |
| 134 |
|
|
| 135 |
1 |
sf = sfs.get(1); |
| 136 |
1 |
assertEquals("Ferredoxin_fold Status: True Positive ", sf.description); |
| 137 |
1 |
assertEquals(3, sf.begin); |
| 138 |
1 |
assertEquals(93, sf.end); |
| 139 |
1 |
assertEquals("uniprot", sf.featureGroup); |
| 140 |
1 |
assertEquals("Cath", sf.type); |
| 141 |
|
|
| 142 |
1 |
sf = sfs.get(2); |
| 143 |
1 |
assertEquals("Fer2 Status: True Positive Pfam 8_8%LINK%", |
| 144 |
|
sf.description); |
| 145 |
1 |
assertEquals("Pfam 8_8|http://pfam.xfam.org/family/PF00111", |
| 146 |
|
sf.links.get(0)); |
| 147 |
1 |
assertEquals(8, sf.begin); |
| 148 |
1 |
assertEquals(83, sf.end); |
| 149 |
1 |
assertEquals("uniprot", sf.featureGroup); |
| 150 |
1 |
assertEquals("Pfam", sf.type); |
| 151 |
|
|
| 152 |
1 |
sf = sfs.get(3); |
| 153 |
1 |
assertEquals("Iron-sulfur (2Fe-2S)", sf.description); |
| 154 |
1 |
assertEquals(39, sf.begin); |
| 155 |
1 |
assertEquals(39, sf.end); |
| 156 |
1 |
assertEquals("uniprot", sf.featureGroup); |
| 157 |
1 |
assertEquals("METAL", sf.type); |
| 158 |
|
|
| 159 |
1 |
sf = sfs.get(4); |
| 160 |
1 |
assertEquals("Iron-sulfur (2Fe-2S)", sf.description); |
| 161 |
1 |
assertEquals(44, sf.begin); |
| 162 |
1 |
assertEquals(44, sf.end); |
| 163 |
1 |
assertEquals("uniprot", sf.featureGroup); |
| 164 |
1 |
assertEquals("METAL", sf.type); |
| 165 |
|
|
| 166 |
1 |
sf = sfs.get(5); |
| 167 |
1 |
assertEquals("Iron-sulfur (2Fe-2S)", sf.description); |
| 168 |
1 |
assertEquals(47, sf.begin); |
| 169 |
1 |
assertEquals(47, sf.end); |
| 170 |
1 |
assertEquals("uniprot", sf.featureGroup); |
| 171 |
1 |
assertEquals("METAL", sf.type); |
| 172 |
|
|
| 173 |
1 |
sf = sfs.get(6); |
| 174 |
1 |
assertEquals("Iron-sulfur (2Fe-2S)", sf.description); |
| 175 |
1 |
assertEquals(77, sf.begin); |
| 176 |
1 |
assertEquals(77, sf.end); |
| 177 |
1 |
assertEquals("uniprot", sf.featureGroup); |
| 178 |
1 |
assertEquals("METAL", sf.type); |
| 179 |
|
|
| 180 |
1 |
sf = sfs.get(7); |
| 181 |
1 |
assertEquals( |
| 182 |
|
"High confidence server. Only hits with scores over 0.8 are reported. PHOSPHORYLATION (T) 89_8%LINK%", |
| 183 |
|
sf.description); |
| 184 |
1 |
assertEquals( |
| 185 |
|
"PHOSPHORYLATION (T) 89_8|http://www.cbs.dtu.dk/cgi-bin/proview/webface-link?seqid=P83527&service=NetPhos-2.0", |
| 186 |
|
sf.links.get(0)); |
| 187 |
1 |
assertEquals(89, sf.begin); |
| 188 |
1 |
assertEquals(89, sf.end); |
| 189 |
1 |
assertEquals("netphos", sf.featureGroup); |
| 190 |
1 |
assertEquals("PHOSPHORYLATION (T)", sf.type); |
| 191 |
|
} |
| 192 |
|
|
| 193 |
|
|
| 194 |
|
|
| 195 |
|
|
| 196 |
|
|
| 197 |
|
@throws |
| 198 |
|
|
| |
|
| 100% |
Uncovered Elements: 0 (28) |
Complexity: 1 |
Complexity Density: 0.04 |
1PASS
|
|
| 199 |
1 |
@Test(groups = { "Functional" })... |
| 200 |
|
public void testParse_mixedJalviewGff() throws Exception |
| 201 |
|
{ |
| 202 |
1 |
File f = new File("examples/uniref50.fa"); |
| 203 |
1 |
AlignmentI al = readAlignmentFile(f); |
| 204 |
1 |
AlignFrame af = new AlignFrame(al, 500, 500); |
| 205 |
1 |
Map<String, FeatureColourI> colours = af.getFeatureRenderer() |
| 206 |
|
.getFeatureColours(); |
| 207 |
|
|
| 208 |
1 |
String gffData = "METAL\tcc9900\n" + "GFF\n" |
| 209 |
|
+ "FER_CAPAA\tuniprot\tMETAL\t44\t45\t4.0\t.\t.\tNote Iron-sulfur; Note 2Fe-2S\n" |
| 210 |
|
+ "FER1_SOLLC\tuniprot\tPfam\t55\t130\t2.0\t.\t."; |
| 211 |
1 |
FeaturesFile featuresFile = new FeaturesFile(gffData, |
| 212 |
|
DataSourceType.PASTE); |
| 213 |
1 |
assertTrue("Failed to parse features file", |
| 214 |
|
featuresFile.parse(al.getDataset(), colours, true)); |
| 215 |
|
|
| 216 |
|
|
| 217 |
1 |
colours = af.getFeatureRenderer().getFeatureColours(); |
| 218 |
1 |
assertEquals("1 feature group colours not found", 1, colours.size()); |
| 219 |
1 |
assertEquals(colours.get("METAL").getColour(), new Color(0xcc9900)); |
| 220 |
|
|
| 221 |
|
|
| 222 |
1 |
List<SequenceFeature> sfs = al.getSequenceAt(0).getDatasetSequence() |
| 223 |
|
.getSequenceFeatures(); |
| 224 |
1 |
assertEquals(1, sfs.size()); |
| 225 |
1 |
SequenceFeature sf = sfs.get(0); |
| 226 |
1 |
assertEquals("Iron-sulfur,2Fe-2S", sf.description); |
| 227 |
1 |
assertEquals(44, sf.begin); |
| 228 |
1 |
assertEquals(45, sf.end); |
| 229 |
1 |
assertEquals("uniprot", sf.featureGroup); |
| 230 |
1 |
assertEquals("METAL", sf.type); |
| 231 |
1 |
assertEquals(4f, sf.getScore(), 0.001f); |
| 232 |
|
|
| 233 |
|
|
| 234 |
1 |
sfs = al.getSequenceAt(2).getDatasetSequence().getSequenceFeatures(); |
| 235 |
1 |
assertEquals(1, sfs.size()); |
| 236 |
1 |
sf = sfs.get(0); |
| 237 |
1 |
assertEquals("uniprot", sf.description); |
| 238 |
1 |
assertEquals(55, sf.begin); |
| 239 |
1 |
assertEquals(130, sf.end); |
| 240 |
1 |
assertEquals("uniprot", sf.featureGroup); |
| 241 |
1 |
assertEquals("Pfam", sf.type); |
| 242 |
1 |
assertEquals(2f, sf.getScore(), 0.001f); |
| 243 |
|
} |
| 244 |
|
|
| |
|
| 100% |
Uncovered Elements: 0 (7) |
Complexity: 1 |
Complexity Density: 0.14 |
|
| 245 |
8 |
public static AlignmentI readAlignmentFile(File f) throws IOException... |
| 246 |
|
{ |
| 247 |
8 |
System.out.println("Reading file: " + f); |
| 248 |
8 |
String ff = f.getPath(); |
| 249 |
8 |
FormatAdapter rf = new FormatAdapter(); |
| 250 |
|
|
| 251 |
8 |
AlignmentI al = rf.readFile(ff, DataSourceType.FILE, |
| 252 |
|
new IdentifyFile().identify(ff, DataSourceType.FILE)); |
| 253 |
|
|
| 254 |
8 |
al.setDataset(null); |
| 255 |
8 |
assertNotNull("Couldn't read supplied alignment data.", al); |
| 256 |
8 |
return al; |
| 257 |
|
} |
| 258 |
|
|
| 259 |
|
|
| 260 |
|
|
| 261 |
|
|
| 262 |
|
@throws |
| 263 |
|
|
| |
|
| 100% |
Uncovered Elements: 0 (33) |
Complexity: 1 |
Complexity Density: 0.03 |
1PASS
|
|
| 264 |
1 |
@Test(groups = { "Functional" })... |
| 265 |
|
public void testParse_pureGff3() throws Exception |
| 266 |
|
{ |
| 267 |
1 |
File f = new File("examples/uniref50.fa"); |
| 268 |
1 |
AlignmentI al = readAlignmentFile(f); |
| 269 |
1 |
AlignFrame af = new AlignFrame(al, 500, 500); |
| 270 |
1 |
Map<String, FeatureColourI> colours = af.getFeatureRenderer() |
| 271 |
|
.getFeatureColours(); |
| 272 |
|
|
| 273 |
|
|
| 274 |
|
|
| 275 |
1 |
String gffData = "##gff-version 3\n" |
| 276 |
|
+ "FER_CAPAA\tuniprot\tMETAL\t39\t39\t0.0\t.\t.\t" |
| 277 |
|
+ "Note=Iron-sulfur (2Fe-2S);Note=another note,and another;evidence=ECO%3B0000255%2CPROSITE%3DProRule:PRU00465;" |
| 278 |
|
+ "CSQ=AF=21,POLYPHEN=benign,possibly_damaging,clin_sig=Benign%3Dgood\n" |
| 279 |
|
+ "FER1_SOLLC\tuniprot\tPfam\t55\t130\t3.0\t.\t.\tID=$23"; |
| 280 |
1 |
FeaturesFile featuresFile = new FeaturesFile(gffData, |
| 281 |
|
DataSourceType.PASTE); |
| 282 |
1 |
assertTrue("Failed to parse features file", |
| 283 |
|
featuresFile.parse(al.getDataset(), colours, true)); |
| 284 |
|
|
| 285 |
|
|
| 286 |
1 |
List<SequenceFeature> sfs = al.getSequenceAt(0).getDatasetSequence() |
| 287 |
|
.getSequenceFeatures(); |
| 288 |
1 |
assertEquals(1, sfs.size()); |
| 289 |
1 |
SequenceFeature sf = sfs.get(0); |
| 290 |
|
|
| 291 |
1 |
assertEquals("Iron-sulfur (2Fe-2S),another note,and another", |
| 292 |
|
sf.description); |
| 293 |
1 |
assertEquals(39, sf.begin); |
| 294 |
1 |
assertEquals(39, sf.end); |
| 295 |
1 |
assertEquals("uniprot", sf.featureGroup); |
| 296 |
1 |
assertEquals("METAL", sf.type); |
| 297 |
1 |
assertEquals(5, sf.otherDetails.size()); |
| 298 |
1 |
assertEquals("ECO;0000255,PROSITE=ProRule:PRU00465", |
| 299 |
|
sf.getValue("evidence")); |
| 300 |
1 |
assertEquals("Iron-sulfur (2Fe-2S),another note,and another", |
| 301 |
|
sf.getValue("Note")); |
| 302 |
1 |
assertEquals("21", sf.getValueAsString("CSQ", "AF")); |
| 303 |
1 |
assertEquals("benign,possibly_damaging", |
| 304 |
|
sf.getValueAsString("CSQ", "POLYPHEN")); |
| 305 |
1 |
assertEquals("Benign=good", sf.getValueAsString("CSQ", "clin_sig")); |
| 306 |
|
|
| 307 |
|
|
| 308 |
1 |
assertEquals(".", sf.otherDetails.get("STRAND")); |
| 309 |
1 |
assertEquals(0, sf.getStrand()); |
| 310 |
1 |
assertEquals(".", sf.getPhase()); |
| 311 |
|
|
| 312 |
|
|
| 313 |
1 |
sfs = al.getSequenceAt(2).getDatasetSequence().getSequenceFeatures(); |
| 314 |
1 |
assertEquals(1, sfs.size()); |
| 315 |
1 |
sf = sfs.get(0); |
| 316 |
|
|
| 317 |
1 |
assertEquals("$23", sf.description); |
| 318 |
1 |
assertEquals(55, sf.begin); |
| 319 |
1 |
assertEquals(130, sf.end); |
| 320 |
1 |
assertEquals("uniprot", sf.featureGroup); |
| 321 |
1 |
assertEquals("Pfam", sf.type); |
| 322 |
1 |
assertEquals(3f, sf.getScore(), 0.001f); |
| 323 |
|
} |
| 324 |
|
|
| 325 |
|
|
| 326 |
|
|
| 327 |
|
|
| 328 |
|
|
| 329 |
|
@throws |
| 330 |
|
|
| |
|
| 100% |
Uncovered Elements: 0 (21) |
Complexity: 1 |
Complexity Density: 0.05 |
1PASS
|
|
| 331 |
1 |
@Test(groups = { "Functional" })... |
| 332 |
|
public void testParse_jalviewFeaturesOnly() throws Exception |
| 333 |
|
{ |
| 334 |
1 |
File f = new File("examples/uniref50.fa"); |
| 335 |
1 |
AlignmentI al = readAlignmentFile(f); |
| 336 |
1 |
AlignFrame af = new AlignFrame(al, 500, 500); |
| 337 |
1 |
Map<String, FeatureColourI> colours = af.getFeatureRenderer() |
| 338 |
|
.getFeatureColours(); |
| 339 |
|
|
| 340 |
|
|
| 341 |
|
|
| 342 |
|
|
| 343 |
1 |
String featureData = "Iron-sulfur (2Fe-2S)\tFER_CAPAA\t-1\t39\t39\tMETAL\n" |
| 344 |
|
+ "Iron-phosphorus (2Fe-P)\tID_NOT_SPECIFIED\t2\t86\t87\tMETALLIC\n"; |
| 345 |
1 |
FeaturesFile featuresFile = new FeaturesFile(featureData, |
| 346 |
|
DataSourceType.PASTE); |
| 347 |
1 |
assertTrue("Failed to parse features file", |
| 348 |
|
featuresFile.parse(al.getDataset(), colours, true)); |
| 349 |
|
|
| 350 |
|
|
| 351 |
1 |
List<SequenceFeature> sfs = al.getSequenceAt(0).getDatasetSequence() |
| 352 |
|
.getSequenceFeatures(); |
| 353 |
1 |
assertEquals(1, sfs.size()); |
| 354 |
1 |
SequenceFeature sf = sfs.get(0); |
| 355 |
1 |
assertEquals("Iron-sulfur (2Fe-2S)", sf.description); |
| 356 |
1 |
assertEquals(39, sf.begin); |
| 357 |
1 |
assertEquals(39, sf.end); |
| 358 |
1 |
assertEquals("METAL", sf.type); |
| 359 |
|
|
| 360 |
|
|
| 361 |
1 |
sfs = al.getSequenceAt(2).getDatasetSequence().getSequenceFeatures(); |
| 362 |
1 |
assertEquals(1, sfs.size()); |
| 363 |
1 |
sf = sfs.get(0); |
| 364 |
1 |
assertEquals("Iron-phosphorus (2Fe-P)", sf.description); |
| 365 |
1 |
assertEquals(86, sf.begin); |
| 366 |
1 |
assertEquals(87, sf.end); |
| 367 |
1 |
assertEquals("METALLIC", sf.type); |
| 368 |
|
} |
| 369 |
|
|
| |
|
| 94.1% |
Uncovered Elements: 1 (17) |
Complexity: 2 |
Complexity Density: 0.13 |
|
| 370 |
4 |
private void checkDatasetfromSimpleGff3(AlignmentI dataset)... |
| 371 |
|
{ |
| 372 |
4 |
assertEquals("no sequences extracted from GFF3 file", 2, |
| 373 |
|
dataset.getHeight()); |
| 374 |
|
|
| 375 |
4 |
SequenceI seq1 = dataset.findName("seq1"); |
| 376 |
4 |
SequenceI seq2 = dataset.findName("seq2"); |
| 377 |
4 |
assertNotNull(seq1); |
| 378 |
4 |
assertNotNull(seq2); |
| 379 |
4 |
assertFalse("Failed to replace dummy seq1 with real sequence", |
| 380 |
|
seq1 instanceof SequenceDummy |
| 381 |
|
&& ((SequenceDummy) seq1).isDummy()); |
| 382 |
4 |
assertFalse("Failed to replace dummy seq2 with real sequence", |
| 383 |
|
seq2 instanceof SequenceDummy |
| 384 |
|
&& ((SequenceDummy) seq2).isDummy()); |
| 385 |
4 |
String placeholderseq = new SequenceDummy("foo").getSequenceAsString(); |
| 386 |
4 |
assertFalse("dummy replacement buggy for seq1", |
| 387 |
|
placeholderseq.equals(seq1.getSequenceAsString())); |
| 388 |
4 |
assertFalse("dummy replacement buggy for seq2", |
| 389 |
|
placeholderseq.equals(seq2.getSequenceAsString())); |
| 390 |
4 |
assertNotNull("No features added to seq1", seq1.getSequenceFeatures()); |
| 391 |
4 |
assertEquals("Wrong number of features", 3, |
| 392 |
|
seq1.getSequenceFeatures().size()); |
| 393 |
4 |
assertTrue(seq2.getSequenceFeatures().isEmpty()); |
| 394 |
4 |
assertEquals("Wrong number of features", 0, |
| 395 |
4 |
seq2.getSequenceFeatures() == null ? 0 |
| 396 |
|
: seq2.getSequenceFeatures().size()); |
| 397 |
4 |
assertTrue("Expected at least one CDNA/Protein mapping for seq1", |
| 398 |
|
dataset.getCodonFrame(seq1) != null |
| 399 |
|
&& dataset.getCodonFrame(seq1).size() > 0); |
| 400 |
|
|
| 401 |
|
} |
| 402 |
|
|
| |
|
| 100% |
Uncovered Elements: 0 (4) |
Complexity: 1 |
Complexity Density: 0.25 |
1PASS
|
|
| 403 |
1 |
@Test(groups = { "Functional" })... |
| 404 |
|
public void readGff3File() throws IOException |
| 405 |
|
{ |
| 406 |
1 |
FeaturesFile gffreader = new FeaturesFile(true, simpleGffFile, |
| 407 |
|
DataSourceType.FILE); |
| 408 |
1 |
Alignment dataset = new Alignment(gffreader.getSeqsAsArray()); |
| 409 |
1 |
gffreader.addProperties(dataset); |
| 410 |
1 |
checkDatasetfromSimpleGff3(dataset); |
| 411 |
|
} |
| 412 |
|
|
| |
|
| 100% |
Uncovered Elements: 0 (5) |
Complexity: 1 |
Complexity Density: 0.2 |
1PASS
|
|
| 413 |
1 |
@Test(groups = { "Functional" })... |
| 414 |
|
public void simpleGff3FileClass() throws IOException |
| 415 |
|
{ |
| 416 |
1 |
AlignmentI dataset = new Alignment(new SequenceI[] {}); |
| 417 |
1 |
FeaturesFile ffile = new FeaturesFile(simpleGffFile, |
| 418 |
|
DataSourceType.FILE); |
| 419 |
|
|
| 420 |
1 |
boolean parseResult = ffile.parse(dataset, null, false, false); |
| 421 |
1 |
assertTrue("return result should be true", parseResult); |
| 422 |
1 |
checkDatasetfromSimpleGff3(dataset); |
| 423 |
|
} |
| 424 |
|
|
| |
|
| 100% |
Uncovered Elements: 0 (3) |
Complexity: 1 |
Complexity Density: 0.33 |
1PASS
|
|
| 425 |
1 |
@Test(groups = { "Functional" })... |
| 426 |
|
public void simpleGff3FileLoader() throws IOException |
| 427 |
|
{ |
| 428 |
1 |
AlignFrame af = new FileLoader(false) |
| 429 |
|
.LoadFileWaitTillLoaded(simpleGffFile, DataSourceType.FILE); |
| 430 |
1 |
assertTrue( |
| 431 |
|
"Didn't read the alignment into an alignframe from Gff3 File", |
| 432 |
|
af != null); |
| 433 |
1 |
checkDatasetfromSimpleGff3(af.getViewport().getAlignment()); |
| 434 |
|
} |
| 435 |
|
|
| |
|
| 100% |
Uncovered Elements: 0 (5) |
Complexity: 1 |
Complexity Density: 0.2 |
1PASS
|
|
| 436 |
1 |
@Test(groups = { "Functional" })... |
| 437 |
|
public void simpleGff3RelaxedIdMatching() throws IOException |
| 438 |
|
{ |
| 439 |
1 |
AlignmentI dataset = new Alignment(new SequenceI[] {}); |
| 440 |
1 |
FeaturesFile ffile = new FeaturesFile(simpleGffFile, |
| 441 |
|
DataSourceType.FILE); |
| 442 |
|
|
| 443 |
1 |
boolean parseResult = ffile.parse(dataset, null, false, true); |
| 444 |
1 |
assertTrue("return result (relaxedID matching) should be true", |
| 445 |
|
parseResult); |
| 446 |
1 |
checkDatasetfromSimpleGff3(dataset); |
| 447 |
|
} |
| 448 |
|
|
| |
|
| 100% |
Uncovered Elements: 0 (37) |
Complexity: 1 |
Complexity Density: 0.03 |
1PASS
|
|
| 449 |
1 |
@Test(groups = { "Functional" })... |
| 450 |
|
public void testPrintJalviewFormat() throws Exception |
| 451 |
|
{ |
| 452 |
1 |
File f = new File("examples/uniref50.fa"); |
| 453 |
1 |
AlignmentI al = readAlignmentFile(f); |
| 454 |
1 |
AlignFrame af = new AlignFrame(al, 500, 500); |
| 455 |
1 |
Map<String, FeatureColourI> colours = af.getFeatureRenderer() |
| 456 |
|
.getFeatureColours(); |
| 457 |
1 |
String features = "METAL\tcc9900\n" |
| 458 |
|
+ "GAMMA-TURN\tred|0,255,255|20.0|95.0|below|66.0\n" |
| 459 |
|
+ "Pfam\tred\n" + "STARTGROUP\tuniprot\n" |
| 460 |
|
+ "Cath\tFER_CAPAA\t-1\t0\t0\tDomain\n" |
| 461 |
|
+ "Iron\tFER_CAPAA\t-1\t39\t39\tMETAL\n" |
| 462 |
|
+ "Turn\tFER_CAPAA\t-1\t36\t38\tGAMMA-TURN\n" |
| 463 |
|
+ "<html>Pfam domain<a href=\"http://pfam.xfam.org/family/PF00111\">Pfam_3_4</a></html>\tFER_CAPAA\t-1\t20\t20\tPfam\n" |
| 464 |
|
+ "ENDGROUP\tuniprot\n"; |
| 465 |
1 |
FeaturesFile featuresFile = new FeaturesFile(features, |
| 466 |
|
DataSourceType.PASTE); |
| 467 |
1 |
featuresFile.parse(al.getDataset(), colours, false); |
| 468 |
|
|
| 469 |
|
|
| 470 |
|
|
| 471 |
|
|
| 472 |
|
|
| 473 |
1 |
SequenceI seq = al.getSequenceAt(1); |
| 474 |
1 |
seq.addSequenceFeature( |
| 475 |
|
new SequenceFeature("Pfam", "desc1", 0, 0, 1.3f, null)); |
| 476 |
1 |
seq.addSequenceFeature( |
| 477 |
|
new SequenceFeature("Pfam", "desc2", 4, 9, Float.NaN, null)); |
| 478 |
1 |
seq = al.getSequenceAt(2); |
| 479 |
1 |
seq.addSequenceFeature( |
| 480 |
|
new SequenceFeature("Pfam", "desc3", 0, 0, Float.NaN, "")); |
| 481 |
1 |
seq.addSequenceFeature( |
| 482 |
|
new SequenceFeature("Pfam", "desc4", 5, 8, -2.6f, "")); |
| 483 |
|
|
| 484 |
|
|
| 485 |
|
|
| 486 |
|
|
| 487 |
1 |
FeatureRenderer fr = af.alignPanel.getFeatureRenderer(); |
| 488 |
1 |
String exported = featuresFile |
| 489 |
|
.printJalviewFormat(al.getSequencesArray(), fr, false, false); |
| 490 |
1 |
String expected = "No Features Visible"; |
| 491 |
1 |
assertEquals(expected, exported); |
| 492 |
|
|
| 493 |
|
|
| 494 |
|
|
| 495 |
|
|
| 496 |
1 |
fr.setGroupVisibility("uniprot", true); |
| 497 |
1 |
exported = featuresFile.printJalviewFormat(al.getSequencesArray(), fr, |
| 498 |
|
true, false); |
| 499 |
1 |
expected = "\nSTARTGROUP\tuniprot\n" |
| 500 |
|
+ "Cath\tFER_CAPAA\t-1\t0\t0\tDomain\t0.0\n" |
| 501 |
|
+ "ENDGROUP\tuniprot\n\n" |
| 502 |
|
+ "desc1\tFER_CAPAN\t-1\t0\t0\tPfam\t1.3\n\n" |
| 503 |
|
+ "desc3\tFER1_SOLLC\t-1\t0\t0\tPfam\n"; |
| 504 |
1 |
assertEquals(expected, exported); |
| 505 |
|
|
| 506 |
|
|
| 507 |
|
|
| 508 |
|
|
| 509 |
1 |
fr.setVisible("METAL"); |
| 510 |
1 |
fr.setVisible("GAMMA-TURN"); |
| 511 |
1 |
exported = featuresFile.printJalviewFormat(al.getSequencesArray(), fr, |
| 512 |
|
false, false); |
| 513 |
1 |
expected = "METAL\tcc9900\n" |
| 514 |
|
+ "GAMMA-TURN\tscore|ff0000|00ffff|noValueMin|20.0|95.0|below|66.0\n" |
| 515 |
|
+ "\nSTARTGROUP\tuniprot\n" |
| 516 |
|
+ "Iron\tFER_CAPAA\t-1\t39\t39\tMETAL\t0.0\n" |
| 517 |
|
+ "Turn\tFER_CAPAA\t-1\t36\t38\tGAMMA-TURN\t0.0\n" |
| 518 |
|
+ "ENDGROUP\tuniprot\n"; |
| 519 |
1 |
assertEquals(expected, exported); |
| 520 |
|
|
| 521 |
|
|
| 522 |
|
|
| 523 |
|
|
| 524 |
1 |
fr.setVisible("Pfam"); |
| 525 |
1 |
exported = featuresFile.printJalviewFormat(al.getSequencesArray(), fr, |
| 526 |
|
false, false); |
| 527 |
|
|
| 528 |
|
|
| 529 |
|
|
| 530 |
1 |
expected = "METAL\tcc9900\n" + "Pfam\tff0000\n" |
| 531 |
|
+ "GAMMA-TURN\tscore|ff0000|00ffff|noValueMin|20.0|95.0|below|66.0\n" |
| 532 |
|
+ "\nSTARTGROUP\tuniprot\n" |
| 533 |
|
+ "Iron\tFER_CAPAA\t-1\t39\t39\tMETAL\t0.0\n" |
| 534 |
|
+ "<html>Pfam domain<a href=\"http://pfam.xfam.org/family/PF00111\">Pfam_3_4</a></html>\tFER_CAPAA\t-1\t20\t20\tPfam\t0.0\n" |
| 535 |
|
+ "Turn\tFER_CAPAA\t-1\t36\t38\tGAMMA-TURN\t0.0\n" |
| 536 |
|
+ "ENDGROUP\tuniprot\n" |
| 537 |
|
|
| 538 |
|
+ "\ndesc2\tFER_CAPAN\t-1\t4\t9\tPfam\n" |
| 539 |
|
+ "\ndesc4\tFER1_SOLLC\t-1\t5\t8\tPfam\t-2.6\n"; |
| 540 |
1 |
assertEquals(expected, exported); |
| 541 |
|
|
| 542 |
|
|
| 543 |
|
|
| 544 |
|
|
| 545 |
1 |
fr.setGroupVisibility("uniprot", false); |
| 546 |
1 |
expected = "METAL\tcc9900\n" + "Pfam\tff0000\n" |
| 547 |
|
+ "GAMMA-TURN\tscore|ff0000|00ffff|noValueMin|20.0|95.0|below|66.0\n" |
| 548 |
|
+ "\ndesc2\tFER_CAPAN\t-1\t4\t9\tPfam\n" |
| 549 |
|
+ "\ndesc4\tFER1_SOLLC\t-1\t5\t8\tPfam\t-2.6\n"; |
| 550 |
1 |
exported = featuresFile.printJalviewFormat(al.getSequencesArray(), fr, |
| 551 |
|
false, false); |
| 552 |
1 |
assertEquals(expected, exported); |
| 553 |
|
|
| 554 |
|
|
| 555 |
|
|
| 556 |
|
|
| 557 |
1 |
exported = featuresFile.printJalviewFormat(al.getSequencesArray(), fr, |
| 558 |
|
true, false); |
| 559 |
1 |
expected = "METAL\tcc9900\n" + "Pfam\tff0000\n" |
| 560 |
|
+ "GAMMA-TURN\tscore|ff0000|00ffff|noValueMin|20.0|95.0|below|66.0\n" |
| 561 |
|
+ "\nSTARTGROUP\tuniprot\n" |
| 562 |
|
+ "Cath\tFER_CAPAA\t-1\t0\t0\tDomain\t0.0\n" |
| 563 |
|
+ "ENDGROUP\tuniprot\n" |
| 564 |
|
+ "\ndesc1\tFER_CAPAN\t-1\t0\t0\tPfam\t1.3\n" |
| 565 |
|
+ "desc2\tFER_CAPAN\t-1\t4\t9\tPfam\n" |
| 566 |
|
+ "\ndesc3\tFER1_SOLLC\t-1\t0\t0\tPfam\n" |
| 567 |
|
+ "desc4\tFER1_SOLLC\t-1\t5\t8\tPfam\t-2.6\n"; |
| 568 |
1 |
assertEquals(expected, exported); |
| 569 |
|
} |
| 570 |
|
|
| |
|
| 100% |
Uncovered Elements: 0 (51) |
Complexity: 1 |
Complexity Density: 0.02 |
1PASS
|
|
| 571 |
1 |
@Test(groups = { "Functional" })... |
| 572 |
|
public void testPrintGffFormat() throws Exception |
| 573 |
|
{ |
| 574 |
1 |
File f = new File("examples/uniref50.fa"); |
| 575 |
1 |
AlignmentI al = readAlignmentFile(f); |
| 576 |
1 |
AlignFrame af = new AlignFrame(al, 500, 500); |
| 577 |
|
|
| 578 |
|
|
| 579 |
|
|
| 580 |
|
|
| 581 |
1 |
FeaturesFile featuresFile = new FeaturesFile(); |
| 582 |
1 |
FeatureRendererModel fr = (FeatureRendererModel) af.alignPanel |
| 583 |
|
.getFeatureRenderer(); |
| 584 |
1 |
String exported = featuresFile.printGffFormat(al.getSequencesArray(), |
| 585 |
|
fr, false, false); |
| 586 |
1 |
String gffHeader = "##gff-version 2\n"; |
| 587 |
1 |
assertEquals(gffHeader, exported); |
| 588 |
1 |
exported = featuresFile.printGffFormat(al.getSequencesArray(), fr, true, |
| 589 |
|
false); |
| 590 |
1 |
assertEquals(gffHeader, exported); |
| 591 |
|
|
| 592 |
|
|
| 593 |
|
|
| 594 |
|
|
| 595 |
1 |
al.getSequenceAt(0).addSequenceFeature( |
| 596 |
|
new SequenceFeature("Domain", "Cath", 0, 0, 0f, "Uniprot")); |
| 597 |
1 |
al.getSequenceAt(0).addSequenceFeature( |
| 598 |
|
new SequenceFeature("METAL", "Cath", 39, 39, 1.2f, null)); |
| 599 |
1 |
al.getSequenceAt(1).addSequenceFeature(new SequenceFeature("GAMMA-TURN", |
| 600 |
|
"Turn", 36, 38, 2.1f, "s3dm")); |
| 601 |
1 |
SequenceFeature sf = new SequenceFeature("Pfam", "", 20, 20, 0f, |
| 602 |
|
"Uniprot"); |
| 603 |
1 |
sf.setStrand("+"); |
| 604 |
1 |
sf.setPhase("2"); |
| 605 |
1 |
sf.setValue("x", "y"); |
| 606 |
1 |
sf.setValue("black", "white"); |
| 607 |
1 |
Map<String, String> csq = new HashMap<>(); |
| 608 |
1 |
csq.put("SIFT", "benign,mostly benign,cloudy, with meatballs"); |
| 609 |
1 |
csq.put("consequence", "missense_variant"); |
| 610 |
1 |
sf.setValue("CSQ", csq); |
| 611 |
1 |
al.getSequenceAt(1).addSequenceFeature(sf); |
| 612 |
|
|
| 613 |
|
|
| 614 |
|
|
| 615 |
|
|
| 616 |
1 |
fr.findAllFeatures(true); |
| 617 |
1 |
FeatureSettingsBean[] data = new FeatureSettingsBean[4]; |
| 618 |
1 |
FeatureColourI fc = new FeatureColour(Color.PINK); |
| 619 |
1 |
data[0] = new FeatureSettingsBean("Domain", fc, null, false); |
| 620 |
1 |
data[1] = new FeatureSettingsBean("METAL", fc, null, false); |
| 621 |
1 |
data[2] = new FeatureSettingsBean("GAMMA-TURN", fc, null, false); |
| 622 |
1 |
data[3] = new FeatureSettingsBean("Pfam", fc, null, false); |
| 623 |
1 |
fr.setFeaturePriority(data); |
| 624 |
|
|
| 625 |
|
|
| 626 |
|
|
| 627 |
|
|
| 628 |
1 |
exported = featuresFile.printGffFormat(al.getSequencesArray(), fr, |
| 629 |
|
false, false); |
| 630 |
1 |
assertEquals(gffHeader, exported); |
| 631 |
|
|
| 632 |
|
|
| 633 |
|
|
| 634 |
|
|
| 635 |
1 |
fr.setGroupVisibility("Uniprot", true); |
| 636 |
1 |
fr.setGroupVisibility("s3dm", false); |
| 637 |
1 |
exported = featuresFile.printGffFormat(al.getSequencesArray(), fr, true, |
| 638 |
|
false); |
| 639 |
1 |
String expected = gffHeader |
| 640 |
|
+ "FER_CAPAA\tUniprot\tDomain\t0\t0\t0.0\t.\t.\n"; |
| 641 |
1 |
assertEquals(expected, exported); |
| 642 |
|
|
| 643 |
|
|
| 644 |
|
|
| 645 |
|
|
| 646 |
|
|
| 647 |
1 |
fr.setVisible("METAL"); |
| 648 |
1 |
fr.setVisible("GAMMA-TURN"); |
| 649 |
1 |
exported = featuresFile.printGffFormat(al.getSequencesArray(), fr, |
| 650 |
|
false, false); |
| 651 |
|
|
| 652 |
1 |
expected = gffHeader + "FER_CAPAA\tCath\tMETAL\t39\t39\t1.2\t.\t.\n"; |
| 653 |
1 |
assertEquals(expected, exported); |
| 654 |
|
|
| 655 |
|
|
| 656 |
|
|
| 657 |
|
|
| 658 |
1 |
fr.setGroupVisibility("s3dm", true); |
| 659 |
1 |
exported = featuresFile.printGffFormat(al.getSequencesArray(), fr, |
| 660 |
|
false, false); |
| 661 |
|
|
| 662 |
1 |
expected = gffHeader + "FER_CAPAA\tCath\tMETAL\t39\t39\t1.2\t.\t.\n" |
| 663 |
|
+ "FER_CAPAN\ts3dm\tGAMMA-TURN\t36\t38\t2.1\t.\t.\n"; |
| 664 |
1 |
assertEquals(expected, exported); |
| 665 |
|
|
| 666 |
|
|
| 667 |
|
|
| 668 |
|
|
| 669 |
1 |
fr.setVisible("Pfam"); |
| 670 |
1 |
exported = featuresFile.printGffFormat(al.getSequencesArray(), fr, |
| 671 |
|
false, false); |
| 672 |
|
|
| 673 |
1 |
expected = gffHeader + "FER_CAPAA\tCath\tMETAL\t39\t39\t1.2\t.\t.\n" |
| 674 |
|
|
| 675 |
|
|
| 676 |
|
|
| 677 |
|
+ "FER_CAPAN\tUniprot\tPfam\t20\t20\t0.0\t+\t2\tx=y;black=white;" |
| 678 |
|
+ "CSQ=SIFT=benign%2Cmostly benign%2Ccloudy%2C with meatballs,consequence=missense_variant\n" |
| 679 |
|
+ "FER_CAPAN\ts3dm\tGAMMA-TURN\t36\t38\t2.1\t.\t.\n"; |
| 680 |
1 |
assertEquals(expected, exported); |
| 681 |
|
} |
| 682 |
|
|
| 683 |
|
|
| 684 |
|
|
| 685 |
|
|
| 686 |
|
|
| 687 |
|
@throws |
| 688 |
|
|
| |
|
| 100% |
Uncovered Elements: 0 (27) |
Complexity: 1 |
Complexity Density: 0.04 |
1PASS
|
|
| 689 |
1 |
@Test(groups = { "Functional" })... |
| 690 |
|
public void testParseFilters() throws Exception |
| 691 |
|
{ |
| 692 |
1 |
Map<String, FeatureMatcherSetI> filters = new HashMap<>(); |
| 693 |
1 |
String text = "sequence_variant\tCSQ:PolyPhen NotContains 'damaging'\n" |
| 694 |
|
+ "missense_variant\t(label contains foobar) and (Score lt 1.3)"; |
| 695 |
1 |
FeaturesFile featuresFile = new FeaturesFile(text, |
| 696 |
|
DataSourceType.PASTE); |
| 697 |
1 |
featuresFile.parseFilters(filters); |
| 698 |
1 |
assertEquals(filters.size(), 2); |
| 699 |
|
|
| 700 |
1 |
FeatureMatcherSetI fm = filters.get("sequence_variant"); |
| 701 |
1 |
assertNotNull(fm); |
| 702 |
1 |
Iterator<FeatureMatcherI> matchers = fm.getMatchers().iterator(); |
| 703 |
1 |
FeatureMatcherI matcher = matchers.next(); |
| 704 |
1 |
assertFalse(matchers.hasNext()); |
| 705 |
1 |
String[] attributes = matcher.getAttribute(); |
| 706 |
1 |
assertArrayEquals(attributes, new String[] { "CSQ", "PolyPhen" }); |
| 707 |
1 |
assertSame(matcher.getMatcher().getCondition(), Condition.NotContains); |
| 708 |
1 |
assertEquals(matcher.getMatcher().getPattern(), "damaging"); |
| 709 |
|
|
| 710 |
1 |
fm = filters.get("missense_variant"); |
| 711 |
1 |
assertNotNull(fm); |
| 712 |
1 |
matchers = fm.getMatchers().iterator(); |
| 713 |
1 |
matcher = matchers.next(); |
| 714 |
1 |
assertTrue(matcher.isByLabel()); |
| 715 |
1 |
assertSame(matcher.getMatcher().getCondition(), Condition.Contains); |
| 716 |
1 |
assertEquals(matcher.getMatcher().getPattern(), "foobar"); |
| 717 |
1 |
matcher = matchers.next(); |
| 718 |
1 |
assertTrue(matcher.isByScore()); |
| 719 |
1 |
assertSame(matcher.getMatcher().getCondition(), Condition.LT); |
| 720 |
1 |
assertEquals(matcher.getMatcher().getPattern(), "1.3"); |
| 721 |
1 |
assertEquals(PA.getValue(matcher.getMatcher(), "floatValue"), 1.3f); |
| 722 |
|
|
| 723 |
1 |
assertFalse(matchers.hasNext()); |
| 724 |
|
} |
| 725 |
|
|
| |
|
| 100% |
Uncovered Elements: 0 (20) |
Complexity: 1 |
Complexity Density: 0.05 |
1PASS
|
|
| 726 |
1 |
@Test(groups = { "Functional" })... |
| 727 |
|
public void testOutputFeatureFilters() |
| 728 |
|
{ |
| 729 |
1 |
FeaturesFile ff = new FeaturesFile(); |
| 730 |
1 |
StringBuilder sb = new StringBuilder(); |
| 731 |
1 |
Map<String, FeatureColourI> visible = new HashMap<>(); |
| 732 |
1 |
visible.put("pfam", new FeatureColour(Color.red)); |
| 733 |
1 |
Map<String, FeatureMatcherSetI> featureFilters = new HashMap<>(); |
| 734 |
|
|
| 735 |
|
|
| 736 |
1 |
ff.outputFeatureFilters(sb, visible, featureFilters); |
| 737 |
1 |
assertEquals("", sb.toString()); |
| 738 |
|
|
| 739 |
|
|
| 740 |
1 |
FeatureMatcherSet filter = new FeatureMatcherSet(); |
| 741 |
1 |
filter.and(FeatureMatcher.byLabel(Condition.Present, null)); |
| 742 |
1 |
featureFilters.put("foobar", filter); |
| 743 |
1 |
ff.outputFeatureFilters(sb, visible, featureFilters); |
| 744 |
1 |
assertEquals("", sb.toString()); |
| 745 |
|
|
| 746 |
|
|
| 747 |
1 |
FeatureMatcherSet filter2 = new FeatureMatcherSet(); |
| 748 |
1 |
filter2.and(FeatureMatcher.byAttribute(Condition.Present, null, "CSQ", |
| 749 |
|
"PolyPhen")); |
| 750 |
1 |
filter2.and(FeatureMatcher.byScore(Condition.LE, "-2.4")); |
| 751 |
1 |
featureFilters.put("pfam", filter2); |
| 752 |
1 |
visible.put("foobar", new FeatureColour(Color.blue)); |
| 753 |
1 |
ff.outputFeatureFilters(sb, visible, featureFilters); |
| 754 |
1 |
String expected = "\nSTARTFILTERS\nfoobar\tLabel Present\npfam\t(CSQ:PolyPhen Present) AND (Score LE -2.4)\nENDFILTERS\n"; |
| 755 |
1 |
assertEquals(expected, sb.toString()); |
| 756 |
|
} |
| 757 |
|
|
| 758 |
|
|
| 759 |
|
|
| 760 |
|
|
| 761 |
|
|
| 762 |
|
@throws |
| 763 |
|
|
| |
|
| 100% |
Uncovered Elements: 0 (36) |
Complexity: 1 |
Complexity Density: 0.03 |
1PASS
|
|
| 764 |
1 |
@Test(groups = { "Functional" })... |
| 765 |
|
public void testPrintGffFormat_withFilters() throws Exception |
| 766 |
|
{ |
| 767 |
1 |
File f = new File("examples/uniref50.fa"); |
| 768 |
1 |
AlignmentI al = readAlignmentFile(f); |
| 769 |
1 |
AlignFrame af = new AlignFrame(al, 500, 500); |
| 770 |
1 |
SequenceFeature sf1 = new SequenceFeature("METAL", "Cath", 39, 39, 1.2f, |
| 771 |
|
null); |
| 772 |
1 |
sf1.setValue("clin_sig", "Likely Pathogenic"); |
| 773 |
1 |
sf1.setValue("AF", "24"); |
| 774 |
1 |
al.getSequenceAt(0).addSequenceFeature(sf1); |
| 775 |
1 |
SequenceFeature sf2 = new SequenceFeature("METAL", "Cath", 41, 41, 0.6f, |
| 776 |
|
null); |
| 777 |
1 |
sf2.setValue("clin_sig", "Benign"); |
| 778 |
1 |
sf2.setValue("AF", "46"); |
| 779 |
1 |
al.getSequenceAt(0).addSequenceFeature(sf2); |
| 780 |
|
|
| 781 |
1 |
FeaturesFile featuresFile = new FeaturesFile(); |
| 782 |
1 |
FeatureRenderer fr = af.alignPanel.getFeatureRenderer(); |
| 783 |
1 |
final String gffHeader = "##gff-version 2\n"; |
| 784 |
|
|
| 785 |
1 |
fr.setVisible("METAL"); |
| 786 |
1 |
fr.setColour("METAL", new FeatureColour(Color.PINK)); |
| 787 |
1 |
String exported = featuresFile.printGffFormat(al.getSequencesArray(), |
| 788 |
|
fr, false, false); |
| 789 |
1 |
String expected = gffHeader |
| 790 |
|
+ "FER_CAPAA\tCath\tMETAL\t39\t39\t1.2\t.\t.\tclin_sig=Likely Pathogenic;AF=24\n" |
| 791 |
|
+ "FER_CAPAA\tCath\tMETAL\t41\t41\t0.6\t.\t.\tclin_sig=Benign;AF=46\n"; |
| 792 |
1 |
assertEquals(expected, exported); |
| 793 |
|
|
| 794 |
|
|
| 795 |
|
|
| 796 |
|
|
| 797 |
1 |
FeatureColourI fc = new FeatureColour(null, Color.white, Color.BLACK, |
| 798 |
|
Color.white, 0f, 2f); |
| 799 |
1 |
fc.setAboveThreshold(true); |
| 800 |
1 |
fc.setThreshold(1.1f); |
| 801 |
1 |
fr.setColour("METAL", fc); |
| 802 |
1 |
exported = featuresFile.printGffFormat(al.getSequencesArray(), fr, |
| 803 |
|
false, false); |
| 804 |
1 |
expected = gffHeader |
| 805 |
|
+ "FER_CAPAA\tCath\tMETAL\t39\t39\t1.2\t.\t.\tclin_sig=Likely Pathogenic;AF=24\n"; |
| 806 |
1 |
assertEquals(expected, exported); |
| 807 |
|
|
| 808 |
|
|
| 809 |
|
|
| 810 |
|
|
| 811 |
1 |
fc.setAboveThreshold(false); |
| 812 |
1 |
exported = featuresFile.printGffFormat(al.getSequencesArray(), fr, |
| 813 |
|
false, false); |
| 814 |
1 |
expected = gffHeader |
| 815 |
|
+ "FER_CAPAA\tCath\tMETAL\t39\t39\t1.2\t.\t.\tclin_sig=Likely Pathogenic;AF=24\n" |
| 816 |
|
+ "FER_CAPAA\tCath\tMETAL\t41\t41\t0.6\t.\t.\tclin_sig=Benign;AF=46\n"; |
| 817 |
1 |
assertEquals(expected, exported); |
| 818 |
|
|
| 819 |
|
|
| 820 |
|
|
| 821 |
|
|
| 822 |
1 |
FeatureMatcherSetI filter = new FeatureMatcherSet(); |
| 823 |
1 |
filter.and(FeatureMatcher.byAttribute(Condition.Contains, "benign", |
| 824 |
|
"clin_sig")); |
| 825 |
1 |
fr.setFeatureFilter("METAL", filter); |
| 826 |
1 |
exported = featuresFile.printGffFormat(al.getSequencesArray(), fr, |
| 827 |
|
false, false); |
| 828 |
1 |
expected = gffHeader |
| 829 |
|
+ "FER_CAPAA\tCath\tMETAL\t41\t41\t0.6\t.\t.\tclin_sig=Benign;AF=46\n"; |
| 830 |
1 |
assertEquals(expected, exported); |
| 831 |
|
} |
| 832 |
|
|
| 833 |
|
|
| 834 |
|
|
| 835 |
|
|
| 836 |
|
|
| 837 |
|
@throws |
| 838 |
|
|
| |
|
| 100% |
Uncovered Elements: 0 (37) |
Complexity: 1 |
Complexity Density: 0.03 |
1PASS
|
|
| 839 |
1 |
@Test(groups = { "Functional" })... |
| 840 |
|
public void testPrintJalviewFormat_withFilters() throws Exception |
| 841 |
|
{ |
| 842 |
1 |
File f = new File("examples/uniref50.fa"); |
| 843 |
1 |
AlignmentI al = readAlignmentFile(f); |
| 844 |
1 |
AlignFrame af = new AlignFrame(al, 500, 500); |
| 845 |
1 |
SequenceFeature sf1 = new SequenceFeature("METAL", "Cath", 39, 39, 1.2f, |
| 846 |
|
"grp1"); |
| 847 |
1 |
sf1.setValue("clin_sig", "Likely Pathogenic"); |
| 848 |
1 |
sf1.setValue("AF", "24"); |
| 849 |
1 |
al.getSequenceAt(0).addSequenceFeature(sf1); |
| 850 |
1 |
SequenceFeature sf2 = new SequenceFeature("METAL", "Cath", 41, 41, 0.6f, |
| 851 |
|
"grp2"); |
| 852 |
1 |
sf2.setValue("clin_sig", "Benign"); |
| 853 |
1 |
sf2.setValue("AF", "46"); |
| 854 |
1 |
al.getSequenceAt(0).addSequenceFeature(sf2); |
| 855 |
|
|
| 856 |
1 |
FeaturesFile featuresFile = new FeaturesFile(); |
| 857 |
1 |
FeatureRenderer fr = af.alignPanel.getFeatureRenderer(); |
| 858 |
1 |
fr.findAllFeatures(true); |
| 859 |
|
|
| 860 |
1 |
fr.setVisible("METAL"); |
| 861 |
1 |
fr.setColour("METAL", new FeatureColour(Color.PINK)); |
| 862 |
1 |
String exported = featuresFile |
| 863 |
|
.printJalviewFormat(al.getSequencesArray(), fr, false, false); |
| 864 |
1 |
String expected = "METAL\tffafaf\n\nSTARTGROUP\tgrp1\n" |
| 865 |
|
+ "Cath\tFER_CAPAA\t-1\t39\t39\tMETAL\t1.2\n" |
| 866 |
|
+ "ENDGROUP\tgrp1\n\nSTARTGROUP\tgrp2\n" |
| 867 |
|
+ "Cath\tFER_CAPAA\t-1\t41\t41\tMETAL\t0.6\n" |
| 868 |
|
+ "ENDGROUP\tgrp2\n"; |
| 869 |
1 |
assertEquals(expected, exported); |
| 870 |
|
|
| 871 |
|
|
| 872 |
|
|
| 873 |
|
|
| 874 |
|
|
| 875 |
1 |
FeatureColourI fc = new FeatureColour(null, Color.white, Color.BLACK, |
| 876 |
|
Color.white, 0f, 2f); |
| 877 |
1 |
fc.setAboveThreshold(true); |
| 878 |
1 |
fc.setThreshold(1.1f); |
| 879 |
1 |
fr.setColour("METAL", fc); |
| 880 |
1 |
exported = featuresFile.printJalviewFormat(al.getSequencesArray(), fr, |
| 881 |
|
false, false); |
| 882 |
1 |
expected = "METAL\tscore|ffffff|000000|noValueMin|abso|0.0|2.0|above|1.1\n\n" |
| 883 |
|
+ "STARTGROUP\tgrp1\n" |
| 884 |
|
+ "Cath\tFER_CAPAA\t-1\t39\t39\tMETAL\t1.2\n" |
| 885 |
|
+ "ENDGROUP\tgrp1\n"; |
| 886 |
1 |
assertEquals(expected, exported); |
| 887 |
|
|
| 888 |
|
|
| 889 |
|
|
| 890 |
|
|
| 891 |
1 |
fc.setAboveThreshold(false); |
| 892 |
1 |
exported = featuresFile.printJalviewFormat(al.getSequencesArray(), fr, |
| 893 |
|
false, false); |
| 894 |
1 |
expected = "METAL\tscore|ffffff|000000|noValueMin|abso|0.0|2.0|none\n\n" |
| 895 |
|
+ "STARTGROUP\tgrp1\n" |
| 896 |
|
+ "Cath\tFER_CAPAA\t-1\t39\t39\tMETAL\t1.2\n" |
| 897 |
|
+ "ENDGROUP\tgrp1\n\nSTARTGROUP\tgrp2\n" |
| 898 |
|
+ "Cath\tFER_CAPAA\t-1\t41\t41\tMETAL\t0.6\n" |
| 899 |
|
+ "ENDGROUP\tgrp2\n"; |
| 900 |
1 |
assertEquals(expected, exported); |
| 901 |
|
|
| 902 |
|
|
| 903 |
|
|
| 904 |
|
|
| 905 |
1 |
FeatureMatcherSetI filter = new FeatureMatcherSet(); |
| 906 |
1 |
filter.and(FeatureMatcher.byAttribute(Condition.Contains, "benign", |
| 907 |
|
"clin_sig")); |
| 908 |
1 |
fr.setFeatureFilter("METAL", filter); |
| 909 |
1 |
exported = featuresFile.printJalviewFormat(al.getSequencesArray(), fr, |
| 910 |
|
false, false); |
| 911 |
1 |
expected = "FER_CAPAA\tCath\tMETAL\t41\t41\t0.6\t.\t.\n"; |
| 912 |
1 |
expected = "METAL\tscore|ffffff|000000|noValueMin|abso|0.0|2.0|none\n\n" |
| 913 |
|
+ "STARTFILTERS\nMETAL\tclin_sig Contains benign\nENDFILTERS\n\n" |
| 914 |
|
+ "STARTGROUP\tgrp2\n" |
| 915 |
|
+ "Cath\tFER_CAPAA\t-1\t41\t41\tMETAL\t0.6\n" |
| 916 |
|
+ "ENDGROUP\tgrp2\n"; |
| 917 |
1 |
assertEquals(expected, exported); |
| 918 |
|
} |
| 919 |
|
} |