From f14246a28441f24b39b0516282513fbf6196e46c Mon Sep 17 00:00:00 2001 From: gmungoc Date: Thu, 27 Apr 2017 11:54:10 +0100 Subject: [PATCH] JAL-2480 don't allow null type in SequenceFeature --- src/jalview/datamodel/Sequence.java | 7 +++++++ src/jalview/datamodel/SequenceI.java | 2 +- test/jalview/datamodel/SequenceTest.java | 32 +++++++++++++++++++++++++++++- 3 files changed, 39 insertions(+), 2 deletions(-) diff --git a/src/jalview/datamodel/Sequence.java b/src/jalview/datamodel/Sequence.java index c0549f2..ae7df53 100755 --- a/src/jalview/datamodel/Sequence.java +++ b/src/jalview/datamodel/Sequence.java @@ -321,6 +321,13 @@ public class Sequence extends ASequence implements SequenceI @Override public synchronized boolean addSequenceFeature(SequenceFeature sf) { + if (sf.getType() == null) + { + System.err.println("SequenceFeature type may not be null: " + + sf.toString()); + return false; + } + if (sequenceFeatures == null && datasetSequence != null) { return datasetSequence.addSequenceFeature(sf); diff --git a/src/jalview/datamodel/SequenceI.java b/src/jalview/datamodel/SequenceI.java index 1fbc76a..6c82bf3 100755 --- a/src/jalview/datamodel/SequenceI.java +++ b/src/jalview/datamodel/SequenceI.java @@ -348,7 +348,7 @@ public interface SequenceI extends ASequenceI /** * Adds the given sequence feature and returns true, or returns false if it is - * already present on the sequence + * already present on the sequence, or if the feature type is null. * * @param sf * @return diff --git a/test/jalview/datamodel/SequenceTest.java b/test/jalview/datamodel/SequenceTest.java index 08e6f7d..4a208ae 100644 --- a/test/jalview/datamodel/SequenceTest.java +++ b/test/jalview/datamodel/SequenceTest.java @@ -340,7 +340,7 @@ public class SequenceTest /* * SequenceFeature on sequence */ - SequenceFeature sf = new SequenceFeature(); + SequenceFeature sf = new SequenceFeature("Cath", "desc", 2, 4, 2f, null); sq.addSequenceFeature(sf); SequenceFeature[] sfs = sq.getSequenceFeatures(); assertEquals(1, sfs.length); @@ -711,6 +711,36 @@ public class SequenceTest assertEquals(' ', sq.getCharAt(-1)); } + @Test(groups = { "Functional" }) + public void testAddSequenceFeatures() + { + SequenceI sq = new Sequence("", "abcde"); + // type may not be null + assertFalse(sq.addSequenceFeature(new SequenceFeature(null, "desc", 4, + 8, 0f, null))); + assertTrue(sq.addSequenceFeature(new SequenceFeature("Cath", "desc", 4, + 8, 0f, null))); + // can't add a duplicate feature + assertFalse(sq.addSequenceFeature(new SequenceFeature("Cath", "desc", + 4, 8, 0f, null))); + // can add a different feature + assertTrue(sq.addSequenceFeature(new SequenceFeature("Scop", "desc", 4, + 8, 0f, null))); // different type + assertTrue(sq.addSequenceFeature(new SequenceFeature("Cath", + "description", 4, 8, 0f, null)));// different description + assertTrue(sq.addSequenceFeature(new SequenceFeature("Cath", "desc", 3, + 8, 0f, null))); // different start position + assertTrue(sq.addSequenceFeature(new SequenceFeature("Cath", "desc", 4, + 9, 0f, null))); // different end position + assertTrue(sq.addSequenceFeature(new SequenceFeature("Cath", "desc", 4, + 8, 1f, null))); // different score + assertTrue(sq.addSequenceFeature(new SequenceFeature("Cath", "desc", 4, + 8, Float.NaN, null))); // score NaN + assertTrue(sq.addSequenceFeature(new SequenceFeature("Cath", "desc", 4, + 8, 0f, "Metal"))); // different group + assertEquals(8, sq.getFeatures().getAllFeatures().size()); + } + /** * Tests for adding (or updating) dbrefs * -- 1.7.10.2