package org.jenkinsci.plugins.xunit.service; import com.google.inject.AbstractModule; import com.google.inject.Guice; import com.google.inject.Singleton; import hudson.Util; import hudson.model.TaskListener; import org.jenkinsci.lib.dtkit.descriptor.TestTypeDescriptor; import org.jenkinsci.lib.dtkit.model.InputMetricType; import org.jenkinsci.lib.dtkit.model.InputMetricXSL; import org.jenkinsci.lib.dtkit.model.InputType; import org.jenkinsci.lib.dtkit.model.OutputMetric; import org.jenkinsci.lib.dtkit.type.TestType; import org.jenkinsci.plugins.xunit.types.model.JUnitModel; import org.junit.Assert; import org.junit.BeforeClass; import org.junit.Test; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.IOException; import java.io.PrintStream; import java.util.List; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; public class XUnitReportProcessorServiceTest { private static XUnitReportProcessorService xUnitReportProcessorService; public static class MyInputMetric extends InputMetricXSL { @Override public String getToolName() { return "testTool"; } @Override public String getToolVersion() { return "testVersion"; } @Override public InputMetricType getInputMetricType() { return InputMetricType.XSL; } @Override public InputType getToolType() { return InputType.TEST; } @Override public String getXslName() { return null; } @Override public String[] getInputXsdNameList() { return null; } @Override public OutputMetric getOutputFormatType() { return JUnitModel.LATEST; } } public static class MyTestTypeDescriptor extends TestTypeDescriptor<MyTestType> { public MyTestTypeDescriptor() { super(MyTestType.class, MyInputMetric.class); } public String getId() { return MyInputMetric.class.toString(); } } public static class MyTestType extends TestType { public MyTestType(String pattern, boolean faildedIfNotNew, boolean deleteOutputFiles) { super(pattern, faildedIfNotNew, deleteOutputFiles); } public TestTypeDescriptor<? extends TestType> getDescriptor() { return new MyTestTypeDescriptor(); } } @BeforeClass public static void init() { final TaskListener listenerMock = mock(TaskListener.class); when(listenerMock.getLogger()).thenReturn(new PrintStream(new ByteArrayOutputStream())); xUnitReportProcessorService = Guice.createInjector(new AbstractModule() { @Override protected void configure() { bind(XUnitLog.class).in(Singleton.class); bind(TaskListener.class).toInstance(listenerMock); } }).getInstance(XUnitReportProcessorService.class); } @Test public void isEmptyPattern() { Assert.assertTrue(xUnitReportProcessorService.isEmptyPattern(null)); Assert.assertTrue(xUnitReportProcessorService.isEmptyPattern("")); Assert.assertFalse(xUnitReportProcessorService.isEmptyPattern("abc")); } @Test @SuppressWarnings("ResultOfMethodCallIgnored") public void findReportsOneFile() throws IOException { File dir = Util.createTempDir(); File f1 = new File(dir, "a.txt"); try { f1.createNewFile(); XUnitToolInfo xUnitToolInfoMock = mock(XUnitToolInfo.class); when(xUnitToolInfoMock.getInputMetric()).thenReturn(new MyInputMetric()); List<String> xUnitFiles = xUnitReportProcessorService.findReports(xUnitToolInfoMock, dir, "*.txt"); Assert.assertFalse(xUnitFiles.isEmpty()); Assert.assertEquals(1, xUnitFiles.size()); Assert.assertEquals(f1.getName(), xUnitFiles.get(0)); } finally { f1.delete(); dir.delete(); } } }