X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=test%2Fjalview%2Fws2%2Factions%2Fsecstructpred%2FSecStructPredPDBSearchTaskTest.java;fp=test%2Fjalview%2Fws2%2Factions%2Fsecstructpred%2FSecStructPredPDBSearchTaskTest.java;h=ca88cf3c958cfdc810ef2a07fd70365d350844bc;hb=b8c0c4d78deccb7901d905a248aba47ea1c87a6a;hp=0000000000000000000000000000000000000000;hpb=81682dafca2e79cf141b134496db0c3a84027806;p=jalview.git diff --git a/test/jalview/ws2/actions/secstructpred/SecStructPredPDBSearchTaskTest.java b/test/jalview/ws2/actions/secstructpred/SecStructPredPDBSearchTaskTest.java new file mode 100644 index 0000000..ca88cf3 --- /dev/null +++ b/test/jalview/ws2/actions/secstructpred/SecStructPredPDBSearchTaskTest.java @@ -0,0 +1,171 @@ +package jalview.ws2.actions.secstructpred; + +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.contains; +import static org.hamcrest.Matchers.equalTo; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; + +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; +import static org.mockito.ArgumentMatchers.any; +import static jalview.testutils.ScopeFunctions.apply; +import static jalview.testutils.Matchers.matchesSequenceString; + +import jalview.io.DataSourceType; +import jalview.io.FastaFile; +import jalview.io.JPredFile; + +import org.hamcrest.Matcher; +import org.hamcrest.Matchers; +import org.testng.annotations.BeforeMethod; +import org.testng.annotations.DataProvider; +import org.testng.annotations.Test; + +import jalview.datamodel.Alignment; +import jalview.datamodel.AlignmentI; +import jalview.datamodel.HiddenColumns; +import jalview.datamodel.Sequence; +import jalview.datamodel.SequenceI; +import jalview.gui.AlignViewport; +import jalview.ws2.actions.ServiceInputInvalidException; +import jalview.ws2.api.Credentials; +import jalview.ws2.api.JobStatus; +import jalview.ws2.api.WebServiceJobHandle; +import jalview.ws2.client.api.SecStructPredWebServiceClientI; +import static java.lang.String.format; + +public class SecStructPredPDBSearchTaskTest +{ + protected SecStructPredWebServiceClientI mockClient; + + @BeforeMethod(alwaysRun = true) + public void setupMockClient() throws IOException + { + mockClient = mock(SecStructPredWebServiceClientI.class); + when(mockClient.getUrl()).thenReturn("http://example.org"); + when(mockClient.getClientName()).thenReturn("mock"); + when(mockClient.getLog(any())).thenReturn(""); + when(mockClient.getErrorLog(any())).thenReturn(""); + } + + @DataProvider + public Object[][] viewportAndExpectedInputSeq() + { + return new Object[][] { + { new AlignViewport(createAlignment("AAAAAAAAAAAAAAAAAAAA")), + "AAAAAAAAAAAAAAAAAAAA", }, + { new AlignViewport(createAlignment("--AAGGAGAG-AGGA----MMMMMMMM")), + "AAGGAGAGAGGAMMMMMMMM" }, + { new AlignViewport(createAlignment("AAAANNNCCCCCCCCCCAAAAAA"), + apply(new HiddenColumns(), it -> it.hideColumns(4, 6))), + "AAAACCCCCCCCCCAAAAAA" }, + { new AlignViewport( + createAlignment("NNNNGGGGVVVVVAAAAAAACCMMMMMMMM"), + apply(new HiddenColumns(), it -> { + it.hideColumns(4, 7); + it.hideColumns(20, 21); + })), + "NNNNVVVVVAAAAAAAMMMMMMMM" } }; + } + + public static AlignmentI createAlignment(String... sequences) + { + var seqArray = new Sequence[sequences.length]; + for (int i = 0; i < sequences.length; i++) + seqArray[i] = new Sequence(format("Seq%d", i), sequences[i]); + return new Alignment(seqArray); + } + + @Test( + groups = { "Functional" }, + dataProvider = "viewportAndExpectedInputSeq") + public void testPrepareJobs_checkInputSequences(AlignViewport viewport, + String expectedSeq) throws Exception + { + var task = new SecStructPredPDBSearchTask(mockClient, List.of(), + Credentials.empty(), viewport); + var jobs = task.prepareJobs(); + assertThat(jobs.get(0).getInputSequences(), + contains(matchesSequenceString(expectedSeq))); + } + + @DataProvider + public Object[][] viewportWithTooShortSequence() + { + return new Object[][] { + { new AlignViewport(createAlignment("")) }, + { new AlignViewport(createAlignment("A")) }, + { new AlignViewport(createAlignment("AAAAAAAAAAAAAAAAAAA")) }, + { new AlignViewport(createAlignment("AAAAACCCCCAAAAA-----CC")) }, + { new AlignViewport(createAlignment("-------------------------")) }, + { new AlignViewport(createAlignment("AAAAAAAAAAAAAAAAAAAAAAAAA"), + apply(new HiddenColumns(), it -> it.hideColumns(0, 24))) }, + { new AlignViewport(createAlignment("AAAAACCCCCAAAAACCCCCAAAAA"), + apply(new HiddenColumns(), it -> it.hideColumns(0, 10))) } }; + } + + @Test( + groups = { "Functional" }, + dataProvider = "viewportWithTooShortSequence", + expectedExceptions = ServiceInputInvalidException.class) + public void testPrepareJobs_SequenceTooShort_InputInvalidException( + AlignViewport viewport) throws ServiceInputInvalidException + { + var task = new SecStructPredPDBSearchTask(mockClient, List.of(), + Credentials.empty(), viewport); + task.prepareJobs(); + } + + @DataProvider + public Object[][] collectResultDataset() throws IOException + { + return new Object[][] { + { + new AlignViewport(new Alignment(new FastaFile( + "examples/testdata/secstrpred/sequence0_input.fa", + DataSourceType.FILE).getSeqsAsArray() + )), + "examples/testdata/secstrpred/sequence0.align", + "examples/testdata/secstrpred/sequence0.concise" + }, + }; + } + + @Test(groups = { "Functional" }, dataProvider = "collectResultDataset") + public void testCollectResult(AlignViewport viewport, String alnFileName, + String predFileName) throws Exception + { + var alnFile = new FastaFile(alnFileName, DataSourceType.FILE); + var predFile = new JPredFile(predFileName, DataSourceType.FILE); + when(mockClient.getPredictionFile(any())).thenReturn(predFile); + when(mockClient.getAlignmentFile(any())).thenReturn(alnFile); + when(mockClient.getStatus(any())).thenReturn(JobStatus.COMPLETED); + when(mockClient.submit(any(), any(), any())) + .thenReturn(new WebServiceJobHandle("mock", "mock", + "http://example.org", "0")); + + var task = new SecStructPredPDBSearchTask(mockClient, List.of(), + Credentials.empty(), viewport); + task.init(); + task.poll(); + task.complete(); + var resultAlignment = task.getResult(); + var sequences = resultAlignment.getSequences(); + + { + List> matchers = new ArrayList<>(); + for (var seq : alnFile.getSeqs()) + matchers.add(matchesSequenceString(seq)); + assertThat(sequences, Matchers.contains(matchers)); + } + + { + var originalHidden = viewport.getAlignment().getHiddenColumns(); + var resultHidden = resultAlignment.getHiddenColumns(); + assertThat(resultHidden, equalTo(originalHidden)); + } + } +}