// $HeadURL$ // $Id$ // // Copyright 2006 by the President and Fellows of Harvard College. // // Screensaver is an open-source project developed by the ICCB-L and NSRB labs // at Harvard Medical School. This software is distributed under the terms of // the GNU General Public License. package edu.harvard.med.iccbl.screensaver.soaputils; import java.util.List; import junit.framework.TestCase; import org.apache.log4j.Logger; import com.google.common.collect.Lists; /** * WARNING: this test requires an internet connection. * * @author <a mailto="john_sullivan@hms.harvard.edu">John Sullivan</a> * @author <a mailto="andrew_tolopko@hms.harvard.edu">Andrew Tolopko</a> */ public class PugSoapUtilTest extends TestCase { private static Logger log = Logger.getLogger(PugSoapUtilTest.class); public void testGetPubchemCidsForSmiles1() { String smiles = "Clc1ccc(\\C=C/c2c(C)n(C)n(c3ccccc3)c2=O)c(Cl)c1"; try { long before = System.currentTimeMillis(); int[] cids = PugSoapUtil.identitySearch(smiles); List<String> pubchemCids = Lists.newLinkedList(); for(int cid:cids) pubchemCids.add(""+cid); log.info("query time: " + (System.currentTimeMillis()-before) + ", smiles: " + smiles + ": " + pubchemCids); assertEquals(2, pubchemCids.size()); assertTrue(pubchemCids.contains("1268921")); assertTrue(pubchemCids.contains("1268922")); smiles = "O=C1CC(C)(C)CC(=O)C1C(c1ccccc1)C1=C(O)CC(C)(C)CC1=O"; before = System.currentTimeMillis(); cids = PugSoapUtil.identitySearch(smiles); pubchemCids = Lists.newLinkedList(); for(int cid:cids) pubchemCids.add(""+cid); log.info("query time: " + (System.currentTimeMillis()-before) + ", smiles: " + smiles + ": " + pubchemCids); assertEquals(2, pubchemCids.size()); assertTrue(pubchemCids.contains("558309")); assertTrue(pubchemCids.contains("7335957")); } catch (Exception e) { fail("exception: " + e.getMessage()); } } public void testGetPubchemCidsForSmiles2() { try { int[] cids = PugSoapUtil.identitySearch("N#Cc1c(CN2CCN(C)CC2)n(C)c2ccccc12"); List<String> pubchemCids = Lists.newLinkedList(); for(int cid:cids) pubchemCids.add(""+cid); assertEquals(1, pubchemCids.size()); assertEquals("607443", pubchemCids.get(0)); } catch (Exception e) { fail("exception: " + e.getMessage()); } } public void testGetPubchemCidsForSmiles3() { try { int[] cids = PugSoapUtil.identitySearch("NC(=S)c1cnc2ccccn2c1=N"); List<String> pubchemCids = Lists.newLinkedList(); for(int cid:cids) pubchemCids.add(""+cid); assertEquals(1, pubchemCids.size()); assertEquals("40486874", pubchemCids.get(0)); } catch (Exception e) { fail("exception: " + e.getMessage()); } } public void testGetPubchemCidsForSmiles4() { try { int[] cids = PugSoapUtil.identitySearch("CCOC(=O)C(C#N)C(=O)c1ccc(N)cc1"); List<String> pubchemCids = Lists.newLinkedList(); for(int cid:cids) pubchemCids.add(""+cid); assertEquals(3, pubchemCids.size()); assertTrue(pubchemCids.contains("577795")); assertTrue(pubchemCids.contains("684423")); assertTrue(pubchemCids.contains("684424")); } catch (Exception e) { fail("exception: " + e.getMessage()); } } public void testGetPubchemCidsForInvalidSmiles() { try { String smiles = "CCOC(=O)C(C#N)C(=O)c1ccc(N)cc1)"; // the dangling ')' is a actual encountered error int[] cids = PugSoapUtil.identitySearch(smiles); List<String> pubchemCids = Lists.newLinkedList(); for(int cid:cids) pubchemCids.add(""+cid); fail("faulty SMILES string: " + smiles + ", should generate an exception"); } catch (Exception e) { log.info("expected exception: " + e.getMessage()); } } public void testStandardizeSmiles1() { try { String standardizedSmiles = PugSoapUtil.standardizeSmiles("CCC"); assertEquals("CCC", standardizedSmiles); } catch (Exception e) { fail("PubchemSmilesOrInchiStandardizer threw an exception: " + e.getMessage()); } } public void testStandardizeSmiles2() { try { String standardizedSmiles = PugSoapUtil.standardizeSmiles("Clc1ccc(\\C=C/c2c(C)n(C)n(c3ccccc3)c2=O)c(Cl)c1"); assertEquals("CC1=C(C(=O)N(N1C)C2=CC=CC=C2)/C=C\\C3=C(C=C(C=C3)Cl)Cl", standardizedSmiles); } catch (Exception e) { fail("PubchemSmilesOrInchiStandardizer threw an exception: " + e.getMessage()); } } }