blob: 8f5b65cd8ab26c6fb9817526f63737c82caff053 [file] [log] [blame]
/*
* 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;
}
}