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 package org.apache.log4j.spi;
18
19 import junit.framework.TestCase;
20
21 /**
22 * Tests for LocationInfo.
23 */
24 public class LocationInfoTest extends TestCase {
25
26 /**
27 * Tests four parameter constructor.
28 */
29 public void testFourParamConstructor() {
30 final String className = LocationInfoTest.class.getName();
31 final String methodName = "testFourParamConstructor";
32 final String fileName = "LocationInfoTest.java";
33 final String lineNumber = "41";
34 LocationInfo li = new LocationInfo(fileName,
35 className, methodName, lineNumber);
36 assertEquals(className, li.getClassName());
37 assertEquals(methodName, li.getMethodName());
38 assertEquals(fileName, li.getFileName());
39 assertEquals(lineNumber, li.getLineNumber());
40 assertEquals(className + "." + methodName
41 + "(" + fileName + ":" + lineNumber + ")",
42 li.fullInfo);
43 }
44
45
46 /**
47 * Class with name that is a substring of its caller.
48 */
49 private static class NameSubstring {
50 /**
51 * Construct a LocationInfo. Location should be immediate caller of this method.
52 * @return location info.
53 */
54 public static LocationInfo getInfo() {
55 return new LocationInfo(new Throwable(), NameSubstring.class.getName());
56
57 }
58 }
59
60 /**
61 * Class whose name is contains the name of the class that obtains the LocationInfo.
62 */
63 private static class NameSubstringCaller {
64 /**
65 * Construct a locationInfo. Location should be this location.
66 * @return location info.
67 */
68 public static LocationInfo getInfo() {
69 return NameSubstring.getInfo();
70 }
71
72 }
73
74 /**
75 * Tests creation of location info when the logger class name
76 * is a substring of one of the other classes in the stack trace.
77 * See bug 44888.
78 */
79 public void testLocationInfo() {
80 LocationInfo li = NameSubstringCaller.getInfo();
81 assertEquals(NameSubstringCaller.class.getName(), li.getClassName());
82 assertEquals("getInfo", li.getMethodName());
83 }
84
85 }