blob: dade8d18e8abc40aa7fc1d95b1ff885e0e050fb9 [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.wizard.dynamic;
import icons.AndroidIcons;
import junit.framework.TestCase;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import javax.swing.*;
import java.awt.*;
import java.util.HashSet;
import java.util.Set;
/**
* Tests for {@link DynamicWizardStep}
*/
public class DynamicWizardStepTest extends TestCase {
private DummyDynamicWizardStep myStep;
@Override
public void setUp() throws Exception {
super.setUp();
myStep = new DummyDynamicWizardStep("TestStep");
myStep.onEnterStep();
}
public void testUpdateModelFromUI() throws Exception {
}
public void testCanGoNext() throws Exception {
assertTrue(myStep.canGoNext());
myStep.myState.put(myStep.INPUT_KEY, "");
myStep.myState.put(myStep.DERIVED_KEY, "not valid");
// Update should have been invoked automatically, thus invalidating the step
assertFalse(myStep.canGoNext());
// Test inserting value into the state
myStep.myState.put(myStep.INPUT_KEY, "Hello again");
assertTrue(myStep.canGoNext());
// Return to not valid
myStep.myState.put(myStep.DERIVED_KEY, "not valid");
assertFalse(myStep.canGoNext());
myStep.myInputField.setText("Hello once more");
// Update and deriver should have fired here
assertTrue(myStep.canGoNext());
}
public void testVisibility() throws Exception {
assertTrue(myStep.isStepVisible());
myStep.myState.put(myStep.VISIBLE_KEY, false);
assertFalse(myStep.isStepVisible());
myStep.myState.put(myStep.VISIBLE_KEY, true);
assertTrue(myStep.isStepVisible());
}
public void testCanGoPrev() throws Exception {
assertTrue(myStep.canGoPrevious());
}
public void testSetErrorHtml() throws Exception {
myStep.setErrorHtml("Testing");
assertEquals("<html>Testing</html>", myStep.getMessageLabel().getText());
myStep.setErrorHtml("<html><h1>Testing</h1></html>");
assertEquals("<html><h1>Testing</h1></html>", myStep.getMessageLabel().getText());
}
public static class DummyDynamicWizardStep extends DynamicWizardStep {
protected final ScopedStateStore.Key<String> INPUT_KEY;
protected final ScopedStateStore.Key<Boolean> VISIBLE_KEY;
protected final ScopedStateStore.Key<String> DERIVED_KEY;
protected final ScopedStateStore.Key<Boolean> VALID_KEY;
private JLabel myMessageLabel = new JLabel("Messages Go Here");
private JPanel myPanel = new JPanel(new BorderLayout(5, 5));
private JTextField myInputField = new JTextField();
private String myName;
private JTextField myDerivedField = new JTextField();
public DummyDynamicWizardStep(@NotNull String name) {
myName = name;
INPUT_KEY = myState.createKey(getStepName() + ":inputValue", String.class);
DERIVED_KEY = myState.createKey(getStepName() + ":derivedValue", String.class);
VISIBLE_KEY = myState.createKey(getStepName() + ":isVisible", Boolean.class);
VALID_KEY = myState.createKey(getStepName() + ":isValid", Boolean.class);
}
@Override
public void init() {
JPanel mySecondPanel = new JPanel();
mySecondPanel.add(myInputField);
mySecondPanel.add(myDerivedField);
myDerivedField.setEditable(false);
myInputField.setPreferredSize(new Dimension(300, 30));
myDerivedField.setPreferredSize(new Dimension(300, 30));
myPanel.add(mySecondPanel, BorderLayout.CENTER);
myPanel.add(myMessageLabel, BorderLayout.SOUTH);
myMessageLabel.setText("Hello World!");
register(INPUT_KEY, myInputField);
register(DERIVED_KEY, myDerivedField);
myState.remove(INPUT_KEY);
registerValueDeriver(DERIVED_KEY, new ValueDeriver<String>() {
@Nullable
@Override
public Set<ScopedStateStore.Key<?>> getTriggerKeys() {
Set<ScopedStateStore.Key<?>> filterKeys = new HashSet<ScopedStateStore.Key<?>>(1);
filterKeys.add(INPUT_KEY);
return filterKeys;
}
@NotNull
@Override
public String deriveValue(@NotNull ScopedStateStore state, ScopedStateStore.Key changedKey, @Nullable String currentValue) {
return state.get(INPUT_KEY) + "_derived!";
}
});
}
@Nullable
@Override
public Icon getIcon() {
return AndroidIcons.Wizards.NewModuleSidePanel;
}
@Override
public boolean isStepVisible() {
Boolean visible = myState.get(VISIBLE_KEY);
return visible == null || visible;
}
@Override
public boolean validate() {
String inputString = myState.get(INPUT_KEY);
String derivedString = myState.get(DERIVED_KEY);
Boolean validBool = myState.get(VALID_KEY);
if (inputString != null) {
return derivedString != null && derivedString.equals(inputString + "_derived!");
} else {
return validBool == null || validBool;
}
}
@NotNull
@Override
public JComponent createStepBody() {
return myPanel;
}
@Override
public JComponent getPreferredFocusedComponent() {
return myInputField;
}
@NotNull
@Override
public JLabel getMessageLabel() {
return myMessageLabel;
}
@NotNull
@Override
public String getStepName() {
return myName;
}
@NotNull
@Override
protected String getStepTitle() {
return getStepName();
}
@Nullable
@Override
protected String getStepDescription() {
return null;
}
}
}