JAL-1601 Change getSubJobs return type
[jalview.git] / test / jalview / ws2 / actions / secstructpred / SecStructPredTaskTest.java
1 package jalview.ws2.actions.secstructpred;
2
3 import static org.hamcrest.MatcherAssert.assertThat;
4
5 import static jalview.testutils.Matchers.matchesSequenceString;
6 import static jalview.testutils.ScopeFunctions.apply;
7 import static jalview.testutils.ScopeFunctions.run;
8 import org.hamcrest.Matcher;
9 import org.hamcrest.Matchers;
10 import org.testng.annotations.BeforeMethod;
11 import org.testng.annotations.DataProvider;
12 import org.testng.annotations.Test;
13
14 import static org.mockito.ArgumentMatchers.any;
15 import static org.mockito.ArgumentMatchers.anyList;
16 import static org.hamcrest.Matchers.contains;
17
18 import static org.mockito.ArgumentMatchers.eq;
19 import static org.mockito.Mockito.doAnswer;
20 import static org.mockito.Mockito.doThrow;
21 import static org.mockito.Mockito.inOrder;
22 import static org.mockito.Mockito.mock;
23 import static org.mockito.Mockito.verify;
24 import static org.mockito.Mockito.when;
25
26 import java.io.IOException;
27 import java.util.ArrayList;
28 import java.util.List;
29
30 import jalview.datamodel.Alignment;
31 import jalview.datamodel.AlignmentI;
32 import jalview.datamodel.HiddenColumns;
33 import jalview.datamodel.Sequence;
34 import jalview.datamodel.SequenceI;
35 import jalview.gui.AlignViewport;
36 import jalview.ws2.api.Credentials;
37 import jalview.ws2.client.api.SecStructPredWebServiceClientI;
38
39 import static java.lang.String.format;
40
41 public class SecStructPredTaskTest
42 {
43   protected SecStructPredWebServiceClientI mockClient;
44
45   @BeforeMethod(alwaysRun = true)
46   public void setupMockClient() throws IOException
47   {
48     mockClient = mock(SecStructPredWebServiceClientI.class);
49     when(mockClient.getUrl()).thenReturn("http://example.org");
50     when(mockClient.getClientName()).thenReturn("mock");
51     when(mockClient.getLog(any())).thenReturn("");
52     when(mockClient.getErrorLog(any())).thenReturn("");
53   }
54
55   @DataProvider
56   public Object[][] alignmentWithExpectedInput()
57   {
58     return new Object[][] {
59         {
60             new AlignViewport(createAlignment("AAAAAAAAAAAA", "AAAAAAAAAAAA",
61                 "AAAAAAAAAAAA")),
62             List.of("AAAAAAAAAAAA", "AAAAAAAAAAAA", "AAAAAAAAAAAA") },
63         {
64             new AlignViewport(createAlignment("AAAA--NNNNAAAA",
65                 "AA--AANNNNAAAA", "AA--AARRRRAAAA")),
66             List.of("AAAA--NNNNAAAA", "AA--AANNNNAAAA", "AA--AARRRRAAAA") },
67         {
68             new AlignViewport(createAlignment("AAAANNNNAAAA--",
69                 "AAAARRRRAAAA--", "AAAARRRRAAAA--")),
70             List.of("AAAANNNNAAAA--", "AAAARRRRAAAA--", "AAAARRRRAAAA--") },
71         {
72             new AlignViewport(createAlignment("AAAA--NNNNAAAA",
73                 "AAAA--NNNNAAAA", "AAAA--NNNNAAAA")),
74             List.of("AAAA--NNNNAAAA", "AAAA--NNNNAAAA", "AAAA--NNNNAAAA") },
75         {
76             new AlignViewport(createAlignment("AAAACCCCNNNN", "------------",
77                 "AAAADDDDNNNN")),
78             List.of("AAAACCCCNNNN", "AAAADDDDNNNN") },
79         {
80             new AlignViewport(createAlignment("AAAACC--NNNN", "AAAACCDDNNNN"),
81                 apply(new HiddenColumns(), it -> it.hideColumns(6, 7))),
82             List.of("AAAACCNNNN", "AAAACCNNNN") },
83         {
84             new AlignViewport(
85                 createAlignment("CCAAAACC--MMMM", "--AAAAGGGGMMMM"),
86                 apply(new HiddenColumns(), it -> {
87                   it.hideColumns(0, 1);
88                   it.hideColumns(8, 9);
89                 })),
90             List.of("AAAACCMMMM", "AAAAGGMMMM") },
91         {
92             new AlignViewport(
93                 createAlignment("CCAAAACC--MMMM", "CCAAAACC--MMMM"),
94                 apply(new HiddenColumns(), it -> it.hideColumns(2, 5))),
95             List.of("CCCC--MMMM", "CCCC--MMMM") } };
96   }
97
98   public static AlignmentI createAlignment(String... sequences)
99   {
100     var seqArray = new Sequence[sequences.length];
101     for (int i = 0; i < sequences.length; i++)
102       seqArray[i] = new Sequence(format("Seq%d", i), sequences[i]);
103     return new Alignment(seqArray);
104   }
105
106   @Test(groups = { "functional" }, dataProvider = "alignmentWithExpectedInput")
107   public void testPrepareJobs_checkInputSequences(AlignViewport viewport,
108       List<String> expectedInput) throws Exception
109   {
110     var task = new SecStructPredMsaTask(mockClient, List.of(), Credentials.empty(),
111         viewport);
112     var jobs = task.prepareJobs();
113     List<Matcher<? super SequenceI>> seqMatchers = new ArrayList<>(
114         expectedInput.size());
115     for (var seqStr : expectedInput)
116       seqMatchers.add(matchesSequenceString(seqStr));
117     assertThat(jobs.get(0).getInputSequences(),
118         Matchers.<SequenceI> contains(seqMatchers));
119   }
120 }