X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=test%2Fjalview%2Fgui%2FSeqCanvasTest.java;h=e73b805e77201c7b2d58ab7aa78816458807e0f5;hb=53601a266c5c00791cb0173b3146f982247cd338;hp=801c778438b5a4fa2b86a492df49205cbbbf63bb;hpb=fcb944cdd9de849c89f0a8744ae6e56e22de9c1e;p=jalview.git diff --git a/test/jalview/gui/SeqCanvasTest.java b/test/jalview/gui/SeqCanvasTest.java index 801c778..e73b805 100644 --- a/test/jalview/gui/SeqCanvasTest.java +++ b/test/jalview/gui/SeqCanvasTest.java @@ -23,25 +23,36 @@ package jalview.gui; import static org.testng.Assert.assertEquals; import jalview.bin.Cache; +import jalview.bin.Jalview; import jalview.datamodel.AlignmentI; import jalview.io.DataSourceType; import jalview.io.FileLoader; -import jalview.util.Platform; +import jalview.viewmodel.ViewportRanges; import java.awt.Font; import java.awt.FontMetrics; +import java.awt.Toolkit; +import java.io.IOException; +import java.io.OutputStream; +import java.io.PrintStream; +import org.testng.Assert; import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; import junit.extensions.PA; +@Test(singleThreaded = true) public class SeqCanvasTest { @BeforeClass(alwaysRun = true) public void setUp() { + Thread.currentThread().setName("SeqCanvasTest Setup " + ++nTest); + + Cache.loadProperties("test/jalview/io/testProps.jvprops"); Cache.initLogger(); + Jalview.setSynchronous(true); } /** @@ -51,6 +62,7 @@ public class SeqCanvasTest @Test(groups = "Functional") public void testCalculateWrappedGeometry_noAnnotations() { + Thread.currentThread().setName("SeqCanvasTest noAnn " + ++nTest); AlignFrame af = new FileLoader().LoadFileWaitTillLoaded( "examples/uniref50.fa", DataSourceType.FILE); AlignViewport av = af.getViewport(); @@ -65,8 +77,12 @@ public class SeqCanvasTest av.setFont(new Font("SansSerif", Font.PLAIN, 14), true); int charHeight = av.getCharHeight(); int charWidth = av.getCharWidth(); - assertEquals(charHeight, Platform.isMac() ? 17 : 19); - assertEquals(charWidth, Platform.isMac() ? 12 : 11); + Assert.assertTrue(charHeight == 17 && charWidth == 12 + || charHeight == 19 && charWidth == 11, + "char height/width " + charHeight + "/" + charWidth); + // + // assertEquals(charHeight, Platform.isMac() ? 17 : 19); + // assertEquals(charWidth, Platform.isMac() ? 12 : 11); /* * first with scales above, left, right @@ -77,8 +93,24 @@ public class SeqCanvasTest av.setScaleRightWrapped(true); FontMetrics fm = testee.getFontMetrics(av.getFont()); int labelWidth = fm.stringWidth("000") + charWidth; - assertEquals(labelWidth, - Platform.isMac() ? 3 * 9 + charWidth : 3 * 8 + charWidth); + // BH 2020.03.22 It is not really necessary to be this detailed. Different + // OS-based UIs will + // always have slightly different parameters. StringgWidths are not + // necessarily linear sums of the letters involved. + // for example, the calculation for JavaScript is a float that has to be + // rounded. + // ..............................mac................PC................linux? + Assert.assertTrue( + labelWidth == 39 || labelWidth == 35 || labelWidth == 36);// 3 * 9 + + // charWidth + // || + // labelWidth + // == 3 * + // 8 + + // charWidth, + // "labelWidth + // 36 or + // 39"); /* * width 400 pixels leaves (400 - 2*labelWidth) for residue columns @@ -200,7 +232,10 @@ public class SeqCanvasTest canvasWidth += 2; wrappedWidth = testee.calculateWrappedGeometry(canvasWidth, canvasHeight); - assertEquals(wrappedWidth, Platform.isMac() ? 24 : 25); // 2px not enough + Assert.assertTrue(wrappedWidth == 24 || wrappedWidth == 25, + "WrappedWidth [" + wrappedWidth + "] should be 24 or 25"); // 2px + // not + // enough canvasWidth += 1; wrappedWidth = testee.calculateWrappedGeometry(canvasWidth, canvasHeight); @@ -222,6 +257,7 @@ public class SeqCanvasTest @Test(groups = "Functional") public void testCalculateWrappedGeometry_withAnnotations() { + Thread.currentThread().setName("SeqCanvasTest wAnn " + ++nTest); AlignFrame af = new FileLoader().LoadFileWaitTillLoaded( "examples/uniref50.fa", DataSourceType.FILE); AlignViewport av = af.getViewport(); @@ -235,8 +271,12 @@ public class SeqCanvasTest int charHeight = av.getCharHeight(); int charWidth = av.getCharWidth(); - assertEquals(charHeight, Platform.isMac() ? 17 : 19); - assertEquals(charWidth, Platform.isMac() ? 12 : 11); + Assert.assertTrue( + charHeight == 17 && charWidth == 12 + || charHeight == 19 && charWidth == 11, + "char height/width " + charHeight + "/" + charWidth); + // assertEquals(charHeight, Platform.isMac() ? 17 : 19); + // assertEquals(charWidth, Platform.isMac() ? 12 : 11); SeqCanvas testee = af.alignPanel.getSeqPanel().seqCanvas; @@ -250,8 +290,27 @@ public class SeqCanvasTest FontMetrics fm = testee.getFontMetrics(av.getFont()); int labelWidth = fm.stringWidth("000") + charWidth; - assertEquals(labelWidth, - Platform.isMac() ? 3 * 9 + charWidth : 3 * 8 + charWidth); + // BH 2020.03.22 It is not really necessary to be this detailed. Different + // OS-based UIs will + // always have slightly different parameters. StringgWidths are not + // necessarily linear sums of the letters involved. + // for example, the calculation for JavaScript is a float that has to be + // rounded. + // ..............................mac................PC................linux? + Assert.assertTrue( + labelWidth == 39 || labelWidth == 35 || labelWidth == 36);// 3 * 9 + + // charWidth + // || + // labelWidth + // == 3 * + // 8 + + // charWidth, + // "labelWidth + // 36 or + // 39"); + // int labelWidth = fm.stringWidth("000") + charWidth; + // assertEquals(labelWidth, + // Platform.isMac() ? 3 * 9 + charWidth : 3 * 8 + charWidth); int annotationHeight = testee.getAnnotationHeight(); @@ -315,6 +374,7 @@ public class SeqCanvasTest assertEquals(PA.getValue(testee, "wrappedVisibleWidths"), 3); } + private static int nTest = 0; /** * Test simulates loading an unwrapped alignment, shrinking it vertically so * not all sequences are visible, then changing to wrapped mode. The ranges @@ -324,32 +384,106 @@ public class SeqCanvasTest @Test(groups = "Functional") public void testCalculateWrappedGeometry_fromScrolled() { + // debugOut("12]", new Runnable() + // { + // + // @Override + // public void run() + // { + // + // String s = Arrays + // .toString(new NullPointerException().getStackTrace()) + // .replace(',', '\n') + "\n\n"; + // + // System.err.println(s); + // + // } + // + // }); + // + ViewportRanges.sTest = ""; + Thread.currentThread().setName("SeqCanvasTest fromScrolled " + ++nTest); AlignFrame af = new FileLoader().LoadFileWaitTillLoaded( "examples/uniref50.fa", DataSourceType.FILE); + // note that this frame is unpacked, with w = h = 0; AlignViewport av = af.getViewport(); AlignmentI al = av.getAlignment(); assertEquals(al.getWidth(), 157); assertEquals(al.getHeight(), 15); + String s = ""; + s += "flushing events"; + flushEvents(); + s += "events flushed"; av.getRanges().setStartEndSeq(0, 3); + s += " SC1 " + av.getRanges() + " " + ViewportRanges.sTest; 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(); - // Windows h=19, w=11. - assertEquals(charHeight, Platform.isMac() ? 17 : 19); - assertEquals(charWidth, Platform.isMac() ? 12 : 11); - + // Windows h=19, w=11; Mac (and Linux?) 17,11 + Assert.assertTrue(charHeight == 17 && charWidth == 12 + || charHeight == 19 && charWidth == 11, + "char height/width " + charHeight + "/" + charWidth); int canvasWidth = 400; int canvasHeight = 300; testee.calculateWrappedGeometry(canvasWidth, canvasHeight); - - assertEquals(av.getRanges().getEndSeq(), 3); // unchanged int repeatingHeight = (int) PA.getValue(testee, "wrappedRepeatHeightPx"); + assertEquals(av.getRanges().getEndSeq(), 3, "endSeq should be 3 " + s); // unchanged assertEquals(repeatingHeight, charHeight * (2 + al.getHeight())); } + + /** + * Let me know when the output indicates the specified message. + * + * @param msg + * @param r + */ + private void debugOut(String msg, Runnable r) + { + int len = msg.length(); + int c0 = msg.charAt(0); + boolean[] recording = new boolean[1]; + System.setOut(new PrintStream(new OutputStream() + { + + StringBuffer out = new StringBuffer(); + + @Override + public void write(int b) throws IOException + { + + if (recording[0]) + { + out.append((char) b); + if (out.length() == len) + { + if (out.toString().equals(msg)) + { + r.run(); + } + recording[0] = false; + out.setLength(0); + } + } + else if (b == c0) + { + out.append((char) b); + recording[0] = true; + } + } + + })); + + // TODO Auto-generated method stub + + } + + private static void flushEvents() + { + ((sun.awt.SunToolkit) Toolkit.getDefaultToolkit()).flushPendingEvents(); + } }