package pl.matisoft.soy.template;
import java.net.URL;
import java.util.Collection;
import java.util.Iterator;
import com.google.common.base.Optional;
import org.junit.Assert;
import org.junit.Test;
import org.springframework.core.io.ClassPathResource;
/**
* Created with IntelliJ IDEA.
* User: mszczap
* Date: 17.10.13
* Time: 23:35
*/
public class DefaultTemplateFilesResolverTest {
private DefaultTemplateFilesResolver defaultTemplateFilesResolver = new DefaultTemplateFilesResolver();
@Test
public void defaultDebugFlag() throws Exception {
Assert.assertFalse("debug flag should be off", defaultTemplateFilesResolver.isHotReloadMode());
}
@Test
public void setDebugFlag() throws Exception {
defaultTemplateFilesResolver.setHotReloadMode(true);
Assert.assertTrue("debug flag should be on", defaultTemplateFilesResolver.isHotReloadMode());
}
@Test
public void defaultRecursive() throws Exception {
Assert.assertTrue("recursive template file resolution should be on", defaultTemplateFilesResolver.isRecursive());
}
@Test
public void setRecursive() throws Exception {
defaultTemplateFilesResolver.setRecursive(false);
Assert.assertFalse("recursive template file resolution should be off", defaultTemplateFilesResolver.isRecursive());
}
@Test
public void cacheShouldBeEmpty() throws Exception {
Assert.assertTrue("cache should be empty from beginning", defaultTemplateFilesResolver.cachedFiles.isEmpty());
}
@Test
public void defaultTemplateLocation() throws Exception {
Assert.assertNull("template file location should be null", defaultTemplateFilesResolver.getTemplatesLocation());
}
@Test
public void resolveDebugOff() throws Exception {
defaultTemplateFilesResolver.setTemplatesLocation(new ClassPathResource("templates", getClass().getClassLoader()));
defaultTemplateFilesResolver.setRecursive(false);
final Collection<URL> urls = defaultTemplateFilesResolver.resolve();
Assert.assertEquals("should resolve urls", 3, urls.size());
final Iterator<URL> it = urls.iterator();
final URL template1Url = it.next();
final URL template2Url = it.next();
final URL template3Url = it.next();
Assert.assertTrue("template1Url file should end with template1.soy", template1Url.getFile().endsWith("template1.soy"));
Assert.assertTrue("template2Url file should end with template2.soy", template2Url.getFile().endsWith("template2.soy"));
Assert.assertTrue("template3Url file should end with template3.soy", template3Url.getFile().endsWith("template3.soy"));
}
@Test
public void resolveWithFullTemplateNameDebugOff() throws Exception {
defaultTemplateFilesResolver.setTemplatesLocation(new ClassPathResource("templates", getClass().getClassLoader()));
final Optional<URL> url = defaultTemplateFilesResolver.resolve("templates/template1");
Assert.assertTrue("should be present", url.isPresent());
Assert.assertTrue("template1Url file should end with template1.soy:" + url, url.get().getFile().endsWith("template1.soy"));
}
@Test
public void resolveWithTemplateNameDebugOff() throws Exception {
defaultTemplateFilesResolver.setTemplatesLocation(new ClassPathResource("templates", getClass().getClassLoader()));
final Optional<URL> url = defaultTemplateFilesResolver.resolve("template1");
Assert.assertTrue("should be present", url.isPresent());
Assert.assertTrue("template1Url file should end with template1.soy", url.get().getFile().endsWith("template1.soy"));
}
@Test
public void resolveWithFullTemplateNameExtDebugOff() throws Exception {
defaultTemplateFilesResolver.setTemplatesLocation(new ClassPathResource("templates", getClass().getClassLoader()));
final Optional<URL> url = defaultTemplateFilesResolver.resolve("templates/template1.soy");
Assert.assertTrue("should be present", url.isPresent());
Assert.assertTrue("template1Url file should end with template1.soy", url.get().getFile().endsWith("template1.soy"));
}
@Test
public void resolveWithTemplateNameExtDebugOff() throws Exception {
defaultTemplateFilesResolver.setTemplatesLocation(new ClassPathResource("templates", getClass().getClassLoader()));
final Optional<URL> url = defaultTemplateFilesResolver.resolve("template1.soy");
Assert.assertTrue("should be present", url.isPresent());
Assert.assertTrue("template1Url file should end with template1.soy", url.get().getFile().endsWith("template1.soy"));
}
@Test
public void resolveWithFullTemplateNameExtDebugOffShouldNotWork() throws Exception {
defaultTemplateFilesResolver.setTemplatesLocation(new ClassPathResource("templates", getClass().getClassLoader()));
final Optional<URL> url = defaultTemplateFilesResolver.resolve("tmpl/template1.soy");
Assert.assertFalse("should be absent", url.isPresent());
}
@Test
public void cacheDisabledWithDebugOn() throws Exception {
defaultTemplateFilesResolver.setTemplatesLocation(new ClassPathResource("templates", getClass().getClassLoader()));
defaultTemplateFilesResolver.setHotReloadMode(true);
defaultTemplateFilesResolver.resolve("template1");
Assert.assertTrue("cache should be empty", defaultTemplateFilesResolver.cachedFiles.isEmpty());
}
@Test
public void cacheDisabledByDefault() throws Exception {
defaultTemplateFilesResolver.setTemplatesLocation(new ClassPathResource("templates", getClass().getClassLoader()));
defaultTemplateFilesResolver.resolve("template1");
Assert.assertFalse("cache should not be empty", defaultTemplateFilesResolver.cachedFiles.isEmpty());
}
@Test
public void cacheEnabledWithDebugOff() throws Exception {
defaultTemplateFilesResolver.setTemplatesLocation(new ClassPathResource("templates", getClass().getClassLoader()));
defaultTemplateFilesResolver.resolve("template1");
Assert.assertFalse("cache should not be empty", defaultTemplateFilesResolver.cachedFiles.isEmpty());
Assert.assertEquals("cache should not equal 5", 5, defaultTemplateFilesResolver.cachedFiles.size());
}
}