3789983e89
Reviewed-by: darcy, ihse
106 lines
3.0 KiB
Java
106 lines
3.0 KiB
Java
/*
|
|
* Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
|
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
|
*
|
|
* This code is free software; you can redistribute it and/or modify it
|
|
* under the terms of the GNU General Public License version 2 only, as
|
|
* published by the Free Software Foundation.
|
|
*
|
|
* This code 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
|
|
* version 2 for more details (a copy is included in the LICENSE file that
|
|
* accompanied this code).
|
|
*
|
|
* You should have received a copy of the GNU General Public License version
|
|
* 2 along with this work; if not, write to the Free Software Foundation,
|
|
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
|
*
|
|
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
|
* or visit www.oracle.com if you need additional information or have any
|
|
* questions.
|
|
*/
|
|
|
|
/*
|
|
* @summary This is a utility for coordinating the flow of events on different
|
|
threads.
|
|
* @summary com.apple.junit.utils
|
|
*/
|
|
package test.java.awt.regtesthelpers;
|
|
|
|
public class Waypoint {
|
|
|
|
static final String MSG = "Waypoint timed out";
|
|
// Wait up to five seconds for our clear() to be called
|
|
static final int TIMEOUT = 5000;
|
|
boolean clear = false;
|
|
|
|
public Waypoint() {
|
|
|
|
}
|
|
|
|
//
|
|
// Pause for either TIMEOUT millis or until clear() is called
|
|
//
|
|
synchronized public void requireClear() throws RuntimeException {
|
|
requireClear(MSG, TIMEOUT);
|
|
}
|
|
|
|
synchronized public void requireClear(long timeout)
|
|
throws RuntimeException {
|
|
requireClear(MSG, timeout);
|
|
}
|
|
|
|
synchronized public void requireClear(String timeOutMsg)
|
|
throws RuntimeException {
|
|
requireClear(timeOutMsg, TIMEOUT);
|
|
}
|
|
|
|
synchronized public void requireClear(String timeOutMsg, long timeout)
|
|
throws RuntimeException {
|
|
long endtime = System.currentTimeMillis() + timeout;
|
|
try {
|
|
while (isClear() == false) {
|
|
if (System.currentTimeMillis() < endtime) {
|
|
wait(200);
|
|
} else {
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (!isClear()) {
|
|
throw new RuntimeException(timeOutMsg);
|
|
}
|
|
} catch (InterruptedException ix) {
|
|
}
|
|
}
|
|
|
|
//
|
|
// Called when it is valid to procede past the waypoint
|
|
//
|
|
synchronized public void clear() {
|
|
clear = true;
|
|
notify();
|
|
}
|
|
|
|
//
|
|
// Should be checked after a call to requireClear() to make
|
|
// sure that we did not time out.
|
|
//
|
|
synchronized public boolean isClear() {
|
|
return clear;
|
|
}
|
|
|
|
synchronized public boolean isValid() {
|
|
return clear;
|
|
}
|
|
|
|
//
|
|
// For re-use of a waypoint. Be careful.
|
|
//
|
|
synchronized public void reset() {
|
|
clear = false;
|
|
}
|
|
|
|
}
|