/* * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$) * Copyright (C) $$Year-Rel$$ 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 jalview.datamodel.SequenceI; import jalview.gui.JvOptionPane; import jalview.io.DataSourceType; import java.io.File; import java.io.IOException; import java.util.HashSet; import java.util.Set; import java.util.Vector; import org.testng.annotations.BeforeClass; import mc_view.PDBfile; /** * This is not a unit test, rather it is a bulk End-to-End scan for sequences * consistency for PDB files parsed with JmolParser vs. Jalview's PDBfile * parser. The directory of PDB files to test must be provided in the launch * args. * * @author tcnofoegbu * */ public class JmolVsJalviewPDBParserEndToEndTest { @BeforeClass(alwaysRun = true) public void setUpJvOptionPane() { JvOptionPane.setInteractiveMode(false); JvOptionPane.setMockResponse(JvOptionPane.CANCEL_OPTION); } /** * * @param args * @j2sIgnore */ public static void main(String[] args) { if (args == null || args[0] == null) { System.err.println( "You must provide a PDB directory in the launch argument"); return; } // args[0] must provide the directory of PDB files to run the test with String testDir = args[0]; System.out.println("PDB directory : " + testDir); File pdbDir = new File(testDir); String testFiles[] = pdbDir.list(); testFileParser(testDir, testFiles); } public static void testFileParser(String testDir, String[] testFiles) { Set failedFiles = new HashSet<>(); int totalSeqScanned = 0, totalFail = 0; for (String pdbStr : testFiles) { String testFile = testDir + "/" + pdbStr; PDBfile mctest = null; JmolParser jtest = null; try { mctest = new PDBfile(false, false, false, testFile, DataSourceType.FILE); jtest = new JmolParser(testFile, DataSourceType.FILE); } catch (IOException e) { System.err.println("Exception thrown while parsing : " + pdbStr); } Vector seqs = jtest.getSeqs(); Vector mcseqs = mctest.getSeqs(); for (SequenceI sq : seqs) { try { String testSeq = mcseqs.remove(0).getSequenceAsString(); if (!sq.getSequenceAsString().equals(testSeq)) { ++totalFail; System.err.println("Test Failed for " + pdbStr + ". Diff:"); System.err.println(sq.getSequenceAsString()); System.err.println(testSeq); failedFiles.add(pdbStr); } ++totalSeqScanned; } catch (Exception e) { e.printStackTrace(); } } } int count = 0; System.out.println("\n\nTotal sequence Scanned : " + totalSeqScanned); System.out.println( "Total sequence passed : " + (totalSeqScanned - totalFail)); System.out.println("Total sequence failed : " + totalFail); System.out.println("Success rate: " + ((totalSeqScanned - totalFail) * 100) / totalSeqScanned + "%"); System.out.println("\nList of " + failedFiles.size() + " file(s) with sequence diffs:"); for (String problemFile : failedFiles) { System.out.println(++count + ". " + problemFile); } } }