JAL-1800 SearchResults.equals() to allow smarter mouseover of codons
[jalview.git] / test / jalview / datamodel / SearchResultsTest.java
1 package jalview.datamodel;
2
3 import static org.testng.AssertJUnit.assertEquals;
4 import static org.testng.AssertJUnit.assertFalse;
5 import static org.testng.AssertJUnit.assertTrue;
6
7 import org.testng.annotations.Test;
8
9 public class SearchResultsTest
10 {
11
12   @Test(groups ={ "Functional" })
13   public void testToString()
14   {
15     SequenceI seq = new Sequence("", "abcdefghijklm");
16     SearchResults sr = new SearchResults();
17     sr.addResult(seq, 1, 1);
18     assertEquals("0a", sr.toString());
19     sr.addResult(seq, 3, 5);
20     assertEquals("0a2cde", sr.toString());
21
22     seq = new Sequence("", "pqrstuvwxy");
23     sr.addResult(seq, 6, 7);
24     assertEquals("0a2cde5uv", sr.toString());
25   }
26
27   @Test(groups = { "Functional" })
28   public void testEquals()
29   {
30     SequenceI seq1 = new Sequence("", "abcdefghijklm");
31     SearchResults sr1 = new SearchResults();
32     SearchResults sr2 = new SearchResults();
33
34     assertFalse(sr1.equals(null)); // null object
35     assertFalse(sr1.equals(seq1)); // wrong type
36     assertTrue(sr1.equals(sr1)); // self
37     assertTrue(sr1.equals(sr2)); // empty
38     assertTrue(sr2.equals(sr1)); // reflexive
39
40     /*
41      * only one result is not empty
42      */
43     sr1.addResult(seq1, 1, 1);
44     assertTrue(sr1.equals(sr1));
45     assertFalse(sr1.equals(sr2));
46     assertFalse(sr2.equals(sr1));
47
48     /*
49      * both the same
50      */
51     sr2.addResult(seq1, 1, 1);
52     assertTrue(sr1.equals(sr2));
53     assertTrue(sr2.equals(sr1));
54
55     /*
56      * both have three matches
57      */
58     sr1.addResult(seq1, 3, 4);
59     sr1.addResult(seq1, 6, 8);
60     sr2.addResult(seq1, 3, 4);
61     sr2.addResult(seq1, 6, 8);
62     assertTrue(sr1.equals(sr1));
63     assertTrue(sr2.equals(sr2));
64     assertTrue(sr1.equals(sr2));
65     assertTrue(sr2.equals(sr1));
66   }
67
68   /**
69    * Matches that are similar but for distinct sequences are not equal
70    */
71   @Test(groups = { "Functional" })
72   public void testEquals_distinctSequences()
73   {
74     SequenceI seq1 = new Sequence("", "abcdefghijklm");
75     SequenceI seq2 = new Sequence("", "abcdefghijklm");
76     SearchResults sr1 = new SearchResults();
77     SearchResults sr2 = new SearchResults();
78
79     sr1.addResult(seq1, 1, 1);
80     sr2.addResult(seq2, 1, 1);
81     assertFalse(sr1.equals(sr2));
82     assertFalse(sr2.equals(sr1));
83   }
84
85   /**
86    * Matches that are the same except for ordering are not equal
87    */
88   @Test(groups = { "Functional" })
89   public void testEquals_orderDiffers()
90   {
91     SequenceI seq1 = new Sequence("", "abcdefghijklm");
92     SearchResults sr1 = new SearchResults();
93     SearchResults sr2 = new SearchResults();
94
95     sr1.addResult(seq1, 1, 1);
96     sr1.addResult(seq1, 2, 2);
97     sr2.addResult(seq1, 2, 2);
98     sr2.addResult(seq1, 1, 1);
99     assertFalse(sr1.equals(sr2));
100     assertFalse(sr2.equals(sr1));
101   }
102
103   /**
104    * Verify that hashCode matches for equal objects
105    */
106   @Test(groups = { "Functional" })
107   public void testHashcode()
108   {
109     SequenceI seq1 = new Sequence("", "abcdefghijklm");
110     SearchResults sr1 = new SearchResults();
111     SearchResults sr2 = new SearchResults();
112
113     /*
114      * both empty
115      */
116     assertEquals(sr1.hashCode(), sr2.hashCode());
117
118     /*
119      * both one match
120      */
121     sr1.addResult(seq1, 1, 1);
122     sr2.addResult(seq1, 1, 1);
123     assertEquals(sr1.hashCode(), sr2.hashCode());
124
125     /*
126      * both three matches
127      */
128     sr1.addResult(seq1, 3, 4);
129     sr1.addResult(seq1, 6, 8);
130     sr2.addResult(seq1, 3, 4);
131     sr2.addResult(seq1, 6, 8);
132     assertEquals(sr1.hashCode(), sr2.hashCode());
133   }
134 }