1 package jalview.ws2.actions.secstructpred;
3 import static org.hamcrest.MatcherAssert.assertThat;
4 import static org.hamcrest.Matchers.contains;
6 import java.io.IOException;
9 import static org.mockito.Mockito.mock;
10 import static org.mockito.Mockito.when;
11 import static org.mockito.ArgumentMatchers.any;
12 import static jalview.testutils.ScopeFunctions.apply;
13 import static jalview.testutils.Matchers.matchesSequenceString;
15 import jalview.io.DataSourceType;
16 import jalview.io.FastaFile;
17 import jalview.io.JPredFile;
18 import org.testng.annotations.BeforeMethod;
19 import org.testng.annotations.DataProvider;
20 import org.testng.annotations.Test;
22 import jalview.datamodel.Alignment;
23 import jalview.datamodel.AlignmentI;
24 import jalview.datamodel.HiddenColumns;
25 import jalview.datamodel.Sequence;
26 import jalview.gui.AlignViewport;
27 import jalview.ws2.actions.ServiceInputInvalidException;
28 import jalview.ws2.api.Credentials;
29 import jalview.ws2.client.api.SecStructPredWebServiceClientI;
30 import static java.lang.String.format;
32 public class SecStructPredPDBSearchTaskTest
34 protected SecStructPredWebServiceClientI mockClient;
36 @BeforeMethod(alwaysRun = true)
37 public void setupMockClient() throws IOException
39 mockClient = mock(SecStructPredWebServiceClientI.class);
40 when(mockClient.getUrl()).thenReturn("http://example.org");
41 when(mockClient.getClientName()).thenReturn("mock");
42 when(mockClient.getLog(any())).thenReturn("");
43 when(mockClient.getErrorLog(any())).thenReturn("");
47 public Object[][] viewportAndExpectedInputSeq()
49 return new Object[][] {
50 { new AlignViewport(createAlignment("AAAAAAAAAAAAAAAAAAAA")),
51 "AAAAAAAAAAAAAAAAAAAA", },
52 { new AlignViewport(createAlignment("--AAGGAGAG-AGGA----MMMMMMMM")),
53 "AAGGAGAGAGGAMMMMMMMM" },
54 { new AlignViewport(createAlignment("AAAANNNCCCCCCCCCCAAAAAA"),
55 apply(new HiddenColumns(), it -> it.hideColumns(4, 6))),
56 "AAAACCCCCCCCCCAAAAAA" },
58 createAlignment("NNNNGGGGVVVVVAAAAAAACCMMMMMMMM"),
59 apply(new HiddenColumns(), it -> {
61 it.hideColumns(20, 21);
63 "NNNNVVVVVAAAAAAAMMMMMMMM" } };
66 public static AlignmentI createAlignment(String... sequences)
68 var seqArray = new Sequence[sequences.length];
69 for (int i = 0; i < sequences.length; i++)
70 seqArray[i] = new Sequence(format("Seq%d", i), sequences[i]);
71 return new Alignment(seqArray);
75 groups = { "Functional" },
76 dataProvider = "viewportAndExpectedInputSeq")
77 public void testPrepareJobs_checkInputSequences(AlignViewport viewport,
78 String expectedSeq) throws Exception
80 var task = new SecStructPredPDBSearchTask(mockClient, List.of(),
81 Credentials.empty(), viewport);
82 var jobs = task.prepareJobs();
83 assertThat(jobs.get(0).getInputSequences(),
84 contains(matchesSequenceString(expectedSeq)));
88 public Object[][] viewportWithTooShortSequence()
90 return new Object[][] { { new AlignViewport(createAlignment("")) },
91 { new AlignViewport(createAlignment("A")) },
92 { new AlignViewport(createAlignment("AAAAAAAAAAAAAAAAAAA")) },
93 { new AlignViewport(createAlignment("AAAAACCCCCAAAAA-----CC")) },
94 { new AlignViewport(createAlignment("-------------------------")) },
95 { new AlignViewport(createAlignment("AAAAAAAAAAAAAAAAAAAAAAAAA"),
96 apply(new HiddenColumns(), it -> it.hideColumns(0, 24))) },
97 { new AlignViewport(createAlignment("AAAAACCCCCAAAAACCCCCAAAAA"),
98 apply(new HiddenColumns(), it -> it.hideColumns(0, 10))) } };
102 groups = { "Functional" },
103 dataProvider = "viewportWithTooShortSequence",
104 expectedExceptions = ServiceInputInvalidException.class)
105 public void testPrepareJobs_SequenceTooShort_InputInvalidException(
106 AlignViewport viewport) throws ServiceInputInvalidException
108 var task = new SecStructPredPDBSearchTask(mockClient, List.of(),
109 Credentials.empty(), viewport);
114 public Object[][] collectResultDataset() throws IOException
116 return new Object[][] {
118 new AlignViewport(new Alignment(new FastaFile(
119 "examples/testdata/secstrpred/sequence0_input.fa",
120 DataSourceType.FILE).getSeqsAsArray()
122 "examples/testdata/secstrpred/sequence0.align",
123 "examples/testdata/secstrpred/sequence0.concise"
129 groups = { "Functional" }
131 public void testCollectResult(AlignViewport viewport, String alnFileName, String predFileName) throws Exception
133 var alnFile = new FastaFile(alnFileName, DataSourceType.FILE);
134 var predFile = new JPredFile(predFileName, DataSourceType.FILE);