blob: ed88b5f72b927b6c6238958e369019aa2c22fc3d [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.npw;
import com.android.builder.model.SourceProvider;
import com.android.tools.idea.npw.AddAndroidActivityPath;
import com.android.tools.idea.npw.FormFactorUtils;
import com.android.tools.idea.npw.TemplateEntry;
import com.android.tools.idea.npw.TemplateParameterStep2;
import com.android.tools.idea.templates.TemplateMetadata;
import com.android.tools.idea.wizard.dynamic.DynamicWizard;
import com.android.tools.idea.wizard.dynamic.DynamicWizardPath;
import com.android.tools.idea.wizard.dynamic.ScopedStateStore;
import com.android.utils.XmlUtils;
import com.google.common.collect.ImmutableMap;
import com.intellij.openapi.Disposable;
import com.intellij.openapi.util.Disposer;
import com.intellij.testFramework.LightIdeaTestCase;
import org.jetbrains.annotations.NotNull;
import org.w3c.dom.Document;
import java.io.File;
import static com.android.tools.idea.npw.ParameterDefaultValueComputerTest.getParameterObject;
public final class TemplateParameterStep2Test extends LightIdeaTestCase {
private static final String METADATA_XML = "<?xml version=\"1.0\"?>\n" +
"<template\n" +
" format=\"4\"\n" +
" revision=\"2\"\n" +
" name=\"Android Manifest File\"\n" +
" description=\"Creates an Android Manifest XML File.\"\n" +
" >\n" +
"\n" +
" <category value=\"Other\" />\n" +
"\n" +
" <parameter\n" +
" id=\"p1\"\n" +
" name=\"p1 name\"\n" +
" type=\"boolean\"\n" +
" constraints=\"\"\n" +
" default=\"false\" />\n" +
"\n" +
" <parameter\n" +
" id=\"p2\"\n" +
" name=\"p2 name\"\n" +
" type=\"string\"\n" +
" constraints=\"\"\n" +
" default=\"Hello\" />\n" +
"\n" +
" <parameter\n" +
" id=\"p3\"\n" +
" name=\"p3 name\"\n" +
" type=\"string\"\n" +
" constraints=\"\"/>\n" +
"\n" +
" <parameter\n" +
" id=\"p4\"\n" +
" name=\"p4 name\"\n" +
" type=\"string\"\n" +
" suggest=\"${p2}, World\"/>\n" +
"\n" +
" <parameter\n" +
" id=\"p5\"\n" +
" name=\"p5 name\"\n" +
" type=\"string\"\n" +
" suggest=\"${p4}!\"/>\n" +
"\n" +
" <parameter\n" +
" id=\"p6\"\n" +
" name=\"p6 name\"\n" +
" type=\"boolean\"\n" +
" suggest=\"${(p1 = false)?c}\"/>\n" +
"\n" +
" <execute file=\"recipe.xml.ftl\" />\n" +
"\n" +
"</template>\n";
private TemplateMetadata myTemplateMetadata;
private TemplateParameterStep2 myStep;
public static TemplateParameterStep2 createTemplateParameterStepInWizard(@NotNull final TemplateMetadata templateMetadata,
@NotNull Disposable parentDisposable) {
final TemplateParameterStep2 step =
new TemplateParameterStep2(FormFactorUtils.FormFactor.MOBILE, ImmutableMap.<String, Object>of(), null,
AddAndroidActivityPath.KEY_PACKAGE_NAME, new SourceProvider[0]);
DynamicWizard dynamicWizard = new DynamicWizard(null, null, "Test Wizard") {
@Override
public void init() {
addPath(new DynamicWizardPath() {
@Override
protected void init() {
myState.put(AddAndroidActivityPath.KEY_SELECTED_TEMPLATE, new TemplateEntry(new File("/"), templateMetadata));
addStep(step);
}
@NotNull
@Override
public String getPathName() {
return "Test Path";
}
@Override
public boolean performFinishingActions() {
return false;
}
});
super.init();
}
@Override
protected String getWizardActionDescription() {
return "Test Wizard Completion";
}
@Override
public void performFinishingActions() {
// Do nothing
}
@NotNull
@Override
protected String getProgressTitle() {
return "dummy";
}
};
Disposer.register(parentDisposable, dynamicWizard.getDisposable());
dynamicWizard.init();
return step;
}
// project leak detected?
public void disabled_testRefreshParameterDefaults() {
myStep.updateStateWithDefaults(myTemplateMetadata.getParameters());
String parameterName = "p2";
ScopedStateStore.Key<?> p2Key = getKeyForParameter(parameterName);
assertEquals("Hello", myStep.myState.get(p2Key));
myStep.myState.unsafePut(p2Key, "Good-bye");
myStep.updateStateWithDefaults(myTemplateMetadata.getParameters());
assertEquals("Good-bye, World!", myStep.myState.get(getKeyForParameter("p5")));
myStep.myState.unsafePut(p2Key, "Good morning");
myStep.updateStateWithDefaults(myTemplateMetadata.getParameters());
assertEquals("Good morning, World!", myStep.myState.get(getKeyForParameter("p5")));
}
private ScopedStateStore.Key<?> getKeyForParameter(String parameterName) {
return myStep.getParameterKey(getParameterObject(myTemplateMetadata, parameterName));
}
@Override
protected void setUp() throws Exception {
super.setUp();
Document document = XmlUtils.parseDocumentSilently(METADATA_XML, false);
assert document != null;
myTemplateMetadata = new TemplateMetadata(document);
myStep = createTemplateParameterStepInWizard(myTemplateMetadata, getTestRootDisposable());
}
}