blob: c232eea5b0a40aa8d0a41a4bd00e97968edb6c37 [file] [log] [blame]
/*
* Copyright (C) 2014 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.tools.idea.tests.gui.framework.fixture;
import com.android.tools.lint.detector.api.TextFormat;
import com.intellij.refactoring.rename.RenameDialog;
import com.intellij.refactoring.ui.ConflictsDialog;
import com.intellij.ui.EditorTextField;
import org.fest.swing.core.Robot;
import org.fest.swing.core.matcher.JTextComponentMatcher;
import org.fest.swing.edt.GuiActionRunner;
import org.fest.swing.edt.GuiQuery;
import org.fest.swing.edt.GuiTask;
import org.jetbrains.annotations.NotNull;
import javax.swing.text.JTextComponent;
import java.awt.event.KeyEvent;
import java.util.regex.Pattern;
import static com.android.tools.idea.tests.gui.framework.GuiTests.findAndClickButton;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
public class RenameRefactoringDialogFixture extends IdeaDialogFixture<RenameDialog> {
@NotNull
public static RenameRefactoringDialogFixture find(@NotNull Robot robot) {
return new RenameRefactoringDialogFixture(robot, find(robot, RenameDialog.class));
}
private RenameRefactoringDialogFixture(@NotNull Robot robot, @NotNull DialogAndWrapper<RenameDialog> dialogAndWrapper) {
super(robot, dialogAndWrapper);
}
@NotNull
public RenameRefactoringDialogFixture setNewName(@NotNull final String newName) {
final EditorTextField field = robot().finder().findByType(target(), EditorTextField.class);
GuiActionRunner.execute(new GuiTask() {
@Override
protected void executeInEDT() throws Throwable {
field.requestFocus();
}
});
robot().pressAndReleaseKey(KeyEvent.VK_BACK_SPACE); // to make sure we don't append to existing item on Linux
robot().enterText(newName);
return this;
}
@NotNull
public RenameRefactoringDialogFixture clickRefactor() {
findAndClickButton(this, "Refactor");
return this;
}
public static class ConflictsDialogFixture extends IdeaDialogFixture<ConflictsDialog> {
protected ConflictsDialogFixture(@NotNull Robot robot, @NotNull DialogAndWrapper<ConflictsDialog> dialogAndWrapper) {
super(robot, dialogAndWrapper);
}
@NotNull
public static ConflictsDialogFixture find(@NotNull Robot robot) {
return new ConflictsDialogFixture(robot, find(robot, ConflictsDialog.class));
}
@NotNull
public ConflictsDialogFixture clickContinue() {
findAndClickButton(this, "Continue");
return this;
}
public String getHtml() {
final JTextComponent component = robot().finder().find(target(), JTextComponentMatcher.any());
return GuiActionRunner.execute(new GuiQuery<String>() {
@Override
protected String executeInEDT() throws Throwable {
return component.getText();
}
});
}
public String getText() {
String html = getHtml();
return TextFormat.HTML.convertTo(html, TextFormat.TEXT).trim();
}
public void requireMessageText(@NotNull String text) {
assertEquals(text, getText());
}
public void requireMessageTextContains(@NotNull String text) {
assertTrue(getText() + " does not contain expected message fragment " + text, getText().contains(text));
}
public void requireMessageTextMatches(@NotNull String regexp) {
assertTrue(getText() + " does not match " + regexp, Pattern.matches(regexp, getText()));
}
}
}