diff --git a/test/uk/ac/sanger/artemis/io/GFFTest.java b/test/uk/ac/sanger/artemis/io/GFFTest.java new file mode 100644 index 0000000000000000000000000000000000000000..fd4b41cb42fedfa9610bb796da2b8349d3946d7a --- /dev/null +++ b/test/uk/ac/sanger/artemis/io/GFFTest.java @@ -0,0 +1,97 @@ +/* + * This file is part of Artemis + * + * Copyright (C) 2013 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.io; + +import static org.junit.Assert.assertTrue; +import junit.framework.Assert; + +import org.junit.Test; + +import uk.ac.sanger.artemis.EntryGroup; +import uk.ac.sanger.artemis.Feature; +import uk.ac.sanger.artemis.FeatureVector; +import uk.ac.sanger.artemis.Options; +import uk.ac.sanger.artemis.SimpleEntryGroup; +import uk.ac.sanger.artemis.io.Entry; +import uk.ac.sanger.artemis.io.Qualifier; +import uk.ac.sanger.artemis.io.InvalidRelationException; +import uk.ac.sanger.artemis.sequence.NoSequenceException; +import uk.ac.sanger.artemis.util.OutOfRangeException; +import uk.ac.sanger.artemis.util.StringVector; + +public class GFFTest +{ + @Test + /** + * For a GFF with multiple sequences check the offset position + * of a gene is correctly set. + */ + public void testGFFMultipleFastaOffset() + { + try + { + final Entry entry = Utils.getEntry("/data/Pf3D7_01_02_v3.gff.gz"); + final EntryGroup egrp = new SimpleEntryGroup(); + egrp.add(new uk.ac.sanger.artemis.Entry(entry)); + final FeatureVector features = egrp.getAllFeatures(); + + // change the translation table did cause a problem + // with the offset that has now been fixed in GFFDocumentEntry + Utils.changeTranslationTable("11"); + + for (int i=0; i<features.size(); i++) + { + Feature f = features.elementAt(i); + try + { + final Qualifier q = f.getQualifierByName("ID"); + if (q != null) + { + final String id = q.getValues().get(0); + if (id.equals("PF3D7_0200100")) + { + assertTrue("Offset check first base: " + id + + " " +f.getFirstBase() + " != 666083", + f.getFirstBase() == 666083); + + assertTrue("Offset check location: " + id+ + " " +f.getEmblFeature().getLocation().getFirstBase() + " != 666083", + f.getEmblFeature().getLocation().getFirstBase() == 666083); + } + } + } + catch(InvalidRelationException e) + { + Assert.fail(e.getMessage()); + } + } + } + catch (OutOfRangeException e) + { + Assert.fail(e.getMessage()); + } + catch (NoSequenceException e) + { + Assert.fail(e.getMessage()); + } + } + +} \ No newline at end of file diff --git a/test/uk/ac/sanger/artemis/io/Utils.java b/test/uk/ac/sanger/artemis/io/Utils.java new file mode 100644 index 0000000000000000000000000000000000000000..6395e94b028be31ecac37fab1d7ab89039db8c1a --- /dev/null +++ b/test/uk/ac/sanger/artemis/io/Utils.java @@ -0,0 +1,90 @@ +/* + * This file is part of Artemis + * + * Copyright (C) 2013 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.io; + +import java.io.IOException; +import java.net.URL; + +import junit.framework.Assert; +import uk.ac.sanger.artemis.Options; +import uk.ac.sanger.artemis.io.DocumentEntryFactory; +import uk.ac.sanger.artemis.io.Entry; +import uk.ac.sanger.artemis.io.EntryInformationException; +import uk.ac.sanger.artemis.sequence.AminoAcidSequence; +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.StringVector; + +public class Utils +{ + protected static Entry getEntry(final String fileName) + { + try + { + URL entryFile = ValidateFeatureTest.class.getResource(fileName); + final Document doc = DocumentFactory.makeDocument(entryFile.getFile()); + return DocumentEntryFactory.makeDocumentEntry( + Options.getArtemisEntryInformation(),doc,null); + } + catch(EntryInformationException e) + { + Assert.fail(e.getMessage()); + } + catch(IOException e) + { + Assert.fail(e.getMessage()); + } + return null; + } + + /** + * Method to change the translation table being used + * @param n - genetic code table number + */ + protected static void changeTranslationTable(String n) + { + StringVector options_file_table = + Options.getOptions().getOptionValues("translation_table_"+n); + StringVector table = Options.getOptions().getOptionValues("translation_table_1"); + for(String cod_plus_aa: options_file_table) + { + final int codon_index = Bases.getIndexOfBase(cod_plus_aa.charAt(0)) * 16 + + Bases.getIndexOfBase(cod_plus_aa.charAt(1)) * 4 + + Bases.getIndexOfBase(cod_plus_aa.charAt(2)); + table.setElementAt(cod_plus_aa.substring(3), codon_index); + } + + StringBuffer sbuff = new StringBuffer(); + for(int i = 0; i < 64; ++i) + sbuff.append(table.elementAt(i)+" "); + Options.getOptions().setGeneticCode(sbuff.toString()); + + options_file_table = + Options.getOptions().getOptionValues("start_codons_"+n); + sbuff = new StringBuffer(); + for(String start: options_file_table) + sbuff.append(start+" "); + + Options.getOptions().setProperty("start_codons",sbuff.toString()); + AminoAcidSequence.setGeneCode(); + } +} \ No newline at end of file diff --git a/test/uk/ac/sanger/artemis/io/ValidateFeatureTest.java b/test/uk/ac/sanger/artemis/io/ValidateFeatureTest.java index bbafa43ff7ac0d57f6c0d1be92e4e0b6c4974c67..676c92cd822543b4bd418649a4f28179135a6108 100644 --- a/test/uk/ac/sanger/artemis/io/ValidateFeatureTest.java +++ b/test/uk/ac/sanger/artemis/io/ValidateFeatureTest.java @@ -1,3 +1,23 @@ +/* + * This file is part of Artemis + * + * Copyright (C) 2013 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.io; import static org.junit.Assert.assertEquals; @@ -36,7 +56,7 @@ public class ValidateFeatureTest { try { - final Entry entry = getEntry("/data/test.gff.gz"); + final Entry entry = Utils.getEntry("/data/test.gff.gz"); final EntryGroup egrp = new SimpleEntryGroup(); egrp.add(new uk.ac.sanger.artemis.Entry(entry)); ValidateFeature validate = new ValidateFeature(egrp); @@ -82,7 +102,7 @@ public class ValidateFeatureTest @Test public void testGFFBoundary() { - final Entry entry = getEntry("/data/test_boundary.gff.gz"); + final Entry entry = Utils.getEntry("/data/test_boundary.gff.gz"); final FeatureVector features = entry.getAllFeatures(); for(uk.ac.sanger.artemis.io.Feature f: features) @@ -105,7 +125,7 @@ public class ValidateFeatureTest @Test public void testGFFStrand() { - final Entry entry = getEntry("/data/test_boundary.gff.gz"); + final Entry entry = Utils.getEntry("/data/test_boundary.gff.gz"); final FeatureVector features = entry.getAllFeatures(); for(uk.ac.sanger.artemis.io.Feature f: features) @@ -128,7 +148,7 @@ public class ValidateFeatureTest @Test public void testGFFPhase() { - final Entry entry = getEntry("/data/test_boundary.gff.gz"); + final Entry entry = Utils.getEntry("/data/test_boundary.gff.gz"); final FeatureVector features = entry.getAllFeatures(); for(uk.ac.sanger.artemis.io.Feature f: features) @@ -151,7 +171,7 @@ public class ValidateFeatureTest @Test public void testGFFCompleteGeneModel() { - final Entry entry = getEntry("/data/test_boundary.gff.gz"); + final Entry entry = Utils.getEntry("/data/test_boundary.gff.gz"); final FeatureVector features = entry.getAllFeatures(); for(uk.ac.sanger.artemis.io.Feature f: features) @@ -180,7 +200,7 @@ public class ValidateFeatureTest @Test public void testGFFId() { - final Entry entry = getEntry("/data/test_boundary.gff.gz"); + final Entry entry = Utils.getEntry("/data/test_boundary.gff.gz"); final FeatureVector features = entry.getAllFeatures(); for(uk.ac.sanger.artemis.io.Feature f: features) @@ -205,7 +225,7 @@ public class ValidateFeatureTest @Test public void testGFFPartials() { - final Entry entry = getEntry("/data/test_boundary.gff.gz"); + final Entry entry = Utils.getEntry("/data/test_boundary.gff.gz"); final FeatureVector features = entry.getAllFeatures(); for(uk.ac.sanger.artemis.io.Feature f: features) @@ -232,7 +252,7 @@ public class ValidateFeatureTest @Test public void testGFFAttributes() { - final Entry entry = getEntry("/data/test_boundary.gff.gz"); + final Entry entry = Utils.getEntry("/data/test_boundary.gff.gz"); final FeatureVector features = entry.getAllFeatures(); for(uk.ac.sanger.artemis.io.Feature f: features) @@ -259,7 +279,7 @@ public class ValidateFeatureTest { try { - final Entry entry = getEntry("/data/test_boundary.gff.gz"); + final Entry entry = Utils.getEntry("/data/test_boundary.gff.gz"); final FeatureVector features = entry.getAllFeatures(); final EntryGroup egrp = new SimpleEntryGroup(); egrp.add(new uk.ac.sanger.artemis.Entry(entry)); @@ -294,7 +314,7 @@ public class ValidateFeatureTest { try { - final Entry entry = getEntry("/data/test_boundary.gff.gz"); + final Entry entry = Utils.getEntry("/data/test_boundary.gff.gz"); final FeatureVector features = entry.getAllFeatures(); final EntryGroup egrp = new SimpleEntryGroup(); egrp.add(new uk.ac.sanger.artemis.Entry(entry)); @@ -317,24 +337,4 @@ public class ValidateFeatureTest } } - - private Entry getEntry(final String gff) - { - try - { - URL gffFile = ValidateFeatureTest.class.getResource(gff); - final Document doc = DocumentFactory.makeDocument(gffFile.getFile()); - return DocumentEntryFactory.makeDocumentEntry( - Options.getArtemisEntryInformation(),doc,null); - } - catch(EntryInformationException e) - { - Assert.fail(e.getMessage()); - } - catch(IOException e) - { - Assert.fail(e.getMessage()); - } - return null; - } } \ No newline at end of file