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 */ testFourParamConstructor()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 */ getInfo()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 */ getInfo()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 */ testLocationInfo()79 public void testLocationInfo() { 80 LocationInfo li = NameSubstringCaller.getInfo(); 81 assertEquals(NameSubstringCaller.class.getName(), li.getClassName()); 82 assertEquals("getInfo", li.getMethodName()); 83 } 84 85 } 86