    1   /*
    2    * Licensed to the Apache Software Foundation (ASF) under one or more
    3    * contributor license agreements.  See the NOTICE file distributed with
    4    * this work for additional information regarding copyright ownership.
    5    * The ASF licenses this file to You under the Apache License, Version 2.0
    6    * (the "License"); you may not use this file except in compliance with
    7    * the License.  You may obtain a copy of the License at
    8    *
    9    *      http://www.apache.org/licenses/LICENSE-2.0
    10   *
    11   * Unless required by applicable law or agreed to in writing, software
    12   * distributed under the License is distributed on an "AS IS" BASIS,
    13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    14   * See the License for the specific language governing permissions and
    15   * limitations under the License.
    16   */
    17
    18  package org.apache.log4j;
    19
    20  import junit.framework.TestCase;
    21
    22  import org.apache.log4j.spi.LoggingEvent;
    23
    24
    25  /**
    26   * Tests for Layout.
    27   *
    28   */
    29  public class LayoutTest extends TestCase {
    30    /**
    31     * Expected content type.
    32     */
    33    private final String contentType;
    34
    35    /**
    36     * Expected value for ignoresThrowable.
    37     */
    38    private final boolean ignoresThrowable;
    39
    40    /**
    41     * Expected value for header.
    42     */
    43    private final String header;
    44
    45    /**
    46      * Expected value for footer.
    47      */
    48    private final String footer;
    49
    50    /**
    51     * Construct a new instance of LayoutTest.
    52     * @param testName test name.
    53     */
    54    public LayoutTest(final String testName) {
    55      super(testName);
    56      contentType = "text/plain";
    57      ignoresThrowable = true;
    58      header = null;
    59      footer = null;
    60    }
    61
    62    /**
    63     * Constructor for use by derived tests.
    64     * @param testName name of test.
    65     * @param expectedContentType expected value for getContentType().
    66     * @param expectedIgnoresThrowable expected value for ignoresThrowable().
    67     * @param expectedHeader expected value for getHeader().
    68     * @param expectedFooter expected value for getFooter().
    69     */
    70    protected LayoutTest(
    71      final String testName, final String expectedContentType,
    72      final boolean expectedIgnoresThrowable, final String expectedHeader,
    73      final String expectedFooter) {
    74      super(testName);
    75      contentType = expectedContentType;
    76      ignoresThrowable = expectedIgnoresThrowable;
    77      header = expectedHeader;
    78      footer = expectedFooter;
    79    }
    80
    81    /**
    82     * Tests Layout.LINE_SEP.
    83     */
    84    public void testLineSep() {
    85      assertEquals(System.getProperty("line.separator"), Layout.LINE_SEP);
    86    }
    87
    88    /**
    89     * Tests Layout.LINE_SEP.
    90     */
    91    public void testLineSepLen() {
    92      assertEquals(Layout.LINE_SEP.length(), Layout.LINE_SEP_LEN);
    93    }
    94
    95    /**
    96     * Creates layout for test.
    97     * @return new instance of Layout.
    98     */
    99    protected Layout createLayout() {
    100     return new MockLayout();
    101   }
    102
    103   /**
    104    * Tests getContentType.
    105    */
    106   public void testGetContentType() {
    107     assertEquals(contentType, createLayout().getContentType());
    108   }
    109
    110   /**
    111    * Tests ignoresThrowable.
    112    */
    113   public void testIgnoresThrowable() {
    114     assertEquals(ignoresThrowable, createLayout().ignoresThrowable());
    115   }
    116
    117   /**
    118    * Tests getHeader.
    119    */
    120   public void testGetHeader() {
    121     assertEquals(header, createLayout().getHeader());
    122   }
    123
    124   /**
    125    * Tests getFooter.
    126    */
    127   public void testGetFooter() {
    128     assertEquals(footer, createLayout().getFooter());
    129   }
    130
    131   /**
    132    * Tests format.
    133    * @throws Exception derived tests, particular XMLLayoutTest, may throw exceptions.
    134    */
    135   public void testFormat() throws Exception {
    136     Logger logger = Logger.getLogger("org.apache.log4j.LayoutTest");
    137     LoggingEvent event =
    138       new LoggingEvent(
    139         "org.apache.log4j.Logger", logger, Level.INFO, "Hello, World", null);
    140     String result = createLayout().format(event);
    141     assertEquals("Mock", result);
    142   }
    143
    144   /**
    145    * Concrete Layout class for tests.
    146    */
    147   private static final class MockLayout extends Layout {
    148     /**
    149      * @{inheritDoc}
    150      */
    151     public String format(final LoggingEvent event) {
    152       return "Mock";
    153     }
    154
    155     /**
    156      * @{inheritDoc}
    157      */
    158     public void activateOptions() {
    159     }
    160
    161     /**
    162      * @{inheritDoc}
    163      */
    164     public boolean ignoresThrowable() {
    165       return true;
    166     }
    167   }
    168 }