blob: f79918e74571a3474fc613bc9289fc4ffe2e90dd [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2018 Fabian Pfaff and others.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Fabian Pfaff - initial API and implementation
*******************************************************************************/
package org.eclipse.ui.internal.ide;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import java.util.Arrays;
import java.util.Objects;
import java.util.Optional;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeoutException;
import org.eclipse.jface.bindings.keys.KeyStroke;
import org.eclipse.jface.tests.fieldassist.AbstractFieldAssistTestCase;
import org.eclipse.jface.tests.fieldassist.AbstractFieldAssistWindow;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableItem;
public class DirectoryProposalContentAssistTestCase extends AbstractFieldAssistTestCase {
private DirectoryProposalContentAssistWindow directoryContentAssistWindow;
@Override
protected AbstractFieldAssistWindow createFieldAssistWindow() {
directoryContentAssistWindow = new DirectoryProposalContentAssistWindow();
return directoryContentAssistWindow;
}
public void waitForDirectoryContentAssist() throws InterruptedException, ExecutionException {
try {
directoryContentAssistWindow.getContentAssist().wait(10000);
} catch (TimeoutException e) {
}
spinEventLoop();
}
public void sendKeyEventToControl(char character) {
sendKeyDownToControl(character);
sendKeyUpToControl(character);
}
private void sendKeyUpToControl(char character) {
sendFocusInToControl();
Event event = new Event();
event.type = SWT.KeyUp;
event.character = character;
assertTrue("unable to post event to display queue for test case",
getFieldAssistWindow().getDisplay().post(event));
spinEventLoop();
}
public void sendKeyEventToControl(KeyStroke keyStroke) {
sendKeyDownToControl(keyStroke);
sendKeyUpToControl(keyStroke);
}
private void sendKeyUpToControl(KeyStroke keyStroke) {
sendFocusInToControl();
Event event = new Event();
event.type = SWT.KeyDown;
event.keyCode = keyStroke.getNaturalKey();
assertTrue("unable to post event to display queue for test case",
getFieldAssistWindow().getDisplay().post(event));
spinEventLoop();
}
public void assertProposalSize(int size) {
Shell[] shells = getFieldAssistWindow().getDisplay().getShells();
Optional<Table> tableOptional = Arrays.stream(shells).map(this::retrieveTable)
.filter(Objects::nonNull).findFirst();
if (!tableOptional.isPresent()) {
fail("Couldn't assert pop-up proposal size - pop-up seems closed.");
}
TableItem[] proposals = tableOptional.get().getItems();
assertTrue("Proposal size must be " + size, size == proposals.length);
}
private Table retrieveTable(Shell shell) {
Control[] children = shell.getChildren();
if (children.length >= 1) {
Control control = children[0];
if (control instanceof Composite) {
Composite composite = (Composite) control;
Control[] children2 = composite.getChildren();
if (children2.length >= 1) {
Control control2 = composite.getChildren()[0];
if (control2 instanceof Table) {
return (Table) control2;
}
}
}
}
return null;
}
}