1 package jalview.analysis;
3 import jalview.datamodel.Sequence;
4 import jalview.datamodel.SequenceI;
6 import java.util.ArrayList;
7 import java.util.Arrays;
10 import org.testng.Assert;
11 import org.testng.annotations.Test;
13 public class SequenceIdMatcherTest
15 private static SequenceI[] someseqs = {
16 new Sequence("A|ComplexId", "dummy"),
17 new Sequence("A|ComplexId|confused", "dummy"),
18 new Sequence("A|ComplexId|bits_of", "dummy"),
19 new Sequence("ComplexId", "dummy"),
20 new Sequence("A|ComplexIdNot", "dummy"),
21 new Sequence("A ComplexId Id", "dummy"),
22 new Sequence("complexid", "dummy") };
24 private static SequenceIdMatcher getMatcher()
26 return new SequenceIdMatcher(Arrays.asList(someseqs));
29 private static SequenceIdMatcher getWordMatcher()
31 return new SequenceIdMatcher(true, Arrays.asList(someseqs));
34 @Test(groups = { "Functional" })
35 public void findSelfAndOthers()
37 for (SequenceI sq : SequenceIdMatcherTest.someseqs)
39 System.out.println("Searching with '" + sq.getName() + "'");
40 SequenceI[] idmatches = getMatcher().findAllIdMatches(sq.getName());
42 idmatches.length >= 1,
43 "Couldn't recover at least one sequence for string '"
44 + sq.getName() + "'");
45 for (SequenceI f : idmatches)
47 System.out.println("For '" + sq.getName() + "' found '"
51 SequenceI[] seqmatches = getMatcher().findIdMatch(
52 new SequenceI[] { sq });
53 Assert.assertEquals(1, seqmatches.length,
54 "Expected to recover one sequence for sequence object called '"
55 + sq.getName() + "'");
56 Assert.assertEquals(sq, seqmatches[0],
57 "Expected to recover the sequence queried with findIdMatch(SequenceI[])");
58 // TODO: complexid and ComplexId are identical with case-insensitive
59 // matching. This assert fails because of this.
60 // Assert.assertTrue(seqmatches.length == idmatches.length,
61 // "Different matches found for '" + sq.getName() + "'");
62 for (SequenceI sid : seqmatches)
64 boolean found = false;
65 for (SequenceI sobj : idmatches)
74 "Different sequences recovered for Id "
75 + "and SequenceI (Couldn't find match for '"
76 + sid.getName() + "')");
82 @Test(groups = { "Functional" })
83 public void testExactMatch()
85 SequenceI[] matches = getMatcher().findAllIdMatches("A|ComplexId");
86 Assert.assertTrue(matches.length == 1,
87 "Exact match failed for 'A|ComplexId'");
88 matches = getMatcher().findAllIdMatches("A|ComplexId|confused");
89 Assert.assertTrue(matches.length == 1,
90 "Exact match failed for 'A|ComplexId|confused'");
91 matches = getMatcher().findAllIdMatches("A|ComplexId|bits_of");
92 Assert.assertTrue(matches.length == 1,
93 "Exact match failed for 'A|ComplexId|bits_of'");
94 matches = getMatcher().findAllIdMatches("A ComplexId Id");
95 Assert.assertTrue(matches.length == 1,
96 "Exact match failed for 'A Complex Id'");
100 @Test(groups = { "Functional" })
101 public void testCaseInsensitiveMatch()
103 Assert.assertNotNull(getMatcher().findIdMatch("a|complexid"),
104 "Couldn't retrieve a single case insensitive match.");
107 @Test(groups = { "Functional" })
108 public void testWordSplit()
110 String[] words = new String[] { "several", "words", "separated",
113 for (String word : words)
115 if (full.length() > 0)
121 List<SeqIdName> bits = SequenceIdMatcher.getWordsFor(new Sequence(full,
123 for (String word : words)
125 List<SeqIdName> equals = new ArrayList<SeqIdName>();
126 for (SeqIdName bit : bits)
128 if (bit.equals(word))
133 Assert.assertTrue(equals.size() > 0,
134 "Word generation has broken. Expected at least one match for '"
138 @Test(groups = { "Functional" })
139 public void testFlankingMatch()
141 SequenceI[] match = getMatcher().findAllIdMatches("complexId");
142 // should find two matches - one case exact, the other case inexact.
143 Assert.assertNotNull(match, "Exact matches not found.");
144 Assert.assertEquals(match.length, 2,
145 "Expected two exact matches to be found.");
146 SequenceI[] fmatch = getWordMatcher()
147 .findAllIdMatches("complexId");
148 // should find 6 distinct sequences
149 Assert.assertNotNull(fmatch, "Flanking matches not found.");
150 for (SequenceI f:fmatch)
152 System.out.println("Flanking 'complexId' match: '" + f.getName()
155 Assert.assertEquals(fmatch.length, 6,
156 "Couldn't find all entries with IDs containing 'complexId' word match");
160 @Test(groups = { "Functional" })
161 public void testPartialNotMatch()
163 SequenceI[] match = getWordMatcher().findAllIdMatches("complex");
164 Assert.assertNull(match,
165 "Partial match of 'complex' to any of sequences shouldn't yield a match.");