/*******************************************************************************
* Copyright (c) 2009, 2017 xored software, Inc. and others.
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* xored software, Inc. - initial API and Implementation (Alex Panchenko)
*******************************************************************************/
package org.eclipse.dltk.tcl.core.tests;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNull;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import org.eclipse.dltk.tcl.internal.core.packages.TclVariableResolver;
import org.eclipse.dltk.tcl.internal.core.packages.TclVariableResolver.SimpleVariableRegistry;
import org.junit.Test;
public class VariableResolverTests {
private static TclVariableResolver createResolver() {
return new TclVariableResolver(new SimpleVariableRegistry(
Collections.<String, Object> emptyMap()));
}
private static TclVariableResolver createResolver(String key,
Object value) {
return new TclVariableResolver(new SimpleVariableRegistry(
Collections.singletonMap(key, value)));
}
@Test
public void testNop() {
TclVariableResolver resolver = createResolver();
assertEquals(("a"), resolver.resolve("a"));
assertNull(resolver.resolve("$a"));
assertEquals(("${a"), resolver.resolve("${a"));
assertNull(resolver.resolve("${a}"));
assertNull(resolver.resolve("$a(alfa)"));
}
@Test
public void testSingle() {
TclVariableResolver resolver = createResolver("name", "NAME");
assertEquals(("NAME"), resolver.resolve("$name"));
assertEquals(("NAME"), resolver.resolve("${name}"));
}
@Test
public void testSingleMixed() {
TclVariableResolver resolver = createResolver("name", "NAME");
assertEquals(("/NAME/"), resolver.resolve("/$name/"));
assertEquals(("/NAME/"), resolver.resolve("/${name}/"));
}
@Test
public void testComplex() {
TclVariableResolver resolver = createResolver("name", "VERY_VERY_BIG");
assertEquals(("zaa/VERY_VERY_BIG/bbb"),
resolver.resolve("zaa/$name/bbb"));
}
@Test
public void testSmaller() {
TclVariableResolver resolver = createResolver("longVariable", "small");
assertEquals(("zaa/small/bbb"),
resolver.resolve("zaa/$longVariable/bbb"));
}
@Test
public void testEnvironmentResolve() {
Map<String, String> envValues = new HashMap<>();
Map<String, Object> variables = new HashMap<>();
envValues.put("mytest", "myvalue");
variables.put("env", envValues);
variables.put("gamma", "mytest");
variables.put("env(HOME)", "/home/dltk");
TclVariableResolver resolver = new TclVariableResolver(
new SimpleVariableRegistry(variables));
assertEquals("myvalue", resolver.resolve("$env(mytest)"));
assertEquals("myvalue", resolver.resolve("$env($gamma)"));
assertEquals("/home/dltk", resolver.resolve("$env(HOME)"));
assertNull(resolver.resolve("$env($alpha)"));
}
@Test
public void testNestedExpressions() {
Map<String, Object> variables = new HashMap<>();
variables.put("a", "$b");
variables.put("b", "YES");
TclVariableResolver resolver = new TclVariableResolver(
new SimpleVariableRegistry(variables));
assertEquals("YES", resolver.resolve("$a"));
}
@Test
public void testNestedCycle() {
Map<String, Object> variables = new HashMap<>();
variables.put("a", "$b");
variables.put("b", "$a");
TclVariableResolver resolver = new TclVariableResolver(
new SimpleVariableRegistry(variables));
assertNull(resolver.resolve("$a"));
}
}