Merge branch 'develop' into features/JAL-518_justify_seqs_in_region
[jalview.git] / test / jalview / datamodel / SequenceTest.java
index 6e18324..948a5fb 100644 (file)
@@ -20,8 +20,6 @@
  */
 package jalview.datamodel;
 
-import java.util.Locale;
-
 import static org.testng.AssertJUnit.assertEquals;
 import static org.testng.AssertJUnit.assertFalse;
 import static org.testng.AssertJUnit.assertNotNull;
@@ -30,20 +28,13 @@ import static org.testng.AssertJUnit.assertNull;
 import static org.testng.AssertJUnit.assertSame;
 import static org.testng.AssertJUnit.assertTrue;
 
-import jalview.analysis.AlignmentGenerator;
-import jalview.commands.EditCommand;
-import jalview.commands.EditCommand.Action;
-import jalview.datamodel.PDBEntry.Type;
-import jalview.gui.JvOptionPane;
-import jalview.util.MapList;
-import jalview.ws.params.InvalidArgumentException;
-
 import java.io.File;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.BitSet;
 import java.util.Iterator;
 import java.util.List;
+import java.util.Locale;
 import java.util.Vector;
 
 import org.testng.Assert;
@@ -51,6 +42,13 @@ import org.testng.annotations.BeforeClass;
 import org.testng.annotations.BeforeMethod;
 import org.testng.annotations.Test;
 
+import jalview.analysis.AlignmentGenerator;
+import jalview.bin.Cache;
+import jalview.commands.EditCommand;
+import jalview.commands.EditCommand.Action;
+import jalview.datamodel.PDBEntry.Type;
+import jalview.gui.JvOptionPane;
+import jalview.util.MapList;
 import junit.extensions.PA;
 
 public class SequenceTest
@@ -62,6 +60,12 @@ public class SequenceTest
     JvOptionPane.setMockResponse(JvOptionPane.CANCEL_OPTION);
   }
 
+  @BeforeMethod(alwaysRun = true)
+  public void loadProperties()
+  {
+    Cache.loadProperties("test/jalview/util/comparisonTestProps.jvprops");
+  }
+
   Sequence seq;
 
   @BeforeMethod(alwaysRun = true)
@@ -123,9 +127,13 @@ public class SequenceTest
     assertTrue(new Sequence("prot", "ASDFASDFASDFXXXXXXXXX").isProtein());
     // test DNA with X
     assertFalse(new Sequence("prot", "ACGTACGTACGTXXXXXXXX").isProtein());
+    // short sequence is nucleotide only if 50% is nucleotide and remaining N/X
+    // is either N or X only
+    assertTrue(new Sequence("prot", "ACGTACGTACGTXN").isProtein());
     // test DNA with N
     assertFalse(new Sequence("prot", "ACGTACGTACGTNNNNNNNN").isProtein());
     // test RNA with X
+    assertFalse(new Sequence("prot", "ACGUACGUACGUACTGACAXX").isProtein());
     assertFalse(new Sequence("prot", "ACGUACGUACGUXXXXXXXXX").isProtein());
     assertFalse(new Sequence("prot", "ACGUACGUACGUNNNNNNNNN").isProtein());
   }
@@ -1045,6 +1053,42 @@ public class SequenceTest
             derived.getDatasetSequence().getSequenceAsString());
   }
 
+  /**
+   * test that creating a copy of an existing sequence with dataset sequence and
+   * associated contact matrix yields annotation associated with the same
+   * contact matrix in the copy
+   */
+  @Test(groups = { "Functional" })
+  public void testCopyPasteStyleDerivesequence_withcontactMatrixAnn()
+  {
+    SequenceI seq1 = new Sequence("seq1", "ACDACDACD");
+    seq1.createDatasetSequence();
+    ContactMatrixI cm = new SeqDistanceContactMatrix(seq1.getLength());
+    // addContactList needs to return annotation addable to the sequence
+    // reference it was called from
+    AlignmentAnnotation aann = seq1.addContactList(cm);
+    assertTrue(aann.sequenceRef == seq1);
+    assertEquals(1, seq1.getAnnotation().length);
+    assertNotNull(seq1.getContactListFor(seq1.getAnnotation()[0], 1));
+
+    SequenceI seq_derived = seq1.deriveSequence();
+    assertEquals(1, seq_derived.getAnnotation().length);
+    assertTrue(cm == seq_derived
+            .getContactMatrixFor(seq_derived.getAnnotation()[0]));
+    assertNotNull(seq_derived
+            .getContactListFor(seq_derived.getAnnotation()[0], 1));
+
+    // copy paste actually uses the copy constructor .. so
+
+    SequenceI seq_copied = new Sequence((Sequence) seq_derived);
+    assertEquals(1, seq_copied.getAnnotation().length);
+    assertTrue(cm == seq_copied
+            .getContactMatrixFor(seq_copied.getAnnotation()[0]));
+    assertNotNull(
+            seq_copied.getContactListFor(seq_copied.getAnnotation()[0], 1));
+
+  }
+
   @Test(groups = { "Functional" })
   public void testCopyConstructor_noDataset()
   {
@@ -2275,8 +2319,16 @@ public class SequenceTest
   {
     Sequence origSeq = new Sequence("MYSEQ", "THISISASEQ");
     Sequence toSeq = new Sequence("MYSEQ", "THISISASEQ");
+    origSeq.setDescription("DESCRIPTION");
     origSeq.addDBRef(new DBRefEntry("UNIPROT", "0", "Q12345", null, true));
+
+    toSeq.transferAnnotation(origSeq, null);
+    assertEquals("DESCRIPTION", toSeq.getDescription());
+    toSeq = new Sequence("MYSEQ", "THISISASEQ");
+    toSeq.setDescription("unchanged");
     toSeq.transferAnnotation(origSeq, null);
+    assertEquals("unchanged", toSeq.getDescription());
+
     assertTrue(toSeq.getDBRefs().size() == 1);
 
     assertTrue(toSeq.getDBRefs().get(0).isCanonical());