/* *****************************************************************************
* Copyright (c) 2009 Ola Spjuth <ola@bioclipse.net>
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contact: http://www.bioclipse.net/
******************************************************************************/
package net.bioclipse.vscreen.tests;
import static org.junit.Assert.*;
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import junit.framework.TestFailure;
import net.bioclipse.core.business.BioclipseException;
import net.bioclipse.core.util.FileUtil;
import net.bioclipse.structuredb.Activator;
import net.bioclipse.structuredb.business.IJavaStructuredbManager;
import net.bioclipse.vscreen.business.IVScreenManager;
import net.bioclipse.vscreen.filters.IScreeningFilter;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.FileLocator;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.core.runtime.Platform;
import org.junit.Before;
import org.junit.Test;
/**
*
* @author ola
*
*/
public abstract class AbstractVScreenManagerPluginTest {
protected static IVScreenManager vscreen;
private final String TEST_DB_NAME="TestDB";
private final String TEST_FILE = "/net/bioclipse/vscreen/tests/data/Fragments2.sdf";
IJavaStructuredbManager sdb;
@Before
public void initialize() throws IOException, CoreException, BioclipseException, URISyntaxException{
sdb = Activator.getDefault().getStructuredbManager();
//Set up and populate a StructureDB instance
if ( sdb.allDatabaseNames().contains(TEST_DB_NAME) ) {
sdb.deleteDatabase(TEST_DB_NAME, new NullProgressMonitor());
}
sdb.createDatabase(TEST_DB_NAME);
IFile file=null;
URI uri = getClass().getResource(TEST_FILE).toURI();
URL url = FileLocator.toFileURL(uri.toURL());
String path = url.getFile();
// URL url = FileLocator.toFileURL(Platform.getBundle(
// net.bioclipse.vscreen.tests.Activator.PLUGIN_ID)
// .getEntry(TEST_FILE));
// String path=url.getFile();
file = FileUtil.createLinkedFile(path );
sdb.addMoleculesFromSDF(TEST_DB_NAME, file);
}
@Test
public void testDatabaseSetup() {
assertTrue("Test database not set up correctyl.",
sdb.allDatabaseNames().contains( TEST_DB_NAME ));
assertEquals("TEST DB does not contain 5 mols.", 5,
sdb.numberOfMoleculesInDatabaseInstance( TEST_DB_NAME ));
}
@Test
public void testXlogPFilter() throws BioclipseException {
sdb = Activator.getDefault().getStructuredbManager();
int nomols=sdb.numberOfMoleculesInDatabaseInstance( TEST_DB_NAME );
assertEquals("Incorrect number of mols in TEST DB.", 5, nomols );
//Add some filters
List<IScreeningFilter>filters = new ArrayList<IScreeningFilter>();
filters.add(vscreen.createFilter("XlogP" , "<" , 3));
//Screen with filter and assert results
vscreen.filter(TEST_DB_NAME, filters, "filterXLOGP", "xlogp",
new NullProgressMonitor());
assertEquals(3, sdb.numberOfMoleculesInDatabaseInstance("filterXLOGP"));
//Add another filters
filters.add(vscreen.createFilter("XlogP" , ">" , 1.5));
//Screen with filter and assert results
vscreen.filter(TEST_DB_NAME, filters, "filterXLOGP2", "xlogp2", new NullProgressMonitor() );
assertEquals(2,sdb.numberOfMoleculesInDatabaseInstance("filterXLOGP2"));
}
@Test
public void testMWFilter() throws BioclipseException {
sdb = Activator.getDefault().getStructuredbManager();
int nomols=sdb.numberOfMoleculesInDatabaseInstance( TEST_DB_NAME );
assertEquals("Incorrect number of mols in TEST DB.", 5, nomols );
//Add some filters
List<IScreeningFilter>filters = new ArrayList<IScreeningFilter>();
filters.add(vscreen.createFilter("MW" , "<" , 290));
//Screen with filter and assert results
vscreen.filter(TEST_DB_NAME, filters, "filterMW", "mw", new NullProgressMonitor());
assertEquals(3, sdb.numberOfMoleculesInDatabaseInstance( "filterMW" ));
//Add another filters
filters.add(vscreen.createFilter("MW" , ">" , 240));
//Screen with filter and assert results
vscreen.filter(TEST_DB_NAME, filters, "filterMW2", "xlogpMW2", new NullProgressMonitor());
assertEquals(2, sdb.numberOfMoleculesInDatabaseInstance( "filterMW2" ));
}
@Test
public void testElementFilter() throws BioclipseException {
sdb = Activator.getDefault().getStructuredbManager();
int nomols=sdb.numberOfMoleculesInDatabaseInstance( TEST_DB_NAME );
assertEquals("Incorrect number of mols in TEST DB.", 5, nomols );
//Add some filters
List<IScreeningFilter>filters = new ArrayList<IScreeningFilter>();
filters.add(vscreen.createFilter("restrictElement", "C,N,O,Cl,S"));
//Screen with filter and assert results
vscreen.filter(TEST_DB_NAME, filters, "filterElement", "element" , new NullProgressMonitor());
assertEquals(5, sdb.numberOfMoleculesInDatabaseInstance( "filterElement" ));
//Add another filters
filters.add(vscreen.createFilter("restrictElement", "C,N,O,S"));
//Screen with filter and assert results
vscreen.filter(TEST_DB_NAME, filters, "filterElement2", "element2" , new NullProgressMonitor());
assertEquals(3, sdb.numberOfMoleculesInDatabaseInstance( "filterElement2" ));
}
@Test
public void testRo5Filter() throws BioclipseException {
sdb = Activator.getDefault().getStructuredbManager();
int nomols=sdb.numberOfMoleculesInDatabaseInstance( TEST_DB_NAME );
assertEquals("Incorrect number of mols in TEST DB.", 5, nomols );
//Add some filters
List<IScreeningFilter>filters = new ArrayList<IScreeningFilter>();
//Should have less than 2 failures
filters.add(vscreen.createFilter("RuleOfFive", "<=" , 2));
//Screen with filter and assert results
vscreen.filter(TEST_DB_NAME, filters, "filterRuleOfFive", "RuleOfFive" , new NullProgressMonitor());
assertEquals(5, sdb.numberOfMoleculesInDatabaseInstance( "filterRuleOfFive" ));
//Add another filter, no failures now required
filters.add(vscreen.createFilter("RuleOfFive", "=" , 0));
//Screen with filter and assert results
vscreen.filter(TEST_DB_NAME, filters, "filterRuleOfFive2", "RuleOfFive2" , new NullProgressMonitor());
assertEquals(5, sdb.numberOfMoleculesInDatabaseInstance( "filterRuleOfFive2" ));
}
@Test
public void testSMARTSFilter() throws BioclipseException {
sdb = Activator.getDefault().getStructuredbManager();
int nomols=sdb.numberOfMoleculesInDatabaseInstance( TEST_DB_NAME );
assertEquals("Incorrect number of mols in TEST DB.", 5, nomols );
//Add some filters
List<IScreeningFilter>filters = new ArrayList<IScreeningFilter>();
filters.add(vscreen.createFilter("smarts", "C,N,O,Cl,S,F"));
//Screen with filter and assert results
vscreen.filter(TEST_DB_NAME, filters, "filterSMARTS", "SMARTS" , new NullProgressMonitor());
assertEquals(5, sdb.numberOfMoleculesInDatabaseInstance( "filterSMARTS" ));
//Add another filters
filters.add(vscreen.createFilter("smarts", "C,N,O"));
//Screen with filter and assert results
vscreen.filter(TEST_DB_NAME, filters, "filterSMARTS2", "SMARTS2" , new NullProgressMonitor());
assertEquals(0, sdb.numberOfMoleculesInDatabaseInstance( "filterSMARTS2" ));
}
@Test
public void testRingCountFilter() throws BioclipseException {
sdb = Activator.getDefault().getStructuredbManager();
int nomols=sdb.numberOfMoleculesInDatabaseInstance( TEST_DB_NAME );
assertEquals("Incorrect number of mols in TEST DB.", 5, nomols );
//Add some filters
List<IScreeningFilter>filters = new ArrayList<IScreeningFilter>();
//Should have less than 2 failures
filters.add(vscreen.createFilter("RingCount" , ">=" , 1));
//Screen with filter and assert results
vscreen.filter(TEST_DB_NAME, filters, "filterRingCount", "RingCount" , new NullProgressMonitor());
assertEquals(5, sdb.numberOfMoleculesInDatabaseInstance( "filterRingCount" ));
//Add another filter, no failures now required
filters.add(vscreen.createFilter("RingCount" , ">=" , 2));
//Screen with filter and assert results
vscreen.filter(TEST_DB_NAME, filters, "filterRingCount2", "RingCount2" , new NullProgressMonitor());
assertEquals(4, sdb.numberOfMoleculesInDatabaseInstance( "filterRingCount2" ));
}
@Test
public void testTPSA() throws BioclipseException {
sdb = Activator.getDefault().getStructuredbManager();
int nomols=sdb.numberOfMoleculesInDatabaseInstance( TEST_DB_NAME );
assertEquals("Incorrect number of mols in TEST DB.", 5, nomols );
//Add some filters
List<IScreeningFilter>filters = new ArrayList<IScreeningFilter>();
//Should have less than 2 failures
filters.add(vscreen.createFilter("TPSA" , "<" , 100));
//Screen with filter and assert results
vscreen.filter(TEST_DB_NAME, filters, "filterTPSA", "TPSA" , new NullProgressMonitor());
assertEquals(5, sdb.numberOfMoleculesInDatabaseInstance( "filterTPSA" ));
//Add another filter, no failures now required
filters.add(vscreen.createFilter("TPSA" , ">" , 80));
//Screen with filter and assert results
vscreen.filter(TEST_DB_NAME, filters, "filterTPSA", "TPSA" , new NullProgressMonitor());
assertEquals(5, sdb.numberOfMoleculesInDatabaseInstance( "filterTPSA" ));
}
}