X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=test%2Fjalview%2Fbin%2FHiDPISettingTest2.java;fp=test%2Fjalview%2Fbin%2FHiDPISettingTest2.java;h=71d13d0cfe8aa45b0f9325bdce6a5ad065c47079;hb=304e64fb34b32659be1bbfd39fb4e15b2f79586e;hp=0000000000000000000000000000000000000000;hpb=cfb79b69d9fa44595560659bd95d1d1cd27677ad;p=jalview.git diff --git a/test/jalview/bin/HiDPISettingTest2.java b/test/jalview/bin/HiDPISettingTest2.java new file mode 100644 index 0000000..71d13d0 --- /dev/null +++ b/test/jalview/bin/HiDPISettingTest2.java @@ -0,0 +1,232 @@ +/* + * 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.bin; + +import static org.testng.Assert.assertEquals; +import static org.testng.Assert.assertNotNull; + +import java.io.BufferedReader; +import java.io.File; +import java.io.IOException; +import java.io.InputStreamReader; +import java.util.concurrent.TimeUnit; + +import org.testng.Assert; +import org.testng.SkipException; +import org.testng.annotations.BeforeTest; +import org.testng.annotations.DataProvider; +import org.testng.annotations.Test; + +import io.github.classgraph.ClassGraph; +import io.github.classgraph.ScanResult; +import jalview.gui.Desktop; +import jalview.util.Platform; + +public class HiDPISettingTest2 +{ + private static final int TIMEOUT = 10; + + private static class Worker extends Thread + { + private final Process process; + + private BufferedReader outputReader; + + private BufferedReader errorReader; + + private boolean exited; + + private Worker(Process process) + { + this.process = process; + } + + @Override + public void run() + { + try + { + exited = process.waitFor(TIMEOUT, TimeUnit.SECONDS); + } catch (InterruptedException ignore) + { + return; + } + this.interrupt(); + this.process.destroy(); + } + + public BufferedReader getOutputReader() + { + return outputReader; + } + + public void setOutputReader(BufferedReader outputReader) + { + this.outputReader = outputReader; + } + + public BufferedReader getErrorReader() + { + return errorReader; + } + + public void setErrorReader(BufferedReader errorReader) + { + this.errorReader = errorReader; + } + } + + private static ClassGraph scanner = null; + + private static String classpath = null; + + private static String java_exe = null; + + public synchronized static String getClassPath() + { + if (scanner == null) + { + scanner = new ClassGraph(); + ScanResult scan = scanner.scan(); + classpath = scan.getClasspath(); + java_exe = System.getProperty("java.home") + File.separator + "bin" + + File.separator + "java"; + + } + while (classpath == null) + { + try + { + Thread.sleep(10); + } catch (InterruptedException x) + { + + } + } + return classpath; + } + + private Worker getJalviewDesktopRunner(String jvmArgs, String appArgs) + { + String classpath = getClassPath(); + String cmd = java_exe + " " + " -classpath " + classpath + " " + jvmArgs + + " jalview.bin.Jalview " + " " + + "-props test/jalview/bin/hidpiTestProps.jvprops " + appArgs; + Process proc = null; + Worker worker = null; + try + { + proc = Runtime.getRuntime().exec(cmd); + } catch (Throwable e) + { + e.printStackTrace(); + } + if (proc != null) + { + BufferedReader outputReader = new BufferedReader( + new InputStreamReader(proc.getInputStream())); + BufferedReader errorReader = new BufferedReader( + new InputStreamReader(proc.getErrorStream())); + worker = new Worker(proc); + worker.start(); + worker.setOutputReader(outputReader); + worker.setErrorReader(errorReader); + } + return worker; + } + + @BeforeTest(alwaysRun = true) + public void initialize() + { + new HiDPISettingTest2(); + } + + @Test(groups = { "Functional" }, dataProvider = "hidpiScaleArguments") + public void testHiDPISettings(int scale) + { + if (Platform.isLinux()) + { + throw new SkipException( + "Not linux platform, not testing actual scaling with " + + HiDPISetting.scalePropertyName); + } + + String jvmArgs = HiDPISetting.getScalePropertyArg(scale); + + String appArgs = " -open examples/uniref50.fa -nosplash -nonews -noquestionnaire -nousagestats -nowebservicediscovery"; + + Worker worker = getJalviewDesktopRunner(jvmArgs, appArgs); + assertNotNull(worker, "worker is null"); + + String ln = null; + int count = 0; + boolean scaleFound = false; + try + { + while ((ln = worker.getErrorReader().readLine()) != null) + { + if (++count > 100) + { + break; + } + if (ln.contains(Desktop.debugScaleMessage)) + { + String number = ln.substring(ln.indexOf(Desktop.debugScaleMessage) + + Desktop.debugScaleMessage.length()); + number = number.substring(0, number.indexOf(' ')); + try + { + double d = Double.valueOf(number); + + assertEquals(d, scale * 1.0); + scaleFound = true; + } catch (NumberFormatException e) + { + e.printStackTrace(); + Assert.fail( + "Debug scale message line '" + ln + "' gives number '" + + number + "' which could not be parsed"); + } + break; + } + } + } catch (IOException e) + { + e.printStackTrace(); + } + if (worker != null && worker.exited == false) + { + worker.interrupt(); + worker.process.destroy(); + } + if (!scaleFound) + { + Assert.fail("Did not find Debug scale message line '" + + Desktop.debugScaleMessage + "'"); + } + } + + @DataProvider(name = "hidpiScaleArguments") + public static Object[][] getHiDPIScaleArguments() + { + return new Object[][] { { 1 }, { 2 }, { 4 }, { 10 } }; + } +}