blob: 1630f80f8aad3f4012ee628d95b16efa6c102c1a [file] [log] [blame]
/*
* Copyright (C) 2015 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.theme;
import com.android.sdklib.IAndroidTarget;
import com.android.sdklib.devices.Device;
import com.android.tools.idea.configurations.Configuration;
import com.android.tools.idea.editors.theme.AttributesPanel;
import com.android.tools.idea.editors.theme.ThemeEditor;
import com.android.tools.idea.editors.theme.ThemeEditorComponent;
import com.android.tools.idea.editors.theme.ThemeEditorTable;
import com.android.tools.idea.editors.theme.preview.AndroidThemePreviewPanel;
import com.android.tools.idea.tests.gui.framework.GuiTests;
import com.android.tools.idea.tests.gui.framework.fixture.ComponentFixture;
import com.google.common.collect.ImmutableList;
import org.fest.swing.core.GenericTypeMatcher;
import org.fest.swing.core.Robot;
import org.fest.swing.fixture.JComboBoxFixture;
import org.fest.swing.fixture.JTableFixture;
import org.fest.swing.timing.Condition;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JPanel;
import java.util.List;
import static com.android.tools.idea.tests.gui.framework.GuiTests.waitUntilFound;
import static org.fest.swing.timing.Pause.pause;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
public class ThemeEditorFixture extends ComponentFixture<ThemeEditorFixture, ThemeEditorComponent> {
private final JComboBoxFixture myThemesComboBox;
private final JComboBoxFixture myModulesComboBox;
public ThemeEditorFixture(@NotNull Robot robot, @NotNull ThemeEditorComponent themeEditorComponent) {
super(ThemeEditorFixture.class, robot, themeEditorComponent);
myThemesComboBox = new JComboBoxFixture(robot(), robot().finder().findByName(this.target().getSecondComponent(), AttributesPanel.THEME_SELECTOR_NAME, JComboBox.class));
myModulesComboBox = new JComboBoxFixture(robot(), robot().finder().findByName(this.target().getSecondComponent(), AttributesPanel.MODULE_SELECTOR_NAME, JComboBox.class));
}
@NotNull
public JComboBoxFixture getThemesComboBox() {
return myThemesComboBox;
}
public JComboBoxFixture getModulesComboBox() {
return myModulesComboBox;
}
@NotNull
public ThemeEditorTableFixture getPropertiesTable() {
return ThemeEditorTableFixture.find(robot());
}
@NotNull
public AndroidThemePreviewPanelFixture getThemePreviewPanel() {
return new AndroidThemePreviewPanelFixture(robot(), robot().finder()
.findByType(this.target().getFirstComponent(), AndroidThemePreviewPanel.class));
}
@NotNull
public List<String> getThemesList() {
return ImmutableList.copyOf(myThemesComboBox.contents());
}
@NotNull
public List<String> getModulesList() {
return ImmutableList.copyOf(myModulesComboBox.contents());
}
public void waitForThemeSelection(@NotNull final String themeName) {
pause(new Condition("Waiting for " + themeName + " to be selected") {
@Override
public boolean test() {
return themeName.equals(myThemesComboBox.selectedItem());
}
}, GuiTests.SHORT_TIMEOUT);
}
@NotNull
public JButton findToolbarButton(@NotNull final String tooltip) {
return waitUntilFound(robot(), new GenericTypeMatcher<JButton>(JButton.class) {
@Override
protected boolean isMatching(@NotNull JButton button) {
return tooltip.equals(button.getToolTipText());
}
});
}
@Nullable
private Configuration getConfiguration() {
return getThemePreviewPanel().target().getConfiguration();
}
@NotNull
public ThemeEditorFixture requireDevice(@NotNull String id) {
Configuration configuration = getConfiguration();
assertNotNull(configuration);
Device device = configuration.getDevice();
assertNotNull(device);
assertEquals(id, device.getId());
return this;
}
@NotNull
public ThemeEditorFixture requireApi(int apiLevel) {
Configuration configuration = getConfiguration();
assertNotNull(configuration);
IAndroidTarget androidTarget = configuration.getTarget();
assertNotNull(androidTarget);
assertEquals(apiLevel, androidTarget.getVersion().getApiLevel());
return this;
}
}