package com.windowtester.test.runtime;
import java.util.Date;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import com.windowtester.runtime.IUIContext;
import com.windowtester.runtime.WidgetSearchException;
import com.windowtester.runtime.swt.UITestCaseSWT;
import com.windowtester.runtime.swt.condition.shell.IShellConditionHandler;
import com.windowtester.runtime.swt.condition.shell.IShellMonitor;
import com.windowtester.runtime.swt.condition.shell.ShellCondition;
import com.windowtester.runtime.swt.locator.ButtonLocator;
/*******************************************************************************
* Copyright (c) 2012 Google, Inc.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Google, Inc. - initial API and implementation
*******************************************************************************/
public class CloseNestedShellsTest extends UITestCaseSWT {
private MessageDialog dialog;
protected final void setUp() throws Exception {
Display.getDefault().asyncExec(new Runnable() {
public void run() {
uiSetup();
}
});
}
/* (non-Javadoc)
* @see com.windowtester.test.locator.swt.AbstractLocatorTest#uiSetup()
*/
public void uiSetup() {
Shell shell = new Shell(Display.getDefault());
dialog = new MessageDialog(shell, "First Shell", null,
"message", MessageDialog.INFORMATION,
new String[] { IDialogConstants.OK_LABEL }, 0) {
/* (non-Javadoc)
* @see org.eclipse.jface.dialogs.Dialog#close()
*/
@Override
public boolean close() {
boolean confirmed = MessageDialog.openConfirm(getShell(), "Nested", "Nested Shell");
if (confirmed)
return super.close();
return false;
}
};
dialog.open();
}
static class Handler implements IShellConditionHandler {
private final String title;
private ShellCondition condition;
public Handler(String title, boolean modal) {
this.title = title;
this.condition = new ShellCondition(title, modal);
}
/* (non-Javadoc)
* @see com.windowtester.runtime.condition.IHandler#handle(com.windowtester.runtime.IUIContext)
*/
public void handle(IUIContext ui) throws Exception {
System.out.println("handling: " + title + " - " + new Date());
ui.click(new ButtonLocator("OK"));
}
/* (non-Javadoc)
* @see com.windowtester.runtime.swt.condition.shell.IShellCondition#test(org.eclipse.swt.widgets.Shell)
*/
public boolean test(Shell shell) {
System.out.println("testing for: " + title + " against " + shell.getText() + " - " + new Date());
return condition.test(shell);
}
}
public void testCloseNestedShells() throws Exception {
IUIContext ui = getUI();
IShellMonitor sm = (IShellMonitor)ui.getAdapter(IShellMonitor.class);
sm.add(new Handler("Nested", true));
//failure means a hang/infinite regress
try {
ui.find(new ButtonLocator("Bogus"));
} catch (WidgetSearchException e) {
//pass
}
}
}