/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.log4j; import junit.framework.TestCase; import org.apache.log4j.util.SerializationTestHelper; import java.util.Locale; /** * Tests of Level. * * @author Curt Arnold * @since 1.2.12 */ public class LevelTest extends TestCase { /** * Constructs new instance of test. * @param name test name. */ public LevelTest(final String name) { super(name); } /** * Serialize Level.INFO and check against witness. * @throws Exception if exception during test. * */ public void testSerializeINFO() throws Exception { int[] skip = new int[] { }; SerializationTestHelper.assertSerializationEquals( "witness/serialization/info.bin", Level.INFO, skip, Integer.MAX_VALUE); } /** * Deserialize witness and see if resolved to Level.INFO. * @throws Exception if exception during test. */ public void testDeserializeINFO() throws Exception { Object obj = SerializationTestHelper.deserializeStream( "witness/serialization/info.bin"); assertTrue(obj instanceof Level); Level info = (Level) obj; assertEquals("INFO", info.toString()); // // JDK 1.1 doesn't support readResolve necessary for the assertion if (!System.getProperty("java.version").startsWith("1.1.")) { assertTrue(obj == Level.INFO); } } /** * Tests that a custom level can be serialized and deserialized * and is not resolved to a stock level. * * @throws Exception if exception during test. */ public void testCustomLevelSerialization() throws Exception { CustomLevel custom = new CustomLevel(); Object obj = SerializationTestHelper.serializeClone(custom); assertTrue(obj instanceof CustomLevel); CustomLevel clone = (CustomLevel) obj; assertEquals(Level.INFO.level, clone.level); assertEquals(Level.INFO.levelStr, clone.levelStr); assertEquals(Level.INFO.syslogEquivalent, clone.syslogEquivalent); } /** * Custom level to check that custom levels are * serializable, but not resolved to a plain Level. */ private static class CustomLevel extends Level { private static final long serialVersionUID = 1L; /** * Create an instance of CustomLevel. */ public CustomLevel() { super( Level.INFO.level, Level.INFO.levelStr, Level.INFO.syslogEquivalent); } } /** * Tests Level.TRACE_INT. */ public void testTraceInt() { assertEquals(5000, Level.TRACE_INT); } /** * Tests Level.TRACE. */ public void testTrace() { assertEquals("TRACE", Level.TRACE.toString()); assertEquals(5000, Level.TRACE.toInt()); assertEquals(7, Level.TRACE.getSyslogEquivalent()); } /** * Tests Level.toLevel(Level.TRACE_INT). */ public void testIntToTrace() { Level trace = Level.toLevel(5000); assertEquals("TRACE", trace.toString()); } /** * Tests Level.toLevel("TRACE"); */ public void testStringToTrace() { Level trace = Level.toLevel("TRACE"); assertEquals("TRACE", trace.toString()); } /** * Tests that Level extends Priority. */ public void testLevelExtendsPriority() { assertTrue(Priority.class.isAssignableFrom(Level.class)); } /** * Tests Level.OFF. */ public void testOFF() { assertTrue(Level.OFF instanceof Level); } /** * Tests Level.FATAL. */ public void testFATAL() { assertTrue(Level.FATAL instanceof Level); } /** * Tests Level.ERROR. */ public void testERROR() { assertTrue(Level.ERROR instanceof Level); } /** * Tests Level.WARN. */ public void testWARN() { assertTrue(Level.WARN instanceof Level); } /** * Tests Level.INFO. */ public void testINFO() { assertTrue(Level.INFO instanceof Level); } /** * Tests Level.DEBUG. */ public void testDEBUG() { assertTrue(Level.DEBUG instanceof Level); } /** * Tests Level.TRACE. */ public void testTRACE() { assertTrue(Level.TRACE instanceof Level); } /** * Tests Level.ALL. */ public void testALL() { assertTrue(Level.ALL instanceof Level); } /** * Tests Level.serialVersionUID. */ public void testSerialVersionUID() { assertEquals(3491141966387921974L, Level.serialVersionUID); } /** * Tests Level.toLevel(Level.All_INT). */ public void testIntToAll() { Level level = Level.toLevel(Level.ALL_INT); assertEquals("ALL", level.toString()); } /** * Tests Level.toLevel(Level.FATAL_INT). */ public void testIntToFatal() { Level level = Level.toLevel(Level.FATAL_INT); assertEquals("FATAL", level.toString()); } /** * Tests Level.toLevel(Level.OFF_INT). */ public void testIntToOff() { Level level = Level.toLevel(Level.OFF_INT); assertEquals("OFF", level.toString()); } /** * Tests Level.toLevel(17, Level.FATAL). */ public void testToLevelUnrecognizedInt() { Level level = Level.toLevel(17, Level.FATAL); assertEquals("FATAL", level.toString()); } /** * Tests Level.toLevel(null, Level.FATAL). */ public void testToLevelNull() { Level level = Level.toLevel(null, Level.FATAL); assertEquals("FATAL", level.toString()); } /** * Test that dotless lower I + "nfo" is recognized as INFO. */ public void testDotlessLowerI() { Level level = Level.toLevel("\u0131nfo"); assertEquals("INFO", level.toString()); } /** * Test that dotted lower I + "nfo" is recognized as INFO * even in Turkish locale. */ public void testDottedLowerI() { Locale defaultLocale = Locale.getDefault(); Locale turkey = new Locale("tr", "TR"); Locale.setDefault(turkey); Level level = Level.toLevel("info"); Locale.setDefault(defaultLocale); assertEquals("INFO", level.toString()); } }