Clover icon

Coverage Report

  1. Project Clover database Wed Sep 18 2024 02:54:09 BST
  2. Package jalview.bin

File HiDPISettingTest2.java

 

Code metrics

18
65
11
2
232
182
26
0.4
5.91
5.5
2.36

Classes

Class Line # Actions
HiDPISettingTest2 43 55 19
0.7820512778.2%
HiDPISettingTest2.Worker 47 10 7
0.7575%
 

Contributing tests

This file is covered by 4 tests. .

Source view

1    /*
2    * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
3    * Copyright (C) $$Year-Rel$$ The Jalview Authors
4    *
5    * This file is part of Jalview.
6    *
7    * Jalview is free software: you can redistribute it and/or
8    * modify it under the terms of the GNU General Public License
9    * as published by the Free Software Foundation, either version 3
10    * of the License, or (at your option) any later version.
11    *
12    * Jalview is distributed in the hope that it will be useful, but
13    * WITHOUT ANY WARRANTY; without even the implied warranty
14    * of MERCHANTABILITY or FITNESS FOR A PARTICULAR
15    * PURPOSE. See the GNU General Public License for more details.
16    *
17    * You should have received a copy of the GNU General Public License
18    * along with Jalview. If not, see <http://www.gnu.org/licenses/>.
19    * The Jalview Authors are detailed in the 'AUTHORS' file.
20    */
21    package jalview.bin;
22   
23    import static org.testng.Assert.assertEquals;
24    import static org.testng.Assert.assertNotNull;
25   
26    import java.io.BufferedReader;
27    import java.io.File;
28    import java.io.IOException;
29    import java.io.InputStreamReader;
30    import java.util.concurrent.TimeUnit;
31   
32    import org.testng.Assert;
33    import org.testng.SkipException;
34    import org.testng.annotations.BeforeTest;
35    import org.testng.annotations.DataProvider;
36    import org.testng.annotations.Test;
37   
38    import io.github.classgraph.ClassGraph;
39    import io.github.classgraph.ScanResult;
40    import jalview.gui.Desktop;
41    import jalview.util.Platform;
42   
 
43    public class HiDPISettingTest2
44    {
45    private static final int TIMEOUT = 10;
46   
 
47    private static class Worker extends Thread
48    {
49    private final Process process;
50   
51    private BufferedReader outputReader;
52   
53    private BufferedReader errorReader;
54   
55    private boolean exited;
56   
 
57  4 toggle private Worker(Process process)
58    {
59  4 this.process = process;
60    }
61   
 
62  4 toggle @Override
63    public void run()
64    {
65  4 try
66    {
67  4 exited = process.waitFor(TIMEOUT, TimeUnit.SECONDS);
68    } catch (InterruptedException ignore)
69    {
70  4 return;
71    }
72  0 this.interrupt();
73  0 this.process.destroy();
74    }
75   
 
76  0 toggle public BufferedReader getOutputReader()
77    {
78  0 return outputReader;
79    }
80   
 
81  4 toggle public void setOutputReader(BufferedReader outputReader)
82    {
83  4 this.outputReader = outputReader;
84    }
85   
 
86  163 toggle public BufferedReader getErrorReader()
87    {
88  163 return errorReader;
89    }
90   
 
91  4 toggle public void setErrorReader(BufferedReader errorReader)
92    {
93  4 this.errorReader = errorReader;
94    }
95    }
96   
97    private static ClassGraph scanner = null;
98   
99    private static String classpath = null;
100   
101    private static String java_exe = null;
102   
 
103  4 toggle public synchronized static String getClassPath()
104    {
105  4 if (scanner == null)
106    {
107  1 scanner = new ClassGraph();
108  1 ScanResult scan = scanner.scan();
109  1 classpath = scan.getClasspath();
110  1 java_exe = System.getProperty("java.home") + File.separator + "bin"
111    + File.separator + "java";
112   
113    }
114  4 while (classpath == null)
115    {
116  0 try
117    {
118  0 Thread.sleep(10);
119    } catch (InterruptedException x)
120    {
121   
122    }
123    }
124  4 return classpath;
125    }
126   
 
127  4 toggle private Worker getJalviewDesktopRunner(String jvmArgs, String appArgs)
128    {
129  4 String classpath = getClassPath();
130  4 String cmd = java_exe + " " + " -classpath " + classpath + " " + jvmArgs
131    + " jalview.bin.Jalview " + " "
132    + "--props=test/jalview/bin/hidpiTestProps.jvprops " + appArgs;
133  4 Process proc = null;
134  4 Worker worker = null;
135  4 try
136    {
137  4 proc = Runtime.getRuntime().exec(cmd);
138    } catch (Throwable e)
139    {
140  0 e.printStackTrace();
141    }
142  4 if (proc != null)
143    {
144  4 BufferedReader outputReader = new BufferedReader(
145    new InputStreamReader(proc.getInputStream()));
146  4 BufferedReader errorReader = new BufferedReader(
147    new InputStreamReader(proc.getErrorStream()));
148  4 worker = new Worker(proc);
149  4 worker.start();
150  4 worker.setOutputReader(outputReader);
151  4 worker.setErrorReader(errorReader);
152    }
153  4 return worker;
154    }
155   
 
156  4 toggle @BeforeTest(alwaysRun = true)
157    public void initialize()
158    {
159  4 new HiDPISettingTest2();
160    }
161   
 
162  4 toggle @Test(groups = { "Functional" }, dataProvider = "hidpiScaleArguments")
163    public void testHiDPISettings(int scale)
164    {
165  4 if (!Platform.isLinux())
166    {
167  0 throw new SkipException(
168    "Not linux platform, not testing actual scaling with "
169    + HiDPISetting.scalePropertyName);
170    }
171   
172  4 String jvmArgs = HiDPISetting.getScalePropertyArg(scale);
173   
174  4 String appArgs = " --open examples/uniref50.fa --nosplash --nonews --noquestionnaire --nousagestats --nowebservicediscovery";
175   
176  4 Worker worker = getJalviewDesktopRunner(jvmArgs, appArgs);
177  4 assertNotNull(worker, "worker is null");
178   
179  4 String ln = null;
180  4 int count = 0;
181  4 boolean scaleFound = false;
182  4 try
183    {
184  ? while ((ln = worker.getErrorReader().readLine()) != null)
185    {
186  163 if (++count > 150)
187    {
188  0 break;
189    }
190  163 if (ln.contains(Desktop.debugScaleMessage))
191    {
192  4 String number = ln.substring(ln.indexOf(Desktop.debugScaleMessage)
193    + Desktop.debugScaleMessage.length());
194  4 number = number.substring(0, number.indexOf(' '));
195  4 try
196    {
197  4 double d = Double.valueOf(number);
198   
199  4 assertEquals(d, scale * 1.0);
200  4 scaleFound = true;
201    } catch (NumberFormatException e)
202    {
203  0 e.printStackTrace();
204  0 Assert.fail(
205    "Debug scale message line '" + ln + "' gives number '"
206    + number + "' which could not be parsed");
207    }
208  4 break;
209    }
210    }
211    } catch (IOException e)
212    {
213  0 e.printStackTrace();
214    }
215  4 if (worker != null && worker.exited == false)
216    {
217  4 worker.interrupt();
218  4 worker.process.destroy();
219    }
220  4 if (!scaleFound)
221    {
222  0 Assert.fail("Did not find Debug scale message line '"
223    + Desktop.debugScaleMessage + "'");
224    }
225    }
226   
 
227  1 toggle @DataProvider(name = "hidpiScaleArguments")
228    public static Object[][] getHiDPIScaleArguments()
229    {
230  1 return new Object[][] { { 1 }, { 2 }, { 4 }, { 10 } };
231    }
232    }