1 /* 2 * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. Oracle designates this 8 * particular file as subject to the "Classpath" exception as provided 9 * by Oracle in the LICENSE file that accompanied this code. 10 * 11 * This code is distributed in the hope that it will be useful, but WITHOUT 12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 14 * version 2 for more details (a copy is included in the LICENSE file that 15 * accompanied this code). 16 * 17 * You should have received a copy of the GNU General Public License version 18 * 2 along with this work; if not, write to the Free Software Foundation, 19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 20 * 21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 22 * or visit www.oracle.com if you need additional information or have any 23 * questions. 24 */ 25 26 package test.robot.com.sun.glass.ui.monocle; 27 28 import com.sun.glass.ui.monocle.TestLog; 29 import test.robot.com.sun.glass.ui.monocle.TestApplication; 30 import test.robot.com.sun.glass.ui.monocle.input.devices.TestTouchDevice; 31 import javafx.application.Platform; 32 import javafx.geometry.Rectangle2D; 33 import org.junit.After; 34 import org.junit.Before; 35 import org.junit.Rule; 36 import org.junit.internal.AssumptionViolatedException; 37 import org.junit.rules.TestName; 38 import org.junit.rules.TestWatchman; 39 import org.junit.runner.RunWith; 40 import org.junit.runners.Parameterized; 41 import org.junit.runners.model.FrameworkMethod; 42 43 @RunWith(Parameterized.class) 44 public abstract class ParameterizedTestBase { 45 46 protected final TestTouchDevice device; 47 protected final Rectangle2D stageBounds; 48 private Throwable exception; 49 protected double width; 50 protected double height; 51 52 @Rule 53 public TestWatchman monitor = new TestWatchman() { 54 @Override 55 public void failed(Throwable e, FrameworkMethod method) { 56 if (!(e instanceof AssumptionViolatedException)) { 57 // Ignore silently a failed Assume 58 System.err.format("Failed %s.%s[%s]\n", 59 method.getMethod().getDeclaringClass().getName(), 60 method.getName(), 61 device); 62 } 63 } 64 }; 65 66 @Rule public TestName name = new TestName(); 67 68 69 public ParameterizedTestBase(TestTouchDevice device, Rectangle2D stageBounds) { 70 this.device = device; 71 this.stageBounds = stageBounds; 72 } 73 74 public ParameterizedTestBase(TestTouchDevice device) { 75 this(device, null); 76 } 77 78 @Before 79 public void createDevice() throws Exception { 80 TestApplication.showScene(stageBounds); 81 TestLog.log("Starting " + name.getMethodName() + "[" + device + "]"); 82 Rectangle2D r = TestApplication.getScreenBounds(); 83 width = r.getWidth(); 84 height = r.getHeight(); 85 TestLog.reset(); 86 device.create(); 87 TestApplication.addMouseListeners(); 88 TestApplication.addTouchListeners(); 89 TestApplication.addGestureListeners(); 90 TestLog.reset(); 91 Platform.runLater( 92 () -> Thread.currentThread().setUncaughtExceptionHandler( 93 (t, e) -> exception = e)); 94 } 95 96 @After 97 public void destroyDevice() throws Throwable { 98 if (device != null) { 99 device.destroy(); 100 } 101 TestApplication.waitForNextPulse(); 102 if (exception != null) { 103 RuntimeException rte = new RuntimeException("Uncaught exception"); 104 rte.setStackTrace(new StackTraceElement[0]); 105 rte.initCause(exception); 106 throw rte; 107 } 108 } 109 110 }