1 package jalview.workers;
3 import static org.testng.AssertJUnit.assertEquals;
4 import static org.testng.AssertJUnit.assertFalse;
5 import static org.testng.AssertJUnit.assertTrue;
7 import jalview.api.AlignCalcManagerI;
8 import jalview.api.AlignCalcWorkerI;
9 import jalview.api.FeatureRenderer;
10 import jalview.datamodel.Alignment;
11 import jalview.datamodel.AlignmentAnnotation;
12 import jalview.datamodel.AlignmentI;
13 import jalview.datamodel.Annotation;
14 import jalview.datamodel.Sequence;
15 import jalview.datamodel.SequenceI;
16 import jalview.gui.AlignFrame;
18 import java.util.Collections;
19 import java.util.List;
21 import org.testng.annotations.BeforeMethod;
22 import org.testng.annotations.Test;
24 public class AlignCalcManagerTest
26 private AlignFrame alignFrame;
29 * Test the method that removes a worker associated with an annotation,
30 * provided the worker is marked as 'deletable' (some workers should continue
31 * to run even when their results are no longer displayed)
33 @Test(groups = "Functional")
34 public void testRemoveWorkerForAnnotation()
36 AlignCalcManagerI acm = alignFrame.getViewport().getCalcManager();
37 final AlignmentAnnotation ann1 = new AlignmentAnnotation("Ann1",
40 final AlignmentAnnotation ann2 = new AlignmentAnnotation("Ann2",
45 * make two workers for ann1, one deletable, one not
46 * and no worker for ann2
48 AlignCalcWorkerI worker1 = makeWorker(ann1, true);
49 AlignCalcWorkerI worker2 = makeWorker(ann1, false);
52 * The new workers will get run each in their own thread.
53 * We can't tell here whether they have finished, or not yet started.
54 * They have to finish to be 'seen' by getRegisteredWorkersOfClass()
55 * registerWorker adds to the 'restartable' list but
56 * getRegisteredWorkers reads from the 'canUpdate' list
57 * (which is only updated after a worker has run) - why?
58 * So just give workers time to start and finish
65 } catch (InterruptedException e)
71 List<AlignCalcWorkerI> workers = acm.getRegisteredWorkersOfClass(worker1.getClass());
72 assertEquals(2, workers.size());
73 assertTrue(workers.contains(worker1));
74 assertTrue(workers.contains(worker2));
75 assertFalse(acm.isDisabled(worker1));
76 assertFalse(acm.isDisabled(worker2));
79 * remove workers for ann2 (there aren't any)
81 acm.removeWorkerForAnnotation(ann2);
82 assertTrue(acm.getRegisteredWorkersOfClass(worker1.getClass())
84 assertTrue(acm.getRegisteredWorkersOfClass(worker1.getClass())
86 assertFalse(acm.isDisabled(worker1));
87 assertFalse(acm.isDisabled(worker2));
90 * remove worker2 for ann1
91 * - should delete worker1 but not worker2
93 acm.removeWorkerForAnnotation(ann1);
94 assertEquals(1, acm.getRegisteredWorkersOfClass(worker1.getClass())
96 assertTrue(acm.getRegisteredWorkersOfClass(worker1.getClass())
98 assertFalse(acm.isDisabled(worker1));
99 assertFalse(acm.isDisabled(worker2));
103 * Make a worker linked to the given annotation
109 AnnotationWorker makeWorker(final AlignmentAnnotation ann,
110 final boolean deletable)
112 AnnotationProviderI annotationProvider = new AnnotationProviderI()
115 public List<AlignmentAnnotation> calculateAnnotation(AlignmentI al,
118 return Collections.singletonList(ann);
121 return new AnnotationWorker(alignFrame.getViewport(),
122 alignFrame.alignPanel,
126 public boolean isDeletable()
132 public boolean involves(AlignmentAnnotation ann1)
139 @BeforeMethod(alwaysRun = true)
142 AlignmentI al = new Alignment(new SequenceI[] { new Sequence("Seq1",
145 alignFrame = new AlignFrame(al, 3, 1);