JAL-2405 check for circular reference in SequenceGroup.context
[jalview.git] / test / jalview / datamodel / SequenceGroupTest.java
1 package jalview.datamodel;
2
3 import static org.testng.Assert.assertEquals;
4 import static org.testng.Assert.assertFalse;
5 import static org.testng.Assert.assertNotNull;
6 import static org.testng.Assert.assertNull;
7 import static org.testng.Assert.assertSame;
8 import static org.testng.Assert.assertTrue;
9 import static org.testng.Assert.fail;
10
11 import jalview.schemes.NucleotideColourScheme;
12
13 import org.testng.annotations.Test;
14
15 public class SequenceGroupTest
16 {
17   @Test
18   public void testAddSequence()
19   {
20     SequenceGroup sg = new SequenceGroup();
21     assertTrue(sg.getSequences().isEmpty());
22
23     SequenceI seq1 = new Sequence("seq1", "abc");
24     SequenceI seq2 = new Sequence("seq2", "abc");
25     SequenceI seq3 = new Sequence(seq1);
26
27     sg.addSequence(null, false);
28     assertTrue(sg.getSequences().isEmpty());
29     sg.addSequence(seq1, false);
30     assertEquals(sg.getSequences().size(), 1);
31     assertTrue(sg.getSequences().contains(seq1));
32     // adding the same sequence again does nothing
33     sg.addSequence(seq1, false);
34     assertEquals(sg.getSequences().size(), 1);
35     assertTrue(sg.getSequences().contains(seq1));
36     sg.addSequence(seq2, false);
37     sg.addSequence(seq2, false);
38     sg.addSequence(seq3, false);
39     assertEquals(sg.getSequences().size(), 3);
40     assertTrue(sg.getSequences().contains(seq1));
41     assertTrue(sg.getSequences().contains(seq2));
42     assertTrue(sg.getSequences().contains(seq3));
43   }
44
45   @Test
46   public void testAddOrRemove()
47   {
48     SequenceGroup sg = new SequenceGroup();
49     assertTrue(sg.getSequences().isEmpty());
50   
51     SequenceI seq1 = new Sequence("seq1", "abc");
52     SequenceI seq2 = new Sequence("seq2", "abc");
53     SequenceI seq3 = new Sequence(seq1);
54   
55     sg.addOrRemove(seq1, false);
56     assertEquals(sg.getSequences().size(), 1);
57     sg.addOrRemove(seq2, false);
58     assertEquals(sg.getSequences().size(), 2);
59     sg.addOrRemove(seq3, false);
60     assertEquals(sg.getSequences().size(), 3);
61     assertTrue(sg.getSequences().contains(seq1));
62     assertTrue(sg.getSequences().contains(seq2));
63     assertTrue(sg.getSequences().contains(seq3));
64     sg.addOrRemove(seq1, false);
65     assertEquals(sg.getSequences().size(), 2);
66     assertFalse(sg.getSequences().contains(seq1));
67   }
68
69   @Test
70   public void testGetColourScheme()
71   {
72     SequenceGroup sg = new SequenceGroup();
73     assertNotNull(sg.getGroupColourScheme());
74     assertNull(sg.getColourScheme());
75
76     sg.setGroupColourScheme(null);
77     assertNull(sg.getColourScheme());
78
79     NucleotideColourScheme scheme = new NucleotideColourScheme();
80     sg.setColourScheme(scheme);
81     assertSame(scheme, sg.getColourScheme());
82   }
83
84   @Test
85   public void testSetContext()
86   {
87     SequenceGroup sg1 = new SequenceGroup();
88     SequenceGroup sg2 = new SequenceGroup();
89     SequenceGroup sg3 = new SequenceGroup();
90     assertNull(sg1.getContext());
91     sg1.setContext(null);
92     assertNull(sg1.getContext());
93     try
94     {
95       sg1.setContext(sg1); // self-reference :-O
96       fail("Expected exception");
97     } catch (IllegalArgumentException e)
98     {
99       // expected
100       assertNull(sg1.getContext());
101     }
102     sg1.setContext(sg2);
103     assertSame(sg2, sg1.getContext());
104     sg2.setContext(sg3);
105     try
106     {
107       sg3.setContext(sg1); // circular reference :-O
108       fail("Expected exception");
109     } catch (IllegalArgumentException e)
110     {
111       // expected
112       assertNull(sg3.getContext());
113     }
114   }
115 }