/**
* Copyright Alex Objelean
*/
package ro.isdc.wro.maven.plugin;
import static org.junit.Assert.assertTrue;
import java.io.File;
import java.io.FileInputStream;
import java.net.URL;
import org.apache.commons.io.FileUtils;
import org.apache.maven.model.Build;
import org.apache.maven.model.Model;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.project.MavenProject;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.mockito.Mockito;
import ro.isdc.wro.extensions.support.lint.ReportXmlFormatter;
import ro.isdc.wro.extensions.support.lint.ReportXmlFormatter.FormatterType;
import ro.isdc.wro.util.WroTestUtils;
import ro.isdc.wro.util.WroUtil;
/**
* Test class for {@link CssHintMojo}
*
* @author Alex Objelean
*/
public class TestCssLintMojo {
private CssLintMojo mojo;
@Before
public void setUp()
throws Exception {
mojo = new CssLintMojo();
mojo.setIgnoreMissingResources(Boolean.FALSE.toString());
setWroWithValidResources();
mojo.setTargetGroups("g1");
MavenProject mockMavenProject = Mockito.mock(MavenProject.class);
Model mockMavenModel = Mockito.mock(Model.class);
Build mockBuild = Mockito.mock(Build.class);
Mockito.when(mockMavenProject.getModel()).thenReturn(mockMavenModel);
Mockito.when(mockMavenModel.getBuild()).thenReturn(mockBuild);
Mockito.when(mockBuild.getDirectory()).thenReturn(FileUtils.getTempDirectoryPath());
mojo.setMavenProject(mockMavenProject);
}
@After
public void tearDown() {
mojo.clean();
}
private void setWroFile(final String classpathResourceName)
throws Exception {
final URL url = getClass().getClassLoader().getResource(classpathResourceName);
final File wroFile = new File(url.toURI());
mojo.setWroFile(wroFile);
mojo.setContextFolder(wroFile.getParentFile().getParentFile().getPath());
}
private void setWroWithValidResources()
throws Exception {
setWroFile("wro.xml");
}
private void setWroWithInvalidResources()
throws Exception {
setWroFile("wroWithInvalidResources.xml");
}
@Test
public void testMojoWithPropertiesSet()
throws Exception {
mojo.setTargetGroups("valid");
mojo.setIgnoreMissingResources(Boolean.TRUE.toString());
mojo.execute();
}
@Test(expected = MojoExecutionException.class)
public void cannotExecuteWhenInvalidResourcesPresentAndDoNotIgnoreMissingResources()
throws Exception {
setWroWithInvalidResources();
mojo.execute();
}
@Test
public void testWroXmlWithInvalidResourcesAndIgnoreMissingResourcesTrue()
throws Exception {
setWroWithInvalidResources();
mojo.setIgnoreMissingResources(Boolean.TRUE.toString());
mojo.execute();
}
@Test(expected = MojoExecutionException.class)
public void testResourceWithErrors()
throws Exception {
mojo.setTargetGroups("invalid");
mojo.execute();
}
@Test
public void testErrorsWithNoFailFast()
throws Exception {
mojo.setFailNever(true);
mojo.setOptions("undef, browser");
mojo.setTargetGroups("undef");
mojo.execute();
}
@Test
public void shouldAnalyzeValidResources()
throws Exception {
mojo.setTargetGroups("valid");
mojo.execute();
}
@Test(expected = MojoExecutionException.class)
public void shouldAnalyzeInvalidResources()
throws Exception {
mojo.setTargetGroups("invalidResources");
mojo.execute();
}
@Test
public void shouldNotFailWhenAnalyzeInvalidResources()
throws Exception {
mojo.setFailNever(true);
mojo.setTargetGroups("invalidResources");
mojo.execute();
}
@Test
public void testEmptyOptions()
throws Exception {
mojo.setOptions("");
mojo.setTargetGroups("undef");
mojo.execute();
}
@Test
public void shouldAcceptValidReportFormat()
throws Exception {
runPluginWithReportFormat(ReportXmlFormatter.FormatterType.CHECKSTYLE.getFormat());
}
@Test(expected = MojoExecutionException.class)
public void shouldNotAcceptInvalidReportFormat()
throws Exception {
runPluginWithReportFormat("INVALID");
}
void runPluginWithReportFormat(final String format)
throws MojoExecutionException {
final File reportFile = WroUtil.createTempFile();
try {
mojo.setReportFile(reportFile);
mojo.setTargetGroups("valid");
mojo.setReportFormat(format);
mojo.execute();
} finally {
FileUtils.deleteQuietly(reportFile);
}
}
@Test
public void shouldGenerateXmlReportFileWithDefaultFormat()
throws Exception {
generateAndCompareReportUsingFormat(null, "csslint-default.xml");
}
@Test
public void shouldGenerateXmlReportFileWithCheckstyleFormat()
throws Exception {
generateAndCompareReportUsingFormat(FormatterType.CHECKSTYLE.getFormat(), "csslint-checkstyle.xml");
}
private void generateAndCompareReportUsingFormat(final String reportFormat, final String expectedReportFileName)
throws Exception {
final File reportFile = WroUtil.createTempFile();
try {
mojo.setReportFile(reportFile);
if (reportFormat != null) {
mojo.setReportFormat(reportFormat);
}
// mojo.setOptions("undef, browser");
mojo.setTargetGroups(null);
mojo.setFailNever(true);
mojo.setIgnoreMissingResources(Boolean.TRUE.toString());
mojo.execute();
} finally {
WroTestUtils.compare(getClass().getResourceAsStream("report/" + expectedReportFileName), new FileInputStream(
reportFile));
// Assert that file is big enough to prove that it contains serialized errors.
assertTrue(reportFile.length() > 1000);
FileUtils.deleteQuietly(reportFile);
}
}
}