package org.jooby;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.fail;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.NoSuchElementException;
import java.util.Optional;
import java.util.function.Function;
import org.junit.Test;
import com.google.common.collect.ImmutableMap;
import com.typesafe.config.Config;
import com.typesafe.config.ConfigFactory;
import com.typesafe.config.ConfigValueFactory;
import javaslang.control.Try.CheckedConsumer;
import javaslang.control.Try.CheckedRunnable;
public class EnvTest {
@Test
public void resolveOneAtMiddle() {
Config config = ConfigFactory.empty()
.withValue("contextPath", ConfigValueFactory.fromAnyRef("/myapp"));
Env env = Env.DEFAULT.build(config);
assertEquals("function ($) {$.ajax(\"/myapp/api\")}",
env.resolve("function ($) {$.ajax(\"${contextPath}/api\")}"));
}
@Test
public void resolveSingle() {
Config config = ConfigFactory.empty()
.withValue("var", ConfigValueFactory.fromAnyRef("foo.bar"));
Env env = Env.DEFAULT.build(config);
assertEquals("foo.bar", env.resolve("${var}"));
}
@Test
public void altplaceholder() {
Env env = Env.DEFAULT.build(ConfigFactory.empty()
.withValue("var", ConfigValueFactory.fromAnyRef("foo.bar")));
assertEquals("foo.bar", env.resolver().delimiters("{{", "}}").resolve("{{var}}"));
assertEquals("foo.bar", env.resolver().delimiters("<%", "%>").resolve("<%var%>"));
}
@Test
public void resolveHead() {
Config config = ConfigFactory.empty()
.withValue("var", ConfigValueFactory.fromAnyRef("foo.bar"));
Env env = Env.DEFAULT.build(config);
assertEquals("foo.bar-", env.resolve("${var}-"));
}
@Test
public void resolveTail() {
Config config = ConfigFactory.empty()
.withValue("var", ConfigValueFactory.fromAnyRef("foo.bar"));
Env env = Env.DEFAULT.build(config);
assertEquals("-foo.bar", env.resolve("-${var}"));
}
@Test
public void resolveMore() {
Config config = ConfigFactory.empty()
.withValue("var", ConfigValueFactory.fromAnyRef("foo.bar"));
Env env = Env.DEFAULT.build(config);
assertEquals("foo.bar - foo.bar", env.resolve("${var} - ${var}"));
}
@Test
public void resolveMap() {
Config config = ConfigFactory.empty();
Env env = Env.DEFAULT.build(config);
assertEquals("foo.bar - foo.bar", env.resolver().source(ImmutableMap.of("var", "foo.bar"))
.resolve("${var} - ${var}"));
}
@Test
public void resolveMapIgnore() {
Config config = ConfigFactory.empty();
Env env = Env.DEFAULT.build(config);
assertEquals("${varx} - ${varx}",
env.resolver().ignoreMissing().source(ImmutableMap.of("var", "foo.bar"))
.resolve("${varx} - ${varx}"));
}
@Test
public void resolveIgnoreMissing() {
Config config = ConfigFactory.empty();
Env env = Env.DEFAULT.build(config);
assertEquals("${var} - ${var}", env.resolver().ignoreMissing().resolve("${var} - ${var}"));
assertEquals(" - ${foo.var} -", env.resolver().ignoreMissing().resolve(" - ${foo.var} -"));
}
@Test
public void novars() {
Config config = ConfigFactory.empty()
.withValue("var", ConfigValueFactory.fromAnyRef("foo.bar"));
Env env = Env.DEFAULT.build(config);
assertEquals("var", env.resolve("var"));
}
@Test
public void serviceKey() {
Config config = ConfigFactory.empty()
.withValue("var", ConfigValueFactory.fromAnyRef("foo.bar"));
Env env = Env.DEFAULT.build(config);
assertNotNull(env.serviceKey());
assertNotNull(new Env() {
@Override
public LifeCycle onStart(final CheckedConsumer<Registry> task) {
return null;
}
@Override
public LifeCycle onStarted(final CheckedConsumer<Registry> task) {
return null;
}
@Override
public LifeCycle onStop(final CheckedConsumer<Registry> task) {
return null;
}
@Override
public Map<String, Function<String, String>> xss() {
return null;
}
@Override
public Env xss(final String name, final Function<String, String> escaper) {
return null;
}
@Override
public String name() {
return null;
}
@Override
public Router router() throws UnsupportedOperationException {
return null;
}
@Override
public Config config() {
return null;
}
@Override
public Locale locale() {
return null;
}
@Override
public List<CheckedConsumer<Registry>> startTasks() {
return null;
}
@Override
public List<CheckedConsumer<Registry>> startedTasks() {
return null;
}
@Override
public List<CheckedConsumer<Registry>> stopTasks() {
return null;
}
}.serviceKey());
}
@Test(expected = NullPointerException.class)
public void nullText() {
Env env = Env.DEFAULT.build(ConfigFactory.empty());
env.resolve(null);
}
@Test
public void unclosedDelimiterWithSpace() {
Env env = Env.DEFAULT.build(ConfigFactory.empty());
try {
env.resolve(env.resolve("function ($) {$.ajax(\"${contextPath /api\")"));
fail();
} catch (IllegalArgumentException ex) {
assertEquals("found '${' expecting '}' at 1:23", ex.getMessage());
}
}
@Test
public void unclosedDelimiter() {
Env env = Env.DEFAULT.build(ConfigFactory.empty());
try {
env.resolve(env.resolve("function ($) {$.ajax(\"${contextPath/api\")"));
fail();
} catch (IllegalArgumentException ex) {
assertEquals("found '${' expecting '}' at 1:23", ex.getMessage());
}
}
@Test
public void noSuchKey() {
Env env = Env.DEFAULT.build(ConfigFactory.empty());
try {
env.resolve(env.resolve("${key}"));
fail();
} catch (NoSuchElementException ex) {
assertEquals("Missing ${key} at 1:1", ex.getMessage());
}
try {
env.resolve(env.resolve(" ${key}"));
fail();
} catch (NoSuchElementException ex) {
assertEquals("Missing ${key} at 1:5", ex.getMessage());
}
try {
env.resolve(env.resolve(" \n ${key}"));
fail();
} catch (NoSuchElementException ex) {
assertEquals("Missing ${key} at 2:3", ex.getMessage());
}
try {
env.resolve(env.resolve(" \n ${key}"));
fail();
} catch (NoSuchElementException ex) {
assertEquals("Missing ${key} at 2:3", ex.getMessage());
}
try {
env.resolve(env.resolve(" \n \n ${key}"));
fail();
} catch (NoSuchElementException ex) {
assertEquals("Missing ${key} at 3:2", ex.getMessage());
}
}
@Test
public void resolveEmpty() {
Env env = Env.DEFAULT.build(ConfigFactory.empty());
assertEquals("", env.resolve(""));
}
@Test
public void ifMode() throws Throwable {
assertEquals("$dev",
Env.DEFAULT.build(ConfigFactory.empty()).ifMode("dev", () -> "$dev").get());
assertEquals(Optional.empty(),
Env.DEFAULT.build(ConfigFactory.empty()).ifMode("prod", () -> "$dev"));
assertEquals(
"$prod",
Env.DEFAULT
.build(
ConfigFactory.empty().withValue("application.env",
ConfigValueFactory.fromAnyRef("prod")))
.ifMode("prod", () -> "$prod").get());
assertEquals(Optional.empty(),
Env.DEFAULT
.build(
ConfigFactory.empty().withValue("application.env",
ConfigValueFactory.fromAnyRef("prod")))
.ifMode("dev", () -> "$prod"));
}
@Test
public void when() {
assertEquals("$dev", Env.DEFAULT.build(ConfigFactory.empty()).when("dev", () -> "$dev").get());
assertEquals("$dev", Env.DEFAULT.build(ConfigFactory.empty()).when("dev", "$dev").get());
assertEquals("$dev",
Env.DEFAULT.build(ConfigFactory.empty()).when((env) -> env.equals("dev"), "$dev").get());
}
@Test(expected = UnsupportedOperationException.class)
public void noRouter() {
Env.DEFAULT.build(ConfigFactory.empty()).router();
}
@Test
public void name() throws Exception {
assertEquals("dev", Env.DEFAULT.build(ConfigFactory.empty()).toString());
assertEquals("prod", Env.DEFAULT.build(ConfigFactory.empty().withValue("application.env",
ConfigValueFactory.fromAnyRef("prod"))).toString());
}
@Test
public void onStart() throws Exception {
Env env = Env.DEFAULT.build(ConfigFactory.empty());
CheckedRunnable task = () -> {
};
env.onStart(task);
assertEquals(1, env.startTasks().size());
}
@Test
public void onStop() throws Exception {
Env env = Env.DEFAULT.build(ConfigFactory.empty());
CheckedRunnable task = () -> {
};
env.onStop(task);
assertEquals(1, env.stopTasks().size());
}
}