Merge branch 'mmw/JAL-4199-web-services-testing' into mmw/bug/JAL-4241-annotation...
[jalview.git] / test / jalview / ws2 / actions / alignment / AlignmentActionTest.java
index 300eb6d..d7ef20b 100644 (file)
@@ -1,5 +1,20 @@
 package jalview.ws2.actions.alignment;
 
+import static jalview.testutils.Matchers.matchesSequenceString;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.Matchers.contains;
+import static org.hamcrest.Matchers.hasProperty;
+import static org.hamcrest.Matchers.is;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyList;
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.doAnswer;
+import static org.mockito.Mockito.doThrow;
+import static org.mockito.Mockito.inOrder;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
 import java.io.IOException;
 import java.net.URL;
 import java.util.List;
@@ -8,23 +23,18 @@ import java.util.concurrent.TimeUnit;
 
 import javax.help.UnsupportedOperationException;
 
-import org.hamcrest.BaseMatcher;
-import org.hamcrest.Description;
-import org.hamcrest.Matcher;
-import org.hamcrest.TypeSafeMatcher;
 import org.mockito.ArgumentCaptor;
 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.Sequence;
 import jalview.datamodel.SequenceI;
 import jalview.gui.AlignViewport;
 import jalview.viewmodel.AlignmentViewport;
 import jalview.ws.params.ParamDatastoreI;
-import jalview.ws2.actions.api.JobI;
+import jalview.ws2.actions.PollingTaskExecutor;
 import jalview.ws2.actions.api.TaskEventListener;
 import jalview.ws2.api.Credentials;
 import jalview.ws2.api.JobStatus;
@@ -32,13 +42,6 @@ import jalview.ws2.api.WebService;
 import jalview.ws2.api.WebServiceJobHandle;
 import jalview.ws2.client.api.AlignmentWebServiceClientI;
 
-import org.mockito.hamcrest.MockitoHamcrest;
-import org.mockito.internal.hamcrest.HamcrestArgumentMatcher;
-
-import static org.mockito.Mockito.*;
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.hamcrest.Matchers.*;
-
 public class AlignmentActionTest
 {
   protected AlignmentWebServiceClientI mockClient;
@@ -47,7 +50,7 @@ public class AlignmentActionTest
 
   protected WebServiceJobHandle jobRef;
 
-  @BeforeMethod
+  @BeforeMethod(alwaysRun = true)
   public void setupMockClient() throws IOException
   {
     jobRef = new WebServiceJobHandle(
@@ -61,7 +64,7 @@ public class AlignmentActionTest
     doThrow(new UnsupportedOperationException()).when(mockClient).cancel(any());
   }
 
-  @BeforeMethod(dependsOnMethods = { "setupMockClient" })
+  @BeforeMethod(alwaysRun = true, dependsOnMethods = { "setupMockClient" })
   public void setupActionBuilder() throws IOException
   {
     actionBuilder = AlignmentAction.newBuilder(mockClient);
@@ -133,9 +136,9 @@ public class AlignmentActionTest
     verify(mockClient).submit(argument.capture(), eq(List.of()), eq(Credentials.empty()));
     assertThat(argument.getValue(),
         contains(
-            matchesSequence("ASTVLITOPDCMMQEGGST"),
-            matchesSequence("ASCGLITOMMQEGGST"),
-            matchesSequence("ASTVLOPDTMMQEL")));
+            matchesSequenceString("ASTVLITOPDCMMQEGGST"),
+            matchesSequenceString("ASCGLITOMMQEGGST"),
+            matchesSequenceString("ASTVLOPDTMMQEL")));
   }
 
   @Test(
@@ -154,9 +157,9 @@ public class AlignmentActionTest
     verify(mockClient).submit(argument.capture(), eq(List.of()), eq(Credentials.empty()));
     assertThat(argument.getValue(),
         contains(
-            matchesSequence("----ASTVLITOPDCMMQEGGST-"),
-            matchesSequence("-ASCGLITO------MMQEGGST-"),
-            matchesSequence("AS--TVL--OPDTMMQEL------")));
+            matchesSequenceString("----ASTVLITOPDCMMQEGGST-"),
+            matchesSequenceString("-ASCGLITO------MMQEGGST-"),
+            matchesSequenceString("AS--TVL--OPDTMMQEL------")));
   }
 
   @Test(
@@ -175,36 +178,9 @@ public class AlignmentActionTest
     verify(mockListener).taskCompleted(any(), argument.capture());
     var alignmentResult = argument.getValue().getAlignment();
     assertThat(alignmentResult, hasProperty("sequences", contains(
-        matchesSequence("ASTV-LITOPDCMMQEGGST----"),
-        matchesSequence("ASC-GLITO---MMQEGGST----"),
-        matchesSequence("ASTV-L--OPDTMMQE--L-----"))));
-  }
-
-  protected static Matcher<SequenceI> matchesSequence(String sequence)
-  {
-    return new TypeSafeMatcher<SequenceI>()
-    {
-      @Override
-      public boolean matchesSafely(SequenceI obj)
-      {
-        if (!(obj instanceof SequenceI))
-          return false;
-        var seq = (SequenceI) obj;
-        return seq.getSequenceAsString().equals(sequence);
-      }
-
-      @Override
-      public void describeTo(Description description)
-      {
-        description.appendText("a sequence ").appendValue(sequence);
-      }
-
-      @Override
-      public void describeMismatchSafely(SequenceI item, Description description)
-      {
-        description.appendText("was ").appendValue(item.getSequenceAsString());
-      }
-    };
+        matchesSequenceString("ASTV-LITOPDCMMQEGGST----"),
+        matchesSequenceString("ASC-GLITO---MMQEGGST----"),
+        matchesSequenceString("ASTV-L--OPDTMMQE--L-----"))));
   }
 
   protected TaskEventListener<AlignmentResult> performAction(
@@ -218,12 +194,16 @@ public class AlignmentActionTest
       return null;
     })
         .when(listener).taskCompleted(any(), any());
-    action.perform(viewport, List.of(), Credentials.empty(), listener);
+    var executor = PollingTaskExecutor.fromPool(viewport.getServiceExecutor());
+    var task = action.createTask(viewport, List.of(), Credentials.empty());
+    task.addTaskEventListener(listener);
+    var cancellable = executor.submit(task);
     try
     {
       latch.await(100, TimeUnit.MILLISECONDS);
     } catch (InterruptedException e)
     {
+      cancellable.cancel(true);
     }
     return listener;
   }
@@ -233,7 +213,7 @@ class AlignmentActionListenerNotifiedTest extends AlignmentActionTest
 {
   private AlignViewport viewport;
 
-  @BeforeMethod
+  @BeforeMethod(alwaysRun = true)
   public void setupViewport()
   {
     viewport = new AlignViewport(new Alignment(new SequenceI[] {