package org.ensembl.mart.lib.test; import javax.sql.DataSource; import junit.framework.Test; import junit.framework.TestCase; import junit.framework.TestSuite; import junit.textui.TestRunner; import org.ensembl.mart.lib.Attribute; import org.ensembl.mart.lib.BasicFilter; import org.ensembl.mart.lib.FieldAttribute; import org.ensembl.mart.lib.Filter; import org.ensembl.mart.lib.Query; import org.ensembl.mart.lib.QueryListener; import org.ensembl.mart.lib.SequenceDescription; import org.ensembl.mart.lib.config.DatasetConfig; /** * Tests Query's setters, getters and listener notification mechanisms. * * @author craig * */ public class QueryTest extends TestCase implements QueryListener { private Query q = null; private int numChanges = 0; private int expectedNumChanges = 0; public static void main(String[] args) { TestRunner.run(suite()); } public static Test suite() { TestSuite suite = new TestSuite(); //suite.addTest(new QueryTest("testKakaQuery")); suite.addTestSuite(QueryTest.class); return suite; } public QueryTest(String name) { super(name); } public void setUp() { q = new Query(); q.addQueryChangeListener(this); numChanges = 0; expectedNumChanges = 0; } public void testSettingPrimaryKeys() throws Exception { String[] pKeys = new String[] { "gene_id", "transcript_id" }; q.setPrimaryKeys(pKeys); expectedNumChanges++; assertEquals(expectedNumChanges, numChanges); assertEquals(pKeys, q.getPrimaryKeys()); pKeys = null; q.setPrimaryKeys(pKeys); expectedNumChanges++; assertEquals(expectedNumChanges, numChanges); assertEquals(pKeys, q.getPrimaryKeys()); } public void testSettingAttributes() throws Exception { Attribute a = new FieldAttribute("chr_name"); Attribute a2 = new FieldAttribute("geneName"); Attribute a3 = new FieldAttribute("geneLength"); q.addAttribute(a); expectedNumChanges++; assertEquals(expectedNumChanges, numChanges); assertEquals(a, q.getAttributes()[0]); q.removeAttribute(a); expectedNumChanges++; assertEquals(expectedNumChanges, numChanges); assertEquals(0, q.getAttributes().length); q.addAttribute(a); expectedNumChanges++; assertEquals(expectedNumChanges, numChanges); try { q.addAttribute(a); fail("Shouldn't add attribute if already included"); } catch (IllegalArgumentException e) { } q.addAttribute(a2); expectedNumChanges++; assertEquals(expectedNumChanges, numChanges); assertEquals(a2, q.getAttributes()[1]); q.addAttribute(1, a3); expectedNumChanges++; assertEquals(expectedNumChanges, numChanges); assertEquals(3, q.getAttributes().length); assertEquals(a, q.getAttributes()[0]); assertEquals(a3, q.getAttributes()[1]); assertEquals(a2, q.getAttributes()[2]); q.removeAttribute(a3); expectedNumChanges++; assertEquals(expectedNumChanges, numChanges); assertEquals(a, q.getAttributes()[0]); assertEquals(a2, q.getAttributes()[1]); } public void testSettingFilters() throws Exception { Filter f = new BasicFilter("chr_name", "=", "22"); Filter f2 = new BasicFilter("geneName", "=", "fred"); Filter f3 = new BasicFilter("numDiseases", ">", "3"); q.addFilter(f); expectedNumChanges++; assertEquals(expectedNumChanges, numChanges); assertEquals(f, q.getFilters()[0]); q.addFilter(f2); expectedNumChanges++; assertEquals(expectedNumChanges, numChanges); assertEquals(f, q.getFilters()[0]); assertEquals(f2, q.getFilters()[1]); q.addFilter(1, f3); expectedNumChanges++; assertEquals(expectedNumChanges, numChanges); assertEquals(f, q.getFilters()[0]); assertEquals(f3, q.getFilters()[1]); assertEquals(f2, q.getFilters()[2]); q.removeFilter(f); expectedNumChanges++; assertEquals(expectedNumChanges, numChanges); assertEquals(2, q.getFilters().length); assertEquals(f3, q.getFilters()[0]); assertEquals(f2, q.getFilters()[1]); q.replaceFilter(f2, f); expectedNumChanges++; assertEquals(expectedNumChanges, numChanges); assertEquals(2, q.getFilters().length); assertEquals(f3, q.getFilters()[0]); assertEquals(f, q.getFilters()[1]); q.addFilter(f2); expectedNumChanges++; q.removeFilter(f3); expectedNumChanges++; assertEquals(expectedNumChanges, numChanges); assertEquals(f, q.getFilters()[0]); assertEquals(f2, q.getFilters()[1]); } public void testSettingLimit() throws Exception { int limit = 100; q.setLimit(limit); assertEquals(limit, q.getLimit()); expectedNumChanges++; assertEquals(expectedNumChanges, numChanges); } public void testSettingDatasetInternalName() throws Exception { String datasetInternalName = "DS1"; q.setDataset(datasetInternalName); assertEquals(datasetInternalName, q.getDataset()); expectedNumChanges++; assertEquals(expectedNumChanges, numChanges); } /* (non-Javadoc) * @see org.ensembl.mart.lib.QueryChangeListener#queryDatasetInternalNameChanged(org.ensembl.mart.lib.Query, java.lang.String, java.lang.String) */ public void datasetChanged( Query sourceQuery, String oldDatasetInternalName, String newDatasetInternalName) { numChanges++; } /* (non-Javadoc) * @see org.ensembl.mart.lib.QueryChangeListener#queryStarBasesChanged(org.ensembl.mart.lib.Query, java.lang.String[], java.lang.String[]) */ public void starBasesChanged( Query sourceQuery, String[] oldStarBases, String[] newStarBases) { numChanges++; } /* (non-Javadoc) * @see org.ensembl.mart.lib.QueryChangeListener#queryPrimaryKeysChanged(org.ensembl.mart.lib.Query, java.lang.String[], java.lang.String[]) */ public void primaryKeysChanged( Query sourceQuery, String[] oldPrimaryKeys, String[] newPrimaryKeys) { numChanges++; } /* (non-Javadoc) * @see org.ensembl.mart.lib.QueryChangeListener#queryNameChanged(org.ensembl.mart.lib.Query, java.lang.String, java.lang.String) */ public void queryNameChanged( Query sourceQuery, String oldName, String newName) { numChanges++; } /* (non-Javadoc) * @see org.ensembl.mart.lib.QueryChangeListener#queryDatasourceChanged(org.ensembl.mart.lib.Query, javax.sql.DataSource, javax.sql.DataSource) */ public void datasourceChanged( Query sourceQuery, DataSource oldDatasource, DataSource newDatasource) { numChanges++; } /* (non-Javadoc) * @see org.ensembl.mart.lib.QueryChangeListener#queryAttributeAdded(org.ensembl.mart.lib.Query, org.ensembl.mart.lib.Attribute) */ public void attributeAdded( Query sourceQuery, int index, Attribute attribute) { numChanges++; } /* (non-Javadoc) * @see org.ensembl.mart.lib.QueryChangeListener#queryAttributeRemoved(org.ensembl.mart.lib.Query, org.ensembl.mart.lib.Attribute) */ public void attributeRemoved( Query sourceQuery, int index, Attribute attribute) { numChanges++; } /* (non-Javadoc) * @see org.ensembl.mart.lib.QueryChangeListener#queryFilterAdded(org.ensembl.mart.lib.Query, org.ensembl.mart.lib.Filter) */ public void filterAdded(Query sourceQuery, int index, Filter filter) { numChanges++; } /* (non-Javadoc) * @see org.ensembl.mart.lib.QueryChangeListener#queryFilterRemoved(org.ensembl.mart.lib.Query, org.ensembl.mart.lib.Filter) */ public void filterRemoved(Query sourceQuery, int index, Filter filter) { numChanges++; } /* (non-Javadoc) * @see org.ensembl.mart.lib.QueryChangeListener#querySequenceDescriptionChanged(org.ensembl.mart.lib.Query, org.ensembl.mart.lib.SequenceDescription, org.ensembl.mart.lib.SequenceDescription) */ public void sequenceDescriptionChanged( Query sourceQuery, SequenceDescription oldSequenceDescription, SequenceDescription newSequenceDescription) { numChanges++; } /* (non-Javadoc) * @see org.ensembl.mart.lib.QueryChangeListener#queryLimitChanged(org.ensembl.mart.lib.Query, int, int) */ public void limitChanged(Query query, int oldLimit, int newLimit) { numChanges++; } /* (non-Javadoc) * @see org.ensembl.mart.lib.QueryChangeListener#queryFilterChanged(org.ensembl.mart.lib.Query, org.ensembl.mart.lib.Filter, org.ensembl.mart.lib.Filter) */ public void filterChanged( Query sourceQuery, int index, Filter oldFilter, Filter newFilter) { numChanges++; } /* (non-Javadoc) * @see org.ensembl.mart.lib.QueryChangeListener#datasetConfigChanged(org.ensembl.mart.lib.Query, org.ensembl.mart.lib.config.DatasetConfig, org.ensembl.mart.lib.config.DatasetConfig) */ public void datasetConfigChanged( Query query, DatasetConfig oldDatasetConfig, DatasetConfig newDatasetConfig) { numChanges++; } }