/** * Creates XML logger. * @param task the task to possibly log to * @return an XMLLogger instance * @throws IOException if an error occurs */ private AuditListener createXmlLogger(Task task) throws IOException { final AuditListener xmlLogger; if (toFile == null || !useFile) { xmlLogger = new XMLLogger(new LogOutputStream(task, Project.MSG_INFO), AutomaticBean.OutputStreamOptions.CLOSE); } else { xmlLogger = new XMLLogger(Files.newOutputStream(toFile.toPath()), AutomaticBean.OutputStreamOptions.CLOSE); } return xmlLogger; }
/** * Returns a new AuditListener for this OutputFormat. * @param out the output stream * @param options the output stream options * @return a new AuditListener for this OutputFormat */ public AuditListener createListener(OutputStream out, AutomaticBean.OutputStreamOptions options) { final AuditListener result; if (this == XML) { result = new XMLLogger(out, options); } else { result = new DefaultLogger(out, options); } return result; }
@Test public void testNullOutputStreamOptions() { try { final XMLLogger logger = new XMLLogger(outStream, null); // assert required to calm down eclipse's 'The allocated object is never used' violation assertNotNull("Null instance", logger); fail("Exception was expected"); } catch (IllegalArgumentException exception) { assertEquals("Invalid error message", "Parameter outputStreamOptions can not be null", exception.getMessage()); } }
@Test public void testFinishLocalSetup() { final XMLLogger logger = new XMLLogger(outStream, true); logger.finishLocalSetup(); logger.auditStarted(null); logger.auditFinished(null); assertNotNull("instance should not be null", logger); }
@Test public void testXmlLoggerClosesItStreams() throws Exception { final Checker checker = new Checker(); try (CloseAndFlushTestByteArrayOutputStream testInfoOutputStream = new CloseAndFlushTestByteArrayOutputStream()) { checker.setModuleClassLoader(Thread.currentThread().getContextClassLoader()); checker.addListener(new XMLLogger(testInfoOutputStream, true)); final File tmpFile = temporaryFolder.newFile("file.java"); final String[] expected = CommonUtil.EMPTY_STRING_ARRAY; verify(checker, tmpFile.getPath(), tmpFile.getPath(), expected); assertEquals("Close count was not expected", 1, testInfoOutputStream.getCloseCount()); assertEquals("Flush count was not expected", 0, testInfoOutputStream.getFlushCount()); } }
@Test public void testAddException() throws Exception { final XMLLogger logger = new XMLLogger(outStream, OutputStreamOptions.CLOSE); logger.auditStarted(null); final LocalizedMessage message = new LocalizedMessage(1, 1, "messages.properties", null, null, null, getClass(), null); final AuditEvent ev = new AuditEvent(this, "Test.java", message); logger.addException(ev, new TestException("msg", new RuntimeException("msg"))); logger.auditFinished(null); verifyXml(getPath("ExpectedXMLLoggerException.xml"), outStream); assertEquals("Invalid close count", 1, outStream.getCloseCount()); }
@Test public void testAddExceptionWithNullFileName() throws Exception { final XMLLogger logger = new XMLLogger(outStream, true); logger.auditStarted(null); final LocalizedMessage message = new LocalizedMessage(1, 1, "messages.properties", null, null, null, getClass(), null); final AuditEvent ev = new AuditEvent(this, null, message); logger.addException(ev, new TestException("msg", new RuntimeException("msg"))); logger.auditFinished(null); verifyXml(getPath("ExpectedXMLLoggerExceptionNullFileName.xml"), outStream); assertEquals("Invalid close count", 1, outStream.getCloseCount()); }
@Test public void testAddIgnored() throws Exception { final XMLLogger logger = new XMLLogger(outStream, true); logger.auditStarted(null); final LocalizedMessage message = new LocalizedMessage(1, 1, "messages.properties", "key", null, SeverityLevel.IGNORE, null, getClass(), null); final AuditEvent ev = new AuditEvent(this, "Test.java", message); logger.addError(ev); logger.auditFinished(null); verifyXml(getPath("ExpectedXMLLoggerEmpty.xml"), outStream); }
@Test public void testFileFinished() throws Exception { final XMLLogger logger = new XMLLogger(outStream, true); logger.auditStarted(null); final AuditEvent ev = new AuditEvent(this, "Test.java"); logger.fileFinished(ev); logger.auditFinished(null); verifyXml(getPath("ExpectedXMLLogger.xml"), outStream); }
@Test public void testAddErrorModuleId() throws Exception { final XMLLogger logger = new XMLLogger(outStream, true); logger.auditStarted(null); final LocalizedMessage message = new LocalizedMessage(1, 1, "messages.properties", "key", null, SeverityLevel.ERROR, "module", getClass(), null); final AuditEvent ev = new AuditEvent(this, "Test.java", message); logger.addError(ev); logger.auditFinished(null); verifyXml(getPath("ExpectedXMLLoggerErrorModuleId.xml"), outStream, message.getMessage()); }
@Test public void testAddExceptionBeforeFileFinished() throws Exception { final XMLLogger logger = new XMLLogger(outStream, true); logger.auditStarted(null); final LocalizedMessage message = new LocalizedMessage(1, 1, "messages.properties", null, null, null, getClass(), null); final AuditEvent ev = new AuditEvent(this, "Test.java", message); logger.addException(ev, new TestException("msg", new RuntimeException("msg"))); final AuditEvent fileFinishedEvent = new AuditEvent(this, "Test.java"); logger.fileFinished(fileFinishedEvent); logger.auditFinished(null); verifyXml(getPath("ExpectedXMLLoggerException3.xml"), outStream); assertEquals("Invalid close count", 1, outStream.getCloseCount()); }
@Test public void testAddErrorWithNullFileName() throws Exception { final XMLLogger logger = new XMLLogger(outStream, true); logger.auditStarted(null); final LocalizedMessage message = new LocalizedMessage(1, 1, "messages.properties", "key", null, SeverityLevel.ERROR, null, getClass(), null); final AuditEvent ev = new AuditEvent(this, null, message); logger.addError(ev); logger.auditFinished(null); verifyXml(getPath("ExpectedXMLLoggerErrorNullFileName.xml"), outStream, message.getMessage()); }
@Test public void testCloseStream() throws Exception { final XMLLogger logger = new XMLLogger(outStream, AutomaticBean.OutputStreamOptions.CLOSE); logger.auditStarted(null); logger.auditFinished(null); assertEquals("Invalid close count", 1, outStream.getCloseCount()); verifyXml(getPath("ExpectedXMLLoggerEmpty.xml"), outStream); }
@Test public void testAddExceptionAfterFileStarted() throws Exception { final XMLLogger logger = new XMLLogger(outStream, true); logger.auditStarted(null); final AuditEvent fileStartedEvent = new AuditEvent(this, "Test.java"); logger.fileStarted(fileStartedEvent); final LocalizedMessage message = new LocalizedMessage(1, 1, "messages.properties", null, null, null, getClass(), null); final AuditEvent ev = new AuditEvent(this, "Test.java", message); logger.addException(ev, new TestException("msg", new RuntimeException("msg"))); logger.fileFinished(ev); logger.auditFinished(null); verifyXml(getPath("ExpectedXMLLoggerException2.xml"), outStream); assertEquals("Invalid close count", 1, outStream.getCloseCount()); }
@Test public void testFileStarted() throws Exception { final XMLLogger logger = new XMLLogger(outStream, true); logger.auditStarted(null); final AuditEvent ev = new AuditEvent(this, "Test.java"); logger.fileStarted(ev); logger.fileFinished(ev); logger.auditFinished(null); verifyXml(getPath("ExpectedXMLLogger.xml"), outStream); }
@Test public void testAddExceptionBetweenFileStartedAndFinished() throws Exception { final XMLLogger logger = new XMLLogger(outStream, true); logger.auditStarted(null); final LocalizedMessage message = new LocalizedMessage(1, 1, "messages.properties", null, null, null, getClass(), null); final AuditEvent fileStartedEvent = new AuditEvent(this, "Test.java"); logger.fileStarted(fileStartedEvent); final AuditEvent ev = new AuditEvent(this, "Test.java", message); logger.addException(ev, new TestException("msg", new RuntimeException("msg"))); final AuditEvent fileFinishedEvent = new AuditEvent(this, "Test.java"); logger.fileFinished(fileFinishedEvent); logger.auditFinished(null); verifyXml(getPath("ExpectedXMLLoggerException2.xml"), outStream); assertEquals("Invalid close count", 1, outStream.getCloseCount()); }
@Test public void testNoCloseStream() throws Exception { final XMLLogger logger = new XMLLogger(outStream, AutomaticBean.OutputStreamOptions.NONE); logger.auditStarted(null); logger.auditFinished(null); assertEquals("Invalid close count", 0, outStream.getCloseCount()); outStream.close(); verifyXml(getPath("ExpectedXMLLoggerEmpty.xml"), outStream); }
@Test public void testAddError() throws Exception { final XMLLogger logger = new XMLLogger(outStream, true); logger.auditStarted(null); final LocalizedMessage message = new LocalizedMessage(1, 1, "messages.properties", "key", null, SeverityLevel.ERROR, null, getClass(), null); final AuditEvent ev = new AuditEvent(this, "Test.java", message); logger.fileStarted(ev); logger.addError(ev); logger.fileFinished(ev); logger.auditFinished(null); verifyXml(getPath("ExpectedXMLLoggerError.xml"), outStream, message.getMessage()); }
@Test public void testAddErrorOnZeroColumns() throws Exception { final XMLLogger logger = new XMLLogger(outStream, true); logger.auditStarted(null); final LocalizedMessage message = new LocalizedMessage(1, 0, "messages.properties", "key", null, SeverityLevel.ERROR, null, getClass(), null); final AuditEvent ev = new AuditEvent(this, "Test.java", message); logger.fileStarted(ev); logger.addError(ev); logger.fileFinished(ev); logger.auditFinished(null); verifyXml(getPath("ExpectedXMLLoggerErrorZeroColumn.xml"), outStream, message.getMessage()); }
@Test public void testAuditFinishedWithoutFileFinished() throws Exception { final XMLLogger logger = new XMLLogger(outStream, true); logger.auditStarted(null); final AuditEvent fileStartedEvent = new AuditEvent(this, "Test.java"); logger.fileStarted(fileStartedEvent); final LocalizedMessage message = new LocalizedMessage(1, 1, "messages.properties", "key", null, SeverityLevel.ERROR, null, getClass(), null); final AuditEvent errorEvent = new AuditEvent(this, "Test.java", message); logger.addError(errorEvent); logger.fileFinished(errorEvent); logger.auditFinished(null); verifyXml(getPath("ExpectedXMLLoggerError.xml"), outStream, message.getMessage()); }