1 package jalview.analysis;
3 import jalview.datamodel.Sequence;
4 import jalview.datamodel.SequenceI;
6 import java.util.Arrays;
8 import org.testng.Assert;
9 import org.testng.annotations.Test;
11 public class SequenceIdMatcherTest
13 private static SequenceI[] someseqs = {
14 new Sequence("A|ComplexId", "dummy"),
15 new Sequence("A|ComplexId|confused", "dummy"),
16 new Sequence("A|ComplexId|bits_of", "dummy"),
17 new Sequence("ComplexId", "dummy"),
18 new Sequence("A|ComplexIdNot", "dummy"),
19 new Sequence("A ComplexId Id", "dummy"),
20 new Sequence("complexid", "dummy") };
22 private static SequenceIdMatcher getMatcher()
24 return new SequenceIdMatcher(Arrays.asList(someseqs));
27 private static SequenceIdMatcher getWordMatcher()
29 return new SequenceIdMatcher(true, Arrays.asList(someseqs));
32 @Test(groups = { "Functional" })
33 public void findSelfAndOthers()
35 for (SequenceI sq : SequenceIdMatcherTest.someseqs)
37 SequenceI[] idmatches = getMatcher().findAllIdMatches(sq.getName());
39 idmatches.length >= 1,
40 "Couldn't recover at least one sequence for string '"
41 + sq.getName() + "'");
42 SequenceI[] seqmatches = getMatcher().findIdMatch(
43 new SequenceI[] { sq });
44 Assert.assertEquals(1, seqmatches.length,
45 "Expected to recover one sequence for sequence object called '"
46 + sq.getName() + "'");
47 Assert.assertEquals(sq, seqmatches[0],
48 "Expected to recover the sequence queried with findIdMatch(SequenceI[])");
49 // TODO: complexid and ComplexId are identical with case-insensitive
50 // matching. This assert fails because of this.
51 // Assert.assertTrue(seqmatches.length == idmatches.length,
52 // "Different matches found for '" + sq.getName() + "'");
53 for (SequenceI sid : seqmatches)
55 boolean found = false;
56 for (SequenceI sobj : idmatches)
65 "Different sequences recovered for Id "
66 + "and SequenceI (Couldn't find match for '"
67 + sid.getName() + "')");
73 @Test(groups = { "Functional" })
74 public void testExactMatch()
76 SequenceI[] matches = getMatcher().findAllIdMatches("A|ComplexId");
77 Assert.assertTrue(matches.length == 1,
78 "Exact match failed for 'A|ComplexId'");
79 matches = getMatcher().findAllIdMatches("A|ComplexId|confused");
80 Assert.assertTrue(matches.length == 1,
81 "Exact match failed for 'A|ComplexId|confused'");
82 matches = getMatcher().findAllIdMatches("A|ComplexId|bits_of");
83 Assert.assertTrue(matches.length == 1,
84 "Exact match failed for 'A|ComplexId|bits_of'");
85 matches = getMatcher().findAllIdMatches("A ComplexId Id");
86 Assert.assertTrue(matches.length == 1,
87 "Exact match failed for 'A Complex Id'");
91 @Test(groups = { "Functional" })
92 public void testCaseInsensitiveMatch()
94 Assert.assertNotNull(getMatcher().findIdMatch("a|complexid"),
95 "Couldn't retrieve a single case insensitive match.");
98 @Test(groups = { "Functional" })
99 public void testFlankingMatch()
101 SequenceI[] match = getMatcher().findAllIdMatches("complexId");
102 // should find two matches - one case exact, the other case inexact.
103 Assert.assertNotNull(match, "Exact matches not found.");
104 Assert.assertEquals(match.length, 2,
105 "Expected two exact matches to be found.");
106 SequenceI[] fmatch = getWordMatcher()
107 .findAllIdMatches("complexId");
108 // should find 6 distinct sequences
109 Assert.assertNotNull(fmatch, "Flanking matches not found.");
110 Assert.assertEquals(fmatch.length, 6,
111 "Couldn't find all entries with IDs containing 'complexId' word match");