/* * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$) * Copyright (C) $$Year-Rel$$ The Jalview Authors * * This file is part of Jalview. * * Jalview is free software: you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation, either version 3 * of the License, or (at your option) any later version. * * Jalview is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty * of MERCHANTABILITY or FITNESS FOR A PARTICULAR * PURPOSE. See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with Jalview. If not, see . * The Jalview Authors are detailed in the 'AUTHORS' file. */ package jalview.gui; import static org.testng.AssertJUnit.assertEquals; import static org.testng.AssertJUnit.assertSame; import static org.testng.AssertJUnit.assertTrue; import jalview.datamodel.Alignment; import jalview.datamodel.Sequence; import jalview.datamodel.SequenceI; import jalview.viewmodel.AlignmentViewport; import java.awt.Component; import java.util.List; import java.util.Map; import javax.swing.JPanel; import org.testng.annotations.AfterMethod; import org.testng.annotations.BeforeClass; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; public class PaintRefresherTest { @BeforeClass(alwaysRun = true) public void setUpJvOptionPane() { JvOptionPane.setInteractiveMode(false); JvOptionPane.setMockResponse(JvOptionPane.CANCEL_OPTION); } // TODO would prefer PaintRefresher to be a single rather than static @BeforeMethod(alwaysRun = true) public void setUp() { PaintRefresher.components.clear(); } @AfterMethod(alwaysRun = true) public void tearDown() { PaintRefresher.components.clear(); } @Test(groups = { "Functional" }) public void testRegister() { JPanel jp = new JPanel(); JPanel jp2 = new JPanel(); JPanel jp3 = new JPanel(); JPanel jp4 = new JPanel(); PaintRefresher.Register(jp, "22"); PaintRefresher.Register(jp, "22"); PaintRefresher.Register(jp2, "22"); PaintRefresher.Register(jp3, "33"); PaintRefresher.Register(jp3, "44"); PaintRefresher.Register(jp4, "44"); Map> registered = PaintRefresher.components; assertEquals(3, registered.size()); assertEquals(2, registered.get("22").size()); assertEquals(1, registered.get("33").size()); assertEquals(2, registered.get("44").size()); assertTrue(registered.get("22").contains(jp)); assertTrue(registered.get("22").contains(jp2)); assertTrue(registered.get("33").contains(jp3)); assertTrue(registered.get("44").contains(jp3)); assertTrue(registered.get("44").contains(jp4)); } @Test(groups = { "Functional" }) public void testRemoveComponent() { Map> registered = PaintRefresher.components; // no error with an empty PaintRefresher JPanel jp = new JPanel(); JPanel jp2 = new JPanel(); PaintRefresher.RemoveComponent(jp); assertTrue(registered.isEmpty()); /* * Add then remove one item */ PaintRefresher.Register(jp, "11"); PaintRefresher.RemoveComponent(jp); assertTrue(registered.isEmpty()); /* * Add one item under two ids, then remove it. It is removed from both ids, * and the now empty id is removed. */ PaintRefresher.Register(jp, "11"); PaintRefresher.Register(jp, "22"); PaintRefresher.Register(jp2, "22"); PaintRefresher.RemoveComponent(jp); // "11" is removed as now empty, only 22/jp2 left assertEquals(1, registered.size()); assertEquals(1, registered.get("22").size()); assertTrue(registered.get("22").contains(jp2)); } @Test(groups = { "Functional" }) public void testGetAssociatedPanels() { SequenceI[] seqs = new SequenceI[] { new Sequence("", "ABC") }; Alignment al = new Alignment(seqs); /* * AlignFrame constructor has side-effects: AlignmentPanel is constructed, * and SeqCanvas, IdPanel, AlignmentPanel are all registered under the * sequence set id of the viewport. */ AlignmentViewport av = new AlignViewport(al); AlignFrame af = new AlignFrame(al, 4, 1); AlignmentPanel ap1 = af.alignPanel; AlignmentPanel[] panels = PaintRefresher.getAssociatedPanels(av .getSequenceSetId()); assertEquals(1, panels.length); assertSame(ap1, panels[0]); panels = PaintRefresher.getAssociatedPanels(av.getSequenceSetId() + 1); assertEquals(0, panels.length); } }