package jalview.gui;
import static org.testng.Assert.assertEquals;
-
-import jalview.datamodel.AlignmentI;
-import jalview.io.DataSourceType;
-import jalview.io.FileLoader;
+import static org.testng.Assert.assertFalse;
+import static org.testng.Assert.assertNotNull;
+import static org.testng.Assert.assertNull;
+import static org.testng.Assert.assertTrue;
import java.awt.Font;
import java.awt.FontMetrics;
+import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
+import jalview.bin.Cache;
+import jalview.datamodel.AlignmentI;
+import jalview.datamodel.SearchResults;
+import jalview.datamodel.SearchResultsI;
+import jalview.io.DataSourceType;
+import jalview.io.FileLoader;
+import jalview.util.Platform;
+import jalview.viewmodel.ViewportRanges;
import junit.extensions.PA;
public class SeqCanvasTest
{
+ @BeforeClass(alwaysRun = true)
+ public void setUp()
+ {
+ Cache.loadProperties(null);
+ Cache.initLogger();
+ Desktop.getInstance().setVisible(false);
+ }
+
/**
* Test the method that computes wrapped width in residues, height of wrapped
* widths in pixels, and the number of widths visible
{
AlignFrame af = new FileLoader().LoadFileWaitTillLoaded(
"examples/uniref50.fa", DataSourceType.FILE);
+
AlignViewport av = af.getViewport();
AlignmentI al = av.getAlignment();
assertEquals(al.getWidth(), 157);
av.setFont(new Font("SansSerif", Font.PLAIN, 14), true);
int charHeight = av.getCharHeight();
int charWidth = av.getCharWidth();
- assertEquals(charHeight, 17);
- assertEquals(charWidth, 12);
+ assertEquals(charHeight, !Platform.isWin() ? 17 : 19);
+ assertEquals(charWidth, !Platform.isWin() ? 12 : 11);
/*
* first with scales above, left, right
av.setScaleRightWrapped(true);
FontMetrics fm = testee.getFontMetrics(av.getFont());
int labelWidth = fm.stringWidth("000") + charWidth;
- assertEquals(labelWidth, 39); // 3 x 9 + charWidth
+ assertEquals(labelWidth,
+ !Platform.isWin() ? 3 * 9 + charWidth : 3 * 8 + charWidth);
/*
* width 400 pixels leaves (400 - 2*labelWidth) for residue columns
assertEquals(PA.getValue(testee, "wrappedVisibleWidths"), 3);
/*
- * reduce canvas height by 1 pixel - should not be enough height
- * to draw 3 widths
+ * reduce canvas height by 1 pixel
+ * - should not be enough height to draw 3 widths
*/
canvasHeight -= 1;
testee.calculateWrappedGeometry(canvasWidth, canvasHeight);
canvasWidth += 8;
wrappedWidth = testee.calculateWrappedGeometry(canvasWidth,
canvasHeight);
- assertEquals(wrappedWidth, 27);
+ assertEquals(wrappedWidth, 27); // 8px not enough
canvasWidth += 1;
wrappedWidth = testee.calculateWrappedGeometry(canvasWidth,
canvasHeight);
- assertEquals(wrappedWidth, 28);
+ assertEquals(wrappedWidth, 28); // 9px is enough
/*
* now West but not East scale - lose 39 pixels or 4 columns
canvasWidth += 2;
wrappedWidth = testee.calculateWrappedGeometry(canvasWidth,
canvasHeight);
- assertEquals(wrappedWidth, 24);
+ assertEquals(wrappedWidth, !Platform.isWin() ? 24 : 25); // 2px not enough
canvasWidth += 1;
wrappedWidth = testee.calculateWrappedGeometry(canvasWidth,
canvasHeight);
- assertEquals(wrappedWidth, 25);
+ assertEquals(wrappedWidth, 25); // 3px is enough
/*
* turn off scales left and right, make width exactly 157 columns
av.setFont(new Font("SansSerif", Font.PLAIN, 14), true);
int charHeight = av.getCharHeight();
int charWidth = av.getCharWidth();
- assertEquals(charHeight, 17);
- assertEquals(charWidth, 12);
-
+
+ assertEquals(charHeight, !Platform.isWin() ? 17 : 19);
+ assertEquals(charWidth, !Platform.isWin() ? 12 : 11);
+
SeqCanvas testee = af.alignPanel.getSeqPanel().seqCanvas;
/*
av.setScaleAboveWrapped(true);
av.setScaleLeftWrapped(true);
av.setScaleRightWrapped(true);
+
FontMetrics fm = testee.getFontMetrics(av.getFont());
int labelWidth = fm.stringWidth("000") + charWidth;
- assertEquals(labelWidth, 39); // 3 x 9 + charWidth
+ assertEquals(labelWidth,
+ !Platform.isWin() ? 3 * 9 + charWidth : 3 * 8 + charWidth);
+
int annotationHeight = testee.getAnnotationHeight();
/*
2 * charHeight);
int repeatingHeight = (int) PA.getValue(testee, "wrappedRepeatHeightPx");
assertEquals(repeatingHeight, charHeight * (2 + al.getHeight())
- + annotationHeight);
+ + SeqCanvas.SEQS_ANNOTATION_GAP + annotationHeight);
assertEquals(PA.getValue(testee, "wrappedVisibleWidths"), 1);
/*
- * repeat height is 17 * (2 + 15) = 289 + annotationHeight = 507
- * make canvas height 2 * 289 + 3 * charHeight so just enough to
- * draw 2 widths and the first sequence of a third
+ * repeat height is 17 * (2 + 15) = 289 + 3 + annotationHeight = 510
+ * make canvas height 2 of these plus 3 charHeights
+ * so just enough to draw 2 widths, gap + scale + the first sequence of a third
*/
- canvasHeight = charHeight * (17 * 2 + 3) + 2 * annotationHeight;
+ canvasHeight = charHeight * (17 * 2 + 3)
+ + 2 * (annotationHeight + SeqCanvas.SEQS_ANNOTATION_GAP);
testee.calculateWrappedGeometry(canvasWidth, canvasHeight);
assertEquals(PA.getValue(testee, "wrappedVisibleWidths"), 3);
* reduce height to enough for 2 widths and not quite a third
* i.e. two repeating heights + spacer + sequence - 1 pixel
*/
- canvasHeight = charHeight * (16 * 2 + 2) + 2 * annotationHeight - 1;
+ canvasHeight = charHeight * (16 * 2 + 2)
+ + 2 * (annotationHeight + SeqCanvas.SEQS_ANNOTATION_GAP) - 1;
testee.calculateWrappedGeometry(canvasWidth, canvasHeight);
assertEquals(PA.getValue(testee, "wrappedVisibleWidths"), 2);
{
AlignFrame af = new FileLoader().LoadFileWaitTillLoaded(
"examples/uniref50.fa", DataSourceType.FILE);
+ //
+ System.out.println("ap dim = " + af.alignPanel.getSize());
+ System.out.println("seqpan dim = " + af.alignPanel.getSeqPanel().getSize());
+ System.out.println("seqcan dim = " + af.alignPanel.getSeqPanel().seqCanvas.getSize());
+
+
AlignViewport av = af.getViewport();
AlignmentI al = av.getAlignment();
assertEquals(al.getWidth(), 157);
assertEquals(al.getHeight(), 15);
- av.getRanges().setStartEndSeq(0, 3);
+
+ ViewportRanges ranges = av.getRanges();
+ System.out.println(ranges + " before setting to 3");
+ ranges.setStartEndSeq(0, 3);
+ int endSeq = ranges.getEndSeq();
+ System.out.println(ranges + " after setting to 3");
av.setShowAnnotation(false);
av.setScaleAboveWrapped(true);
SeqCanvas testee = af.alignPanel.getSeqPanel().seqCanvas;
-
av.setWrapAlignment(true);
av.setFont(new Font("SansSerif", Font.PLAIN, 14), true);
int charHeight = av.getCharHeight();
int charWidth = av.getCharWidth();
- assertEquals(charHeight, 17);
- assertEquals(charWidth, 12);
-
+ // Windows h=19, w=11.
+ assertEquals(charHeight, !Platform.isWin() ? 17 : 19);
+ assertEquals(charWidth, !Platform.isWin() ? 12 : 11);
+
int canvasWidth = 400;
int canvasHeight = 300;
testee.calculateWrappedGeometry(canvasWidth, canvasHeight);
-
- assertEquals(av.getRanges().getEndSeq(), 3); // unchanged
+ System.out.println(ranges);
+ assertEquals(ranges.getEndSeq(), endSeq); // unchanged
int repeatingHeight = (int) PA.getValue(testee,
"wrappedRepeatHeightPx");
- assertEquals(repeatingHeight, charHeight * (2 + al.getHeight()));
+ int h = charHeight * (2 + al.getHeight());
+ assertEquals(repeatingHeight, h);
+ }
+ @Test(groups = "Functional")
+ public void testClear_HighlightAndSelection()
+ {
+ AlignFrame af = new FileLoader().LoadFileWaitTillLoaded(
+ "examples/uniref50.fa", DataSourceType.FILE);
+ AlignViewport av = af.getViewport();
+ SearchResultsI highlight = new SearchResults();
+ highlight.addResult(
+ av.getAlignment().getSequenceAt(1).getDatasetSequence(), 50,
+ 80);
+ af.alignPanel.highlightSearchResults(highlight);
+ af.avc.markHighlightedColumns(false, false, false);
+ assertNotNull(av.getSearchResults(),
+ "No highlight was created on alignment");
+ assertFalse(av.getColumnSelection().isEmpty(),
+ "No selection was created from highlight");
+ af.deselectAllSequenceMenuItem_actionPerformed(null);
+ assertTrue(av.getColumnSelection().isEmpty(),
+ "No Selection should be present after deselecting all.");
+ assertNull(av.getSearchResults(),
+ "No higlighted search results should be present after deselecting all.");
}
}