FileDocCategorySizeDatePackage
HTMLLayoutTest.javaAPI DocApache log4j 1.2.157144Sat Aug 25 00:09:34 BST 2007org.apache.log4j

HTMLLayoutTest

public class HTMLLayoutTest extends LayoutTest
Test for HTMLLayout.
author
Curt Arnold

Fields Summary
Constructors Summary
public HTMLLayoutTest(String testName)
Construct new instance of XMLLayoutTest.

param
testName test name.

    super(testName, "text/html", false, null, null);
  
Methods Summary
protected org.apache.log4j.LayoutcreateLayout()

{inheritDoc}

    return new HTMLLayout();
  
private org.w3c.dom.Documentparse(java.lang.String source)
Parses the string as the body of an XML document and returns the document element.

param
source source string.
return
document element.
throws
Exception if parser can not be constructed or source is not a valid XML document.

    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
    factory.setNamespaceAware(false);
    factory.setCoalescing(true);

    DocumentBuilder builder = factory.newDocumentBuilder();
    Reader reader = new StringReader(source);

    return builder.parse(new InputSource(reader));
  
public voidtestActivateOptions()
Tests activateOptions().

    HTMLLayout layout = new HTMLLayout();
    layout.activateOptions();
  
public voidtestFormat()
Tests formatted results.

throws
Exception if unable to create parser or output is not valid XML.

    Logger logger = Logger.getLogger("org.apache.log4j.xml.HTMLLayoutTest");
    NDC.push("NDC goes here");

    LoggingEvent event =
      new LoggingEvent(
        "org.apache.log4j.Logger", logger, Level.INFO, "Hello, World", null);
    HTMLLayout layout = (HTMLLayout) createLayout();
    layout.setLocationInfo(true);

    String result = layout.format(event);
    NDC.pop();

    String src =
      "<!DOCTYPE body [ <!ENTITY nbsp ' '>]><body>" + result + "</body>";
    Document doc = parse(src);
  
public voidtestFormatResize()
Tests buffer downsizing and DEBUG and WARN colorization code paths.

    Logger logger = Logger.getLogger("org.apache.log4j.xml.HTMLLayoutTest");
    NDC.clear();

    char[] msg = new char[2000];

    for (int i = 0; i < msg.length; i++) {
      msg[i] = 'A";
    }

    LoggingEvent event1 =
      new LoggingEvent(
        "org.apache.log4j.Logger", logger, Level.DEBUG, new String(msg), null);
    HTMLLayout layout = (HTMLLayout) createLayout();
    layout.setLocationInfo(true);

    String result = layout.format(event1);
    Exception ex = new IllegalArgumentException("'foo' is not a valid value.");
    LoggingEvent event2 =
      new LoggingEvent(
        "org.apache.log4j.Logger", logger, Level.WARN, "Hello, World", ex);
    result = layout.format(event2);
    assertEquals(
      Layout.LINE_SEP + "<tr>",
      result.substring(0, Layout.LINE_SEP.length() + 4));
  
public voidtestGetFooter()
Tests getFooter.

    assertEquals("</table>", createLayout().getFooter().substring(0, 8));
  
public voidtestGetHeader()
Tests getHeader.

    assertEquals("<!DOCTYPE", createLayout().getHeader().substring(0, 9));
  
public voidtestGetHeaderWithLocation()
Tests getHeader with locationInfo = true.

    HTMLLayout layout = (HTMLLayout) createLayout();
    layout.setLocationInfo(true);
    assertEquals("<!DOCTYPE", layout.getHeader().substring(0, 9));
  
public voidtestGetSetLocationInfo()
Tests getLocationInfo and setLocationInfo.

    HTMLLayout layout = new HTMLLayout();
    assertEquals(false, layout.getLocationInfo());
    layout.setLocationInfo(true);
    assertEquals(true, layout.getLocationInfo());
    layout.setLocationInfo(false);
    assertEquals(false, layout.getLocationInfo());
  
public voidtestGetSetTitle()
Tests getTitle and setTitle.

    HTMLLayout layout = new HTMLLayout();
    assertEquals("Log4J Log Messages", layout.getTitle());
    layout.setTitle(null);
    assertNull(layout.getTitle());

    String newTitle = "A treatise on messages of log persuasion";
    layout.setTitle(newTitle);
    assertEquals(newTitle, layout.getTitle());
  
public voidtestProblemCharacters()
Tests problematic characters in multiple fields.

throws
Exception if parser can not be constructed or source is not a valid XML document.

      String problemName = "com.example.bar<>&\"'";
      Logger logger = Logger.getLogger(problemName);
      Level level = new ProblemLevel(problemName);
      Exception ex = new IllegalArgumentException(problemName);
      String threadName = Thread.currentThread().getName();
      Thread.currentThread().setName(problemName);
      NDC.push(problemName);
      Hashtable mdcMap = MDC.getContext();
      if (mdcMap != null) {
          mdcMap.clear();
      }
      MDC.put(problemName, problemName);
      LoggingEvent event =
        new LoggingEvent(
          problemName, logger, level, problemName, ex);
      HTMLLayout layout = (HTMLLayout) createLayout();
      String result = layout.format(event);
      mdcMap = MDC.getContext();
      if (mdcMap != null) {
        mdcMap.clear();
      }

      Thread.currentThread().setName(threadName);

      //
      //  do a little fixup to make output XHTML
      //
      StringBuffer buf = new StringBuffer(
              "<!DOCTYPE table [<!ENTITY nbsp ' '>]><table>");
      buf.append(result);
      buf.append("</table>");
      String doc = buf.toString();
      for(int i = doc.lastIndexOf("<br>");
          i != -1;
          i = doc.lastIndexOf("<br>", i - 1)) {
          buf.replace(i, i + 4, "<br/>");
      }

      parse(buf.toString());