From 08177c20d207f9e34866e220517b168ea517ac5b Mon Sep 17 00:00:00 2001 From: tjc <tjc@ee4ac58c-ac51-4696-9907-e4b3aa274f04> Date: Wed, 25 Mar 2009 12:01:57 +0000 Subject: [PATCH] tests for transferring annotation git-svn-id: svn+ssh://svn.internal.sanger.ac.uk/repos/svn/pathsoft/artemis/trunk@10275 ee4ac58c-ac51-4696-9907-e4b3aa274f04 --- .../TransferAnnotationToolTest.java | 236 ++++++++++++++++++ 1 file changed, 236 insertions(+) create mode 100644 test/uk/ac/sanger/artemis/components/TransferAnnotationToolTest.java diff --git a/test/uk/ac/sanger/artemis/components/TransferAnnotationToolTest.java b/test/uk/ac/sanger/artemis/components/TransferAnnotationToolTest.java new file mode 100644 index 000000000..77bc35d27 --- /dev/null +++ b/test/uk/ac/sanger/artemis/components/TransferAnnotationToolTest.java @@ -0,0 +1,236 @@ +/* TransferAnnotationToolTest.java + * + * created: 2009 + * + * This file is part of Artemis + * + * Copyright (C) 2009 Genome Research Limited + * + * This program 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 2 + * of the License, or (at your option) any later version. + * + * This program 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 this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + */ + +package uk.ac.sanger.artemis.components; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; + +import java.net.URL; +import java.util.List; +import java.util.Vector; +import java.util.Enumeration; +import java.util.Hashtable; +import javax.swing.JCheckBox; + +import junit.framework.Assert; + +import org.junit.Before; +import org.junit.Test; + +import uk.ac.sanger.artemis.Entry; +import uk.ac.sanger.artemis.EntryGroup; +import uk.ac.sanger.artemis.Feature; +import uk.ac.sanger.artemis.FeatureKeyQualifierPredicate; +import uk.ac.sanger.artemis.FeaturePredicate; +import uk.ac.sanger.artemis.FeatureVector; +import uk.ac.sanger.artemis.Options; +import uk.ac.sanger.artemis.SimpleEntryGroup; + +import uk.ac.sanger.artemis.io.EntryInformation; +import uk.ac.sanger.artemis.io.Key; +import uk.ac.sanger.artemis.sequence.Bases; +import uk.ac.sanger.artemis.util.Document; +import uk.ac.sanger.artemis.util.DocumentFactory; +import uk.ac.sanger.artemis.util.InputStreamProgressListener; +import uk.ac.sanger.artemis.util.StringVector; + +public class TransferAnnotationToolTest +{ + private QualifierPanel qPanel; + private Vector genesToTransferTo = new Vector(); + private String productStr; + private EntryGroup entryGroup; + private Feature originatingFeature; + + /** + * Open a flat file and create the components in the TransferAnnotaionTool + * used to control the transfer of annotation. + */ + @Before + public void setup() + { + entryGroup = readFile(); + originatingFeature = getFeature("gene", "O", "CDS", entryGroup); + + qPanel = new QualifierPanel(originatingFeature, + originatingFeature.getKey().getKeyString()); + Hashtable qualifierHash = (Hashtable) qPanel.getQualifierCheckBoxes(); + + Enumeration enumQ = qualifierHash.keys(); + productStr = null; + while (enumQ.hasMoreElements()) + { + JCheckBox cbQualifierName = (JCheckBox) enumQ.nextElement(); + + if (cbQualifierName.getText().equals("product")) + { + cbQualifierName.setSelected(true); + Vector cbQualifierValues = (Vector) qualifierHash.get(cbQualifierName); + for (int i = 0; i < cbQualifierValues.size(); i++) + { + JCheckBox cbQualifierValue = (JCheckBox) cbQualifierValues.get(i); + cbQualifierValue.setSelected(true); + productStr = cbQualifierValue.getText(); + } + } + else + cbQualifierName.setSelected(false); + } + + JCheckBox cbNamesToTransferTo = new JCheckBox("N", true); + genesToTransferTo.add(cbNamesToTransferTo); + } + + + /** + * Test for appending qualifiers. + */ + @Test + public void testAppend() + { + // append product + TransferAnnotationTool.transferAnnotation(qPanel.getQualifierCheckBoxes(), + genesToTransferTo, originatingFeature, entryGroup, true, false); + + testTransferResult(entryGroup, 2, productStr); + } + + /** + * Test for appending qualifiers does not create duplicates when run + * again. + */ + @Test + public void testAppend2() + { + testAppend(); + } + + /** + * Test for overwriting qualifiers. + */ + @Test + public void testOverwrite() + { + // check it overwrites product + TransferAnnotationTool.transferAnnotation(qPanel.getQualifierCheckBoxes(), + genesToTransferTo, originatingFeature, entryGroup, true, true); + + testTransferResult(entryGroup, 1, productStr); + } + + /** + * Check the result of the annotation transfer is correct. + * @param entryGroup + * @param nproducts + * @param productStr + */ + private void testTransferResult(final EntryGroup entryGroup, + final int nproducts, + final String productStr) + { + final Feature featureN = getFeature("gene", "N", "CDS", entryGroup); + boolean hasTransferred = false; + StringVector values = null; + try + { + values = featureN.getQualifierByName("product").getValues(); + for (int j = 0; j < values.size(); j++) + { + if (((String) values.get(j)).equals(productStr)) + hasTransferred = true; + } + } + catch (Exception e) + { + Assert.fail(e.getMessage()); + } + + assertEquals("Annotation transfer (product), number of values", values.size(), nproducts); + assertTrue("Annotation transfer (product)", hasTransferred); + } + + /** + * Return an Artemis EntryGroup by reading in an example file + * @return + */ + private EntryGroup readFile() + { + URL url = TransferAnnotationToolTest.class.getResource("/etc/af063097.embl"); + + //assertEquals("Number", 4, 4); + final EntryInformation artemisEntryInformation = + Options.getArtemisEntryInformation(); + final Document entryDocument = + DocumentFactory.makeDocument(url.getFile()); + + final uk.ac.sanger.artemis.io.Entry emblEntry = + EntryFileDialog.getEntryFromFile(null, entryDocument, + artemisEntryInformation, false); + try + { + final Entry entry = new Entry(emblEntry); + final EntryGroup entryGroup = new SimpleEntryGroup(entry.getBases()); + entryGroup.add(entry); + return entryGroup; + } + catch(uk.ac.sanger.artemis.util.OutOfRangeException oore) + { + Assert.fail(oore.getMessage()); + } + catch(uk.ac.sanger.artemis.sequence.NoSequenceException nse) + { + Assert.fail(nse.getMessage()); + } + return null; + } + + /** + * Return a feature in an entry group by searching for the feature + * key and a qualifier with a given value. + * @param qualifierName + * @param qualifierValue + * @param key + * @param entryGroup + * @return + */ + private Feature getFeature(final String qualifierName, + final String qualifierValue, + final String key, + final EntryGroup entryGroup) + { + FeatureVector features = entryGroup.getAllFeatures(); + FeaturePredicate newPredicate = new FeatureKeyQualifierPredicate( + new Key(key), qualifierName, qualifierValue, false, false); + + for (int i = 0; i < features.size(); i++) + { + Feature f = features.elementAt(i); + if (newPredicate.testPredicate(f)) + return f; + } + return null; + } +} + -- GitLab