/*
* Jalview - A Sequence Alignment Editor and Viewer (Version 2.8.2)
* Copyright (C) 2014 The Jalview Authors
*
* This file is part of Jalview.
*
* Jalview is free software: you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation, either version 3
* of the License, or (at your option) any later version.
*
* Jalview is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty
* of MERCHANTABILITY or FITNESS FOR A PARTICULAR
* PURPOSE. See the GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with Jalview. If not, see .
* The Jalview Authors are detailed in the 'AUTHORS' file.
*/
package jalview.ext.jmol;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import jalview.datamodel.Alignment;
import jalview.datamodel.AlignmentI;
import jalview.datamodel.SequenceI;
import jalview.gui.AlignFrame;
import jalview.io.AppletFormatAdapter;
import jalview.io.FileLoader;
import java.util.Vector;
import org.junit.Test;
import MCview.PDBfile;
/**
* @author jimp
*
*/
public class PDBFileWithJmolTest
{
String[] testFile = new String[]
{ "./examples/1GAQ.txt", "./test/jalview/ext/jmol/1QCF.pdb" }; // ,
// "./examples/DNMT1_MOUSE.pdb"
// };
@Test
public void testAlignmentLoader() throws Exception
{
for (String f : testFile)
{
FileLoader fl = new jalview.io.FileLoader(false);
AlignFrame af = fl
.LoadFileWaitTillLoaded(f, AppletFormatAdapter.FILE);
validateSecStrRows(af.getViewport().getAlignment());
}
}
@Test
public void testFileParser() throws Exception
{
for (String pdbStr : testFile)
{
PDBfile mctest = new PDBfile(false, false, false, pdbStr,
AppletFormatAdapter.FILE);
PDBFileWithJmol jtest = new PDBFileWithJmol(pdbStr,
jalview.io.AppletFormatAdapter.FILE);
Vector seqs = jtest.getSeqs(), mcseqs = mctest.getSeqs();
assertTrue(
"No sequences extracted from testfile\n"
+ (jtest.hasWarningMessage() ? jtest.getWarningMessage()
: "(No warnings raised)"), seqs != null
&& seqs.size() > 0);
for (SequenceI sq : seqs)
{
assertEquals("JMol didn't process " + pdbStr
+ " to the same sequence as MCView",
sq.getSequenceAsString(), mcseqs.remove(0)
.getSequenceAsString());
AlignmentI al = new Alignment(new SequenceI[]
{ sq });
validateSecStrRows(al);
}
}
}
private void validateSecStrRows(AlignmentI al)
{
if (!al.isNucleotide())
{
for (SequenceI asq : al.getSequences())
{
SequenceI sq = asq;
boolean hasDs = false;
while (sq.getDatasetSequence() != null
&& sq.getAnnotation() == null)
{
sq = sq.getDatasetSequence();
hasDs = true;
}
checkFirstAAIsAssoc(sq);
if (hasDs)
{
// also verify if alignment sequence has annotation on it
// that is correctly mapped
checkFirstAAIsAssoc(asq);
}
}
}
}
private void checkFirstAAIsAssoc(SequenceI sq)
{
assertTrue("No secondary structure assigned for protein sequence.",
sq.getAnnotation() != null && sq.getAnnotation().length >= 1
&& sq.getAnnotation()[0].hasIcons);
assertTrue(
"Secondary structure not associated for sequence "
+ sq.getName(), sq.getAnnotation()[0].sequenceRef == sq);
}
}