/*
* Copyright 2017 Nokia Solutions and Networks
* Licensed under the Apache License, Version 2.0,
* see license.txt file for details.
*/
package org.robotframework.ide.eclipse.main.plugin.launch.tabs;
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.Mockito.mock;
import java.util.concurrent.atomic.AtomicBoolean;
import org.assertj.core.api.Condition;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Text;
import org.junit.Rule;
import org.junit.Test;
import org.robotframework.red.junit.ShellProvider;
public class ProjectCompositeTest {
@Rule
public ShellProvider shellProvider = new ShellProvider();
@Test
public void projectComposite_inputSettingTest() {
final ProjectComposite composite = new ProjectComposite(shellProvider.getShell(), mock(ModifyListener.class));
composite.setInput(" someProject ");
assertThat(projectText(composite)).is(enabled());
assertThat(checkBrowseButton(composite)).is(enabled());
assertThat(composite.getSelectedProjectName()).isEqualTo("someProject");
}
@Test
public void whenProjectIsSelected_listenerIsNotified() {
final AtomicBoolean listenerWasCalled = new AtomicBoolean(false);
final ModifyListener listener = new ModifyListener() {
@Override
public void modifyText(final ModifyEvent e) {
listenerWasCalled.set(true);
}
};
final ProjectComposite composite = new ProjectComposite(shellProvider.getShell(), listener);
projectText(composite).setText("selected");
assertThat(projectText(composite)).is(enabled());
assertThat(checkBrowseButton(composite)).is(enabled());
assertThat(composite.getSelectedProjectName()).isEqualTo("selected");
assertThat(listenerWasCalled.get()).isTrue();
}
private static Text projectText(final Composite composite) {
for (final Control control : composite.getChildren()) {
if (control instanceof Text) {
return (Text) control;
}
}
return null;
}
private static Button checkBrowseButton(final Composite composite) {
for (final Control control : composite.getChildren()) {
if (control instanceof Button) {
final Button button = (Button) control;
final String text = button.getText().toLowerCase();
if (text.contains("browse...")) {
return button;
}
}
}
return null;
}
private static Condition<? super Control> enabled() {
return new Condition<Control>() {
@Override
public boolean matches(final Control control) {
return control.isEnabled();
}
};
}
}