blob: 164bb855abc109ceeff65d22c489b1df7bae0c83 [file] [log] [blame]
/*
* Copyright 2000-2010 JetBrains s.r.o.
*
* 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.intellij.lang.ant;
import com.intellij.lang.ant.dom.PropertiesProvider;
import com.intellij.lang.ant.dom.PropertyExpander;
import com.intellij.psi.PsiElement;
import junit.framework.TestCase;
import org.jetbrains.annotations.NotNull;
import java.util.Collections;
import java.util.Iterator;
import java.util.Map;
/**
* @author Eugene Zhuravlev
* Date: Apr 23, 2010
*/
public class AntPropertyExpansionTest extends TestCase{
public void testPropertyExpand() {
//<property name="a" value="aValue"/>
//<property name="b" value="${a}bValue"/>
//<property name="c" value="${d}cValue"/>
//<property name="d" value="dValue"/>
PropertiesProvider[] providers = new PropertiesProvider[] {
new PropertiesProviderImpl("a", "aValue"),
new PropertiesProviderImpl("b", "${a}bValue"),
new PropertiesProviderImpl("c", "${d}cValue"),
new PropertiesProviderImpl("d", "dValue"),
};
assertEquals("abc", expand(providers, "abc"));
assertEquals("aValue", expand(providers, "${a}"));
assertEquals("aValuebValue", expand(providers, "${b}"));
assertEquals("${d}cValue", expand(providers, "${c}"));
assertEquals("dValue", expand(providers, "${d}"));
assertEquals("${d}cValuedValue", expand(providers, "${c}${d}"));
PropertiesProvider[] providers2 = new PropertiesProvider[] {
new PropertiesProviderImpl("loop.me1", "prefix-${loop.me2}"),
new PropertiesProviderImpl("loop.me2", "prefix-${loop.me1}"),
new PropertiesProviderImpl("loop.me3", "prefix-${loop.me3}"),
new PropertiesProviderImpl("aaa", "aaa_val_${bbb}"),
new PropertiesProviderImpl("bbb", "bbb_val"),
new PropertiesProviderImpl("ccc", "${aaa}_${bbb}"),
};
assertEquals("prefix-${loop.me2}", expand(providers2, "${loop.me1}"));
assertEquals("prefix-prefix-${loop.me2}", expand(providers2, "${loop.me2}"));
assertEquals("prefix-${loop.me3}", expand(providers2, "${loop.me3}"));
assertEquals("aaa_val_${bbb}_bbb_val", expand(providers2, "${ccc}"));
}
private static String expand(PropertiesProvider[] providers, String str) {
PropertyExpander expander = new PropertyExpander(str);
if (expander.hasPropertiesToExpand()) {
for (PropertiesProvider provider : providers) {
expander.acceptProvider(provider);
if (!expander.hasPropertiesToExpand()) {
break;
}
}
}
return expander.getResult();
}
private static final class PropertiesProviderImpl implements PropertiesProvider{
private final Map<String, String> myMap;
PropertiesProviderImpl(String name, String value) {
this(Collections.singletonMap(name, value));
}
PropertiesProviderImpl(Map<String, String> map) {
myMap = map;
}
@Override
@NotNull
public Iterator<String> getNamesIterator() {
return myMap.keySet().iterator();
}
@Override
public String getPropertyValue(String propertyName) {
return myMap.get(propertyName);
}
@Override
public PsiElement getNavigationElement(String propertyName) {
return null;
}
}
}