package org.jooby.assets;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import java.util.Arrays;
import org.jooby.MediaType;
import org.junit.Test;
import com.typesafe.config.ConfigFactory;
import com.typesafe.config.ConfigValueFactory;
public class PropsTest {
@Test
public void matches() throws Exception {
assertTrue(new Props().matches(MediaType.css));
assertTrue(new Props().matches(MediaType.js));
assertTrue(new Props().matches(MediaType.html));
}
@Test
public void props() throws Exception {
assertEquals("$.ajax(http://foo.com);",
new Props().process("/j.s", "$.ajax(${app.url});",
ConfigFactory
.empty().withValue("app.url", ConfigValueFactory.fromAnyRef("http://foo.com"))));
}
@Test
public void shouldSupportCustomDelimiters() throws Exception {
assertEquals("$.ajax(http://foo.com);",
new Props().set("delims", Arrays.asList("{{", "}}")).process("/j.s", "$.ajax({{app.url}});",
ConfigFactory
.empty().withValue("app.url", ConfigValueFactory.fromAnyRef("http://foo.com"))));
}
@Test
public void ignoreMissingProps() throws Exception {
assertEquals("$.ajax(${app.url});",
new Props()
.set("ignoreMissing", true)
.process("/j.s", "$.ajax(${app.url});", ConfigFactory.empty()));
}
@Test
public void missingProp() throws Exception {
try {
new Props().process("/j.s", "$.ajax(${cpath}/service);", ConfigFactory.empty());
fail();
} catch (AssetException ex) {
assertEquals("\t/j.s:1:8: Missing ${cpath} at 1:8",
ex.getMessage());
assertEquals("Missing ${cpath} at 1:8", ex.get());
}
try {
new Props().process("/j.s", "$.ajax(\n\n ${cpath}/service);", ConfigFactory.empty());
fail();
} catch (AssetException ex) {
assertEquals("\t/j.s:3:4: Missing ${cpath} at 3:4",
ex.getMessage());
assertEquals("Missing ${cpath} at 3:4", ex.get());
}
}
@Test
public void defaultErr() throws Exception {
try {
new Props().process("/j.s", null, ConfigFactory.empty());
fail();
} catch (AssetException ex) {
assertEquals("\t/j.s:-1:-1: Text is required.", ex.getMessage());
}
}
}