package com.github.jknack.handlebars.maven; import static org.easymock.EasyMock.createMock; import static org.easymock.EasyMock.expect; import static org.easymock.EasyMock.replay; import static org.junit.Assert.assertEquals; import java.io.File; import java.io.IOException; import java.util.Set; import java.util.regex.Pattern; import org.apache.maven.artifact.DependencyResolutionRequiredException; import org.apache.maven.project.MavenProject; import org.codehaus.plexus.util.FileUtils; import org.junit.Test; import com.google.common.base.Splitter; import com.google.common.collect.Lists; import com.google.common.collect.Sets; public class I18nJsPluginTest { @Test public void i18nJsNoMerge() throws Exception { I18nJsPlugin plugin = new I18nJsPlugin(); plugin.setProject(newProject("src/test/resources")); plugin.setOutput("target"); plugin.execute(); assertEquals(tokens("src/test/resources/messages.expected.js"), tokens("target/messages.js")); assertEquals(tokens("src/test/resources/messages_es_AR.expected.js"), tokens("target/messages_es_AR.js")); FileUtils.copyFile(new File("target/messages.js"), new File("target/messages-tests.js")); } @Test public void i18nJsNoMergeDeepPath() throws Exception { I18nJsPlugin plugin = new I18nJsPlugin(); plugin.setProject(newProject("src/test/resources/")); plugin.setBundle("deep.path.deep"); plugin.setOutput("target"); plugin.execute(); assertEquals(FileUtils.fileRead("src/test/resources/deep.expected.js"), FileUtils.fileRead("target/deep.js")); } @Test public void i18nJsNoMergeAmd() throws Exception { I18nJsPlugin plugin = new I18nJsPlugin(); plugin.setProject(newProject("src/test/resources")); plugin.setOutput("target"); plugin.setAmd(true); plugin.execute(); assertEquals(tokens("src/test/resources/messages-amd.expected.js"), tokens("target/messages.js")); assertEquals(tokens("src/test/resources/messages_es_AR-amd.expected.js"), tokens("target/messages_es_AR.js")); } @Test public void i18nJsWithMerge() throws Exception { I18nJsPlugin plugin = new I18nJsPlugin(); plugin.setProject(newProject("src/test/resources")); plugin.setOutput("target"); plugin.setMerge(true); plugin.execute(); assertEquals(tokens("src/test/resources/messages-merged.js"), tokens("target/messages.js")); } @Test public void i18nJsWithMergeAmd() throws Exception { I18nJsPlugin plugin = new I18nJsPlugin(); plugin.setProject(newProject("src/test/resources")); plugin.setOutput("target"); plugin.setMerge(true); plugin.setAmd(true); plugin.execute(); assertEquals(tokens("src/test/resources/messages-merged-amd.js"), tokens("target/messages.js")); } private MavenProject newProject(final String... classpath) throws DependencyResolutionRequiredException { MavenProject project = createMock(MavenProject.class); expect(project.getRuntimeClasspathElements()).andReturn(Lists.newArrayList(classpath)); replay(project); return project; } /** * Matches on tokens and avoid errors between Java 6.x and Java 7.x. */ private Set<String> tokens(final String filename) throws IOException { String content = FileUtils.fileRead(filename); return Sets.newLinkedHashSet(Splitter.on(Pattern.compile("\\s|,")).split(content)); } }