diff --git a/src/tests/com/puppycrawl/tools/checkstyle/AllTests.java b/src/tests/com/puppycrawl/tools/checkstyle/AllTests.java index 24b56a88e..4d9a9b689 100644 --- a/src/tests/com/puppycrawl/tools/checkstyle/AllTests.java +++ b/src/tests/com/puppycrawl/tools/checkstyle/AllTests.java @@ -132,6 +132,7 @@ public class AllTests { suite.addTest(new TestSuite(VisibilityModifierCheckTest.class)); suite.addTest(new TestSuite(WhitespaceAfterCheckTest.class)); suite.addTest(new TestSuite(WhitespaceAroundTest.class)); + suite.addTest(new TestSuite(XMLLoggerTest.class)); //$JUnit-END$ return suite; } diff --git a/src/tests/com/puppycrawl/tools/checkstyle/XMLLoggerTest.java b/src/tests/com/puppycrawl/tools/checkstyle/XMLLoggerTest.java new file mode 100644 index 000000000..ba5d369bb --- /dev/null +++ b/src/tests/com/puppycrawl/tools/checkstyle/XMLLoggerTest.java @@ -0,0 +1,206 @@ +package com.puppycrawl.tools.checkstyle; + +import java.io.BufferedReader; +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.InputStreamReader; +import java.io.PrintWriter; +import java.io.StringWriter; +import java.util.ArrayList; +import java.util.EventObject; + +import com.puppycrawl.tools.checkstyle.api.LocalizedMessage; + +import junit.framework.TestCase; + +/** + * Enter a description of class XMLLoggerTest.java. + * @author Rick Giles + * @version 11-Dec-2002 + */ +public class XMLLoggerTest extends TestCase +{ + private ByteArrayOutputStream outStream; + + public void setUp() + throws Exception + { + outStream = new ByteArrayOutputStream(); + } + + public void testEncode() + throws IOException + { + final XMLLogger logger = new XMLLogger(outStream, false); + final String[][] encodings = { + {"<", "<"}, + {">", ">"}, + {"'", "'"}, + {"\"", """}, + {"&", "&"}, + {"<", "<"}, + {"abc;", "abc;"}, + }; + for (int i = 0; i < encodings.length; i++) { + final String encoded = logger.encode(encodings[i][0]); + assertEquals("\"" + encodings[i][0] + "\"", encodings[i][1], encoded); + } + outStream.close(); + } + + public void testIsReference() + throws IOException + { + final XMLLogger logger = new XMLLogger(outStream, false); + final String[] reference = { + "�", + "�", + }; + for (int i = 0; i < reference.length; i++) { + assertTrue("reference: " + reference[i], + logger.isReference(reference[i])); + } + final String[] noReference = { + "&", + "&;", + "&#;", + "&#a;", + "�", + "&#x;", + "&#xg;", + }; + for (int i = 0; i < noReference.length; i++) { + assertFalse("no reference: " + noReference[i], + logger.isReference(noReference[i])); + } + + outStream.close(); + } + + public void testCloseStream() + throws IOException + { + final XMLLogger logger = new XMLLogger(outStream, true); + logger.auditStarted(null); + logger.auditFinished(null); + final String[] expectedLines = {}; + verifyLines(expectedLines); + } + + public void testNoCloseStream() + throws IOException + { + final XMLLogger logger = new XMLLogger(outStream, false); + logger.auditStarted(null); + logger.auditFinished(null); + outStream.close(); + final String[] expectedLines = {}; + verifyLines(expectedLines); + } + + public void testFileStarted() + throws IOException + { + final XMLLogger logger = new XMLLogger(outStream, true); + logger.auditStarted(null); + final AuditEvent ev = new AuditEvent(this, "Test.java"); + logger.fileStarted(ev); + logger.auditFinished(null); + final String[] expectedLines = {""}; + verifyLines(expectedLines); + } + + public void testFileFinished() + throws IOException + { + final XMLLogger logger = new XMLLogger(outStream, true); + logger.auditStarted(null); + final AuditEvent ev = new AuditEvent(this, "Test.java"); + logger.fileFinished(ev); + logger.auditFinished(null); + final String[] expectedLines = {""}; + verifyLines(expectedLines); + } + + public void testAddError() + throws IOException + { + final XMLLogger logger = new XMLLogger(outStream, true); + logger.auditStarted(null); + final LocalizedMessage message = + new LocalizedMessage( 1, 1, "messages.properties", "key", null); + final AuditEvent ev = new AuditEvent(this, "Test.java", message); + logger.addError(ev); + logger.auditFinished(null); + final String[] expectedLines = + {""}; + verifyLines(expectedLines); + } + + public void testAddException() + throws IOException + { + final XMLLogger logger = new XMLLogger(outStream, true); + logger.auditStarted(null); + final LocalizedMessage message = + new LocalizedMessage( 1, 1, "messages.properties", null, null); + final AuditEvent ev = new AuditEvent(this, "Test.java", message); + logger.addException(ev, new TestThrowable()); + logger.auditFinished(null); + final String[] expectedLines = { + "<exception>", + "<![CDATA[", + "stackTrace]]>", + "</exception>", + "", + }; + verifyLines(expectedLines); + } + + private String[] getOutStreamLines() + throws IOException + { + final byte[] bytes = outStream.toByteArray(); + final ByteArrayInputStream inStream = + new ByteArrayInputStream(bytes); + final BufferedReader reader = + new BufferedReader(new InputStreamReader(inStream)); + final ArrayList lineList = new ArrayList(); + while (true) { + final String line = reader.readLine(); + if (line == null) { + break; + } + lineList.add(line); + } + reader.close(); + return (String[])lineList.toArray(new String[lineList.size()]); + } + + /** + * Verify output lines from auditStart to auditEnd. + * Take into consideration checkstyle element (first and last lines). + * @param strings + * @param lines + */ + private void verifyLines(String[] aExpectedLines) + throws IOException + { + final String[] lines = getOutStreamLines(); + assertEquals("length.", aExpectedLines.length + 2, lines.length); + assertEquals("first line.", "", lines[0]); + for (int i = 0; i < aExpectedLines.length; i++) { + assertEquals("line " + i + ".", aExpectedLines[i], lines[i + 1]); + } + assertEquals("last line.", "", lines[lines.length - 1]); + } + + private class TestThrowable extends Exception + { + public void printStackTrace(PrintWriter s) + { + s.print("stackTrace"); + } + } +}