/*
* BioJava development code
*
* This code may be freely distributed and modified under the
* terms of the GNU Lesser General Public Licence. This should
* be distributed with the code. If you do not have a copy,
* see:
*
* http://www.gnu.org/copyleft/lesser.html
*
* Copyright for this code is held jointly by the individual
* authors. These should be listed in @author doc comments.
*
* For more information on the BioJava project and its aims,
* or to join the biojava-l mailing list, visit the home page
* at:
*
* http://www.biojava.org/
*
*/
/**
*
*/
package org.biojava.nbio.structure;
import junit.framework.TestCase;
import org.biojava.nbio.structure.PDBStatus.Status;
import java.lang.reflect.Method;
import java.util.*;
/**
* @author Spencer Bliven <sbliven@ucsd.edu>
*
*/
public class PDBStatusTest extends TestCase {
/**
* Test {@link PDBStatus#getStatus(String)}.
*
* <p>Uses the following PDBs:<br/>
* <pre>1HHB OBSOLETE replacedBy=4HHB
*4HHB CURRENT replaces=1HHB
*3HHB CURRENT replaces=1HHB
*</pre>
*/
public void testGetStatus() {
assertEquals(Status.OBSOLETE, PDBStatus.getStatus("1HHB"));
assertEquals(Status.CURRENT, PDBStatus.getStatus("3HHB"));
assertEquals(Status.CURRENT, PDBStatus.getStatus("4HHB"));
}
public void testGetReplacement() {
assertFalse(Arrays.asList("YES").equals(Arrays.asList("NO"))); //check for deep equals
// 1CMW is replacedBy NONE
assertEquals(Arrays.asList(),PDBStatus.getReplacement("1CMW", true, false));
assertEquals(Arrays.asList("1CMW"),PDBStatus.getReplacement("1CMW", true, true));
// 1HHB is replacedBy 2-4HHB
assertEquals(Arrays.asList("3HHB"),PDBStatus.getReplacement("3HHB",false,false));
assertEquals(Arrays.asList("3HHB"),PDBStatus.getReplacement("3HHB",false,true));
assertEquals(Arrays.asList("4HHB","3HHB","2HHB"),PDBStatus.getReplacement("1HHB",false,false));
assertEquals(Arrays.asList("4HHB","3HHB","2HHB","1HHB"),PDBStatus.getReplacement("1HHB",false,true));
// 1CAT is replacedBy 3CAT is replacedBy 7-8CAT
assertEquals(Arrays.asList("8CAT","7CAT","3CAT","1CAT"),PDBStatus.getReplacement("1CAT",true,true));
assertEquals(Arrays.asList("8CAT","7CAT"),PDBStatus.getReplacement("1CAT",true,false));
assertEquals(Arrays.asList("8CAT","7CAT","3CAT"),PDBStatus.getReplacement("3CAT",true,true));
assertEquals(Arrays.asList("8CAT","7CAT"),PDBStatus.getReplacement("3CAT",true,false));
}
public void testGetCurrent() {
assertEquals("4HHB",PDBStatus.getCurrent("1HHB"));
assertEquals("3HHB",PDBStatus.getCurrent("3HHB"));
assertEquals(null, PDBStatus.getCurrent("1CMW"));
assertEquals("3ENI",PDBStatus.getCurrent("1KSA"));
assertEquals("8CAT",PDBStatus.getCurrent("1CAT"));
assertEquals("8CAT",PDBStatus.getCurrent("3CAT"));
assertEquals("7CAT",PDBStatus.getCurrent("7CAT"));
}
public void testGetReplaces() {
assertEquals(new ArrayList<String>(), Arrays.asList(new String[] {}));
assertEquals(Arrays.asList("1HHB"),PDBStatus.getReplaces("4HHB",false));
assertEquals(Arrays.asList("1HHB"),PDBStatus.getReplaces("3HHB",false));
assertEquals(Arrays.asList(), PDBStatus.getReplaces("1HHB", false));
assertEquals(Arrays.asList("1M50","1KSA"),PDBStatus.getReplaces("3ENI",false));
assertEquals(Arrays.asList("1M50","1KSA"),PDBStatus.getReplaces("3ENI",true));
assertEquals(Arrays.asList("3CAT"),PDBStatus.getReplaces("8CAT",false));
assertEquals(Arrays.asList("3CAT","1CAT"),PDBStatus.getReplaces("8CAT",true));
}
/**
* Tests a helper method for merging that was giving me problems
*/
public void testMergeReversed() {
try {
Method mergeReversed = PDBStatus.class.getDeclaredMethod("mergeReversed",
List.class,List.class);
mergeReversed.setAccessible(true);
List<String> a,b;
b = Arrays.asList("F","A");
a = new LinkedList<String>();
mergeReversed.invoke(null, a,b);
assertEquals(Arrays.asList("F","A"),a);
a = new LinkedList<String>();
a.add("B");
mergeReversed.invoke(null, a,b);
assertEquals(Arrays.asList("F","B","A"),a);
a = new LinkedList<String>();
a.add("G");
mergeReversed.invoke(null, a,b);
assertEquals(Arrays.asList("G","F","A"),a);
a = new LinkedList<String>();
a.add("1");
mergeReversed.invoke(null, a,b);
assertEquals(Arrays.asList("F","A", "1"),a);
a = new LinkedList<String>();
a.add("G");
a.add("1");
mergeReversed.invoke(null, a,b);
assertEquals(Arrays.asList("G","F","A", "1"),a);
b = Arrays.asList();
mergeReversed.invoke(null, a,b);
assertEquals(Arrays.asList("G","F","A", "1"),a);
b = Arrays.asList("G","D","C","A");
a = new LinkedList<String>();
a.add("F");
a.add("B");
a.add("1");
mergeReversed.invoke(null, a,b);
assertEquals(Arrays.asList("G","F","D","C","B","A", "1"),a);
} catch(Exception e) {
e.printStackTrace();
fail(e.getMessage());
}
}
/**
* Test low-level connectivity to the PDB
*/
@SuppressWarnings("unchecked")
public void testGetStatusIdRecords() {
try {
Method getStatusIdRecords = PDBStatus.class.getDeclaredMethod("getStatusIdRecords",
String[].class);
getStatusIdRecords.setAccessible(true);
List<Map<String,String>> attrsList;
String[] pdbIds;
Map<String,String> attrs;
// Test invocation with a single ID
pdbIds = new String[] {"1HHB"};
attrsList = (List<Map<String,String>>) getStatusIdRecords.invoke(null, (Object) pdbIds);
assertEquals("Wrong number of records.",1, attrsList.size());
attrs = attrsList.get(0);
assertEquals("Wrong number of attributes",3,attrs.size());
assertEquals("Wrong structureId","1HHB",attrs.get("structureId"));
assertEquals("Wrong status","OBSOLETE",attrs.get("status"));
assertEquals("Wrong replacedBy","4HHB 3HHB 2HHB",attrs.get("replacedBy"));
// Test with multiple IDs
pdbIds = new String[] {"1HHB","4HHB"};
attrsList = (List<Map<String,String>>) getStatusIdRecords.invoke(null, (Object) pdbIds);
assertEquals("Wrong number of records.",2, attrsList.size());
attrs = attrsList.get(1);
assertEquals("Wrong number of attributes",3,attrs.size());
assertEquals("Wrong structureId","4HHB",attrs.get("structureId"));
assertEquals("Wrong status","CURRENT",attrs.get("status"));
assertEquals("Wrong replaces","1HHB",attrs.get("replaces"));
attrs = attrsList.get(0);
assertEquals("Wrong number of attributes",3,attrs.size());
assertEquals("Wrong structureId","1HHB",attrs.get("structureId"));
assertEquals("Wrong status","OBSOLETE",attrs.get("status"));
assertEquals("Wrong replacedBy","4HHB 3HHB 2HHB",attrs.get("replacedBy"));
// Test invocation with a single ID
pdbIds = new String[] {"3ENI"};
attrsList = (List<Map<String,String>>) getStatusIdRecords.invoke(null, (Object) pdbIds);
assertEquals("Wrong number of records.",1, attrsList.size());
attrs = attrsList.get(0);
assertEquals("Wrong number of attributes",3,attrs.size());
assertEquals("Wrong structureId","3ENI",attrs.get("structureId"));
assertEquals("Wrong status","CURRENT",attrs.get("status"));
assertEquals("Wrong replacedBy","1M50 1KSA",attrs.get("replaces"));
} catch(Exception e) {
e.printStackTrace();
fail(e.getMessage());
}
}
}