JAL-1800 separated SearchResults.getCharacters() from toString()
[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 testGetCharacters()
29   {
30     SequenceI seq = new Sequence("", "abcdefghijklm");
31     SearchResults sr = new SearchResults();
32     sr.addResult(seq, 1, 1);
33     assertEquals("a", sr.getCharacters());
34     sr.addResult(seq, 3, 5);
35     assertEquals("acde", sr.getCharacters());
36
37     seq = new Sequence("", "pqrstuvwxy");
38     sr.addResult(seq, 6, 7);
39     assertEquals("acdeuv", sr.getCharacters());
40   }
41
42   @Test(groups = { "Functional" })
43   public void testEquals()
44   {
45     SequenceI seq1 = new Sequence("", "abcdefghijklm");
46     SearchResults sr1 = new SearchResults();
47     SearchResults sr2 = new SearchResults();
48
49     assertFalse(sr1.equals(null)); // null object
50     assertFalse(sr1.equals(seq1)); // wrong type
51     assertTrue(sr1.equals(sr1)); // self
52     assertTrue(sr1.equals(sr2)); // empty
53     assertTrue(sr2.equals(sr1)); // reflexive
54
55     /*
56      * only one result is not empty
57      */
58     sr1.addResult(seq1, 1, 1);
59     assertTrue(sr1.equals(sr1));
60     assertFalse(sr1.equals(sr2));
61     assertFalse(sr2.equals(sr1));
62
63     /*
64      * both the same
65      */
66     sr2.addResult(seq1, 1, 1);
67     assertTrue(sr1.equals(sr2));
68     assertTrue(sr2.equals(sr1));
69
70     /*
71      * both have three matches
72      */
73     sr1.addResult(seq1, 3, 4);
74     sr1.addResult(seq1, 6, 8);
75     sr2.addResult(seq1, 3, 4);
76     sr2.addResult(seq1, 6, 8);
77     assertTrue(sr1.equals(sr1));
78     assertTrue(sr2.equals(sr2));
79     assertTrue(sr1.equals(sr2));
80     assertTrue(sr2.equals(sr1));
81   }
82
83   /**
84    * Matches that are similar but for distinct sequences are not equal
85    */
86   @Test(groups = { "Functional" })
87   public void testEquals_distinctSequences()
88   {
89     SequenceI seq1 = new Sequence("", "abcdefghijklm");
90     SequenceI seq2 = new Sequence("", "abcdefghijklm");
91     SearchResults sr1 = new SearchResults();
92     SearchResults sr2 = new SearchResults();
93
94     sr1.addResult(seq1, 1, 1);
95     sr2.addResult(seq2, 1, 1);
96     assertFalse(sr1.equals(sr2));
97     assertFalse(sr2.equals(sr1));
98   }
99
100   /**
101    * Matches that are the same except for ordering are not equal
102    */
103   @Test(groups = { "Functional" })
104   public void testEquals_orderDiffers()
105   {
106     SequenceI seq1 = new Sequence("", "abcdefghijklm");
107     SearchResults sr1 = new SearchResults();
108     SearchResults sr2 = new SearchResults();
109
110     sr1.addResult(seq1, 1, 1);
111     sr1.addResult(seq1, 2, 2);
112     sr2.addResult(seq1, 2, 2);
113     sr2.addResult(seq1, 1, 1);
114     assertFalse(sr1.equals(sr2));
115     assertFalse(sr2.equals(sr1));
116   }
117
118   /**
119    * Verify that hashCode matches for equal objects
120    */
121   @Test(groups = { "Functional" })
122   public void testHashcode()
123   {
124     SequenceI seq1 = new Sequence("", "abcdefghijklm");
125     SearchResults sr1 = new SearchResults();
126     SearchResults sr2 = new SearchResults();
127
128     /*
129      * both empty
130      */
131     assertEquals(sr1.hashCode(), sr2.hashCode());
132
133     /*
134      * both one match
135      */
136     sr1.addResult(seq1, 1, 1);
137     sr2.addResult(seq1, 1, 1);
138     assertEquals(sr1.hashCode(), sr2.hashCode());
139
140     /*
141      * both three matches
142      */
143     sr1.addResult(seq1, 3, 4);
144     sr1.addResult(seq1, 6, 8);
145     sr2.addResult(seq1, 3, 4);
146     sr2.addResult(seq1, 6, 8);
147     assertEquals(sr1.hashCode(), sr2.hashCode());
148   }
149 }