/apache-log4j-1.2.17/tests/src/java/org/apache/log4j/pattern/CachedDateFormatTest.java
Java | 393 lines | 232 code | 54 blank | 107 comment | 0 complexity | ddb5ced234fa89b3d6d4828a89b1f2ff MD5 | raw file
Possible License(s): Apache-2.0
- /*
- * 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.pattern;
- import junit.framework.Test;
- import junit.framework.TestCase;
- import junit.framework.TestSuite;
- import org.apache.log4j.pattern.CachedDateFormat;
- import java.text.DateFormat;
- import java.util.TimeZone;
- import java.util.Date;
- import java.text.SimpleDateFormat;
- import java.util.Locale;
- import java.util.Calendar;
- /**
- Unit test {@link AbsoluteTimeDateFormat}.
- @author Curt Arnold
- */
- public final class CachedDateFormatTest
- extends TestCase {
- /**
- * Test constructor
- * @param name String test name
- */
- public CachedDateFormatTest(String name) {
- super(name);
- }
-
- private static DateFormat createAbsoluteTimeDateFormat(TimeZone timeZone) {
- DateFormat df = new SimpleDateFormat("HH:mm:ss,SSS");
- df.setTimeZone(timeZone);
- return df;
- }
- /**
- * Timezone representing GMT.
- */
- private static final TimeZone GMT = TimeZone.getTimeZone("GMT");
- /**
- * Timezone for Chicago, Ill. USA.
- */
- private static final TimeZone CHICAGO = TimeZone.getTimeZone(
- "America/Chicago");
- /**
- * Test multiple calls in close intervals.
- */
- public void test1() {
- // subsequent calls within one minute
- // are optimized to reuse previous formatted value
- // make a couple of nearly spaced calls
- DateFormat gmtFormat = new CachedDateFormat(createAbsoluteTimeDateFormat(GMT), 1000);
- long ticks = 12601L * 86400000L;
- Date jul1 = new Date(ticks);
- assertEquals("00:00:00,000", gmtFormat.format(jul1));
- Date plus8ms = new Date(ticks + 8);
- assertEquals("00:00:00,008", gmtFormat.format(plus8ms));
- Date plus17ms = new Date(ticks + 17);
- assertEquals("00:00:00,017", gmtFormat.format(plus17ms));
- Date plus237ms = new Date(ticks + 237);
- assertEquals("00:00:00,237", gmtFormat.format(plus237ms));
- Date plus1415ms = new Date(ticks + 1415);
- assertEquals("00:00:01,415", gmtFormat.format(plus1415ms));
- }
- /**
- * Check for interaction between caches.
- */
- public void test2() {
- Date jul2 = new Date(12602L * 86400000L);
- DateFormat gmtFormat = new CachedDateFormat(createAbsoluteTimeDateFormat(GMT), 1000);
- DateFormat chicagoFormat = new CachedDateFormat(createAbsoluteTimeDateFormat(CHICAGO), 1000);
- assertEquals("00:00:00,000", gmtFormat.format(jul2));
- assertEquals("19:00:00,000", chicagoFormat.format(jul2));
- assertEquals("00:00:00,000", gmtFormat.format(jul2));
- }
- /**
- * Test multiple calls in close intervals prior to 1 Jan 1970.
- */
- public void test3() {
- // subsequent calls within one minute
- // are optimized to reuse previous formatted value
- // make a couple of nearly spaced calls
- DateFormat gmtFormat = new CachedDateFormat(
- createAbsoluteTimeDateFormat(GMT), 1000);
- //
- // if the first call was exactly on an integral
- // second, it would not test the round toward zero compensation
- long ticks = -7L * 86400000L;
- Date jul1 = new Date(ticks + 8);
- assertEquals("00:00:00,008", gmtFormat.format(jul1));
- Date plus8ms = new Date(ticks + 16);
- assertEquals("00:00:00,016", gmtFormat.format(plus8ms));
- Date plus17ms = new Date(ticks + 23);
- assertEquals("00:00:00,023", gmtFormat.format(plus17ms));
- Date plus237ms = new Date(ticks + 245);
- assertEquals("00:00:00,245", gmtFormat.format(plus237ms));
- Date plus1415ms = new Date(ticks + 1423);
- assertEquals("00:00:01,423", gmtFormat.format(plus1415ms));
- }
- public void test4() {
- // subsequent calls within one minute are optimized to reuse previous
- // formatted value. make a couple of nearly spaced calls
- // (Note: 'Z' is JDK 1.4, using 'z' instead.)
- SimpleDateFormat baseFormat =
- new SimpleDateFormat("EEE, MMM dd, HH:mm:ss.SSS z", Locale.ENGLISH);
- DateFormat cachedFormat = new CachedDateFormat(baseFormat, 1000);
- //
- // use a date in 2000 to attempt to confuse the millisecond locator
- long ticks = 11141L * 86400000L;
- Date jul1 = new Date(ticks);
- assertEquals(baseFormat.format(jul1), cachedFormat.format(jul1));
- Date plus8ms = new Date(ticks + 8);
- baseFormat.format(plus8ms);
- cachedFormat.format(plus8ms);
- assertEquals(baseFormat.format(plus8ms), cachedFormat.format(plus8ms));
- Date plus17ms = new Date(ticks + 17);
- assertEquals(baseFormat.format(plus17ms), cachedFormat.format(plus17ms));
- Date plus237ms = new Date(ticks + 237);
- assertEquals(baseFormat.format(plus237ms), cachedFormat.format(plus237ms));
- Date plus1415ms = new Date(ticks + 1415);
- assertEquals(baseFormat.format(plus1415ms), cachedFormat.format(plus1415ms));
- }
- public void test5() {
- // subsequent calls within one minute
- // are optimized to reuse previous formatted value
- // make a couple of nearly spaced calls
- // (Note: 'Z' is JDK 1.4, using 'z' instead.)
- Locale thai = new Locale("th", "TH");
- SimpleDateFormat baseFormat =
- new SimpleDateFormat("EEE, MMM dd, HH:mm:ss.SSS z", thai);
- DateFormat cachedFormat = new CachedDateFormat(baseFormat, 1000);
- //
- // use a date in the year 2000 CE to attempt to confuse the millisecond locator
- long ticks = 11141L * 86400000L;
-
- String sx;
- Date jul1 = new Date(ticks);
- sx = cachedFormat.format(jul1);
- System.out.println(baseFormat.format(jul1));
- System.out.println(sx);
- assertEquals(baseFormat.format(jul1), sx);
-
- sx = cachedFormat.format(jul1);
- System.out.println(baseFormat.format(jul1));
- System.out.println(sx);
- assertEquals(baseFormat.format(jul1), sx);
-
-
- Date plus8ms = new Date(ticks + 8);
- sx = cachedFormat.format(plus8ms);
- System.out.println(baseFormat.format(plus8ms));
- System.out.println(sx);
-
- assertEquals(baseFormat.format(plus8ms), sx);
-
- Date plus17ms = new Date(ticks + 17);
- assertEquals(baseFormat.format(plus17ms), cachedFormat.format(plus17ms));
-
- Date plus237ms = new Date(ticks + 237);
- assertEquals(baseFormat.format(plus237ms), cachedFormat.format(plus237ms));
-
- Date plus1415ms = new Date(ticks + 1415);
- assertEquals(baseFormat.format(plus1415ms), cachedFormat.format(plus1415ms));
- }
- /**
- * Checks that getNumberFormat does not return null.
- */
- public void test6() {
- assertNotNull(new CachedDateFormat(new SimpleDateFormat(), 1000).getNumberFormat());
- }
- /**
- * Set time zone on cached and check that it is effective.
- */
- public void test8() {
- DateFormat baseFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss,SSS");
- baseFormat.setTimeZone(GMT);
- DateFormat cachedFormat = new CachedDateFormat(baseFormat, 1000);
- Date jul4 = new Date(12603L * 86400000L);
- assertEquals("2004-07-04 00:00:00,000", cachedFormat.format(jul4));
- cachedFormat.setTimeZone(TimeZone.getTimeZone("GMT-6"));
- assertEquals("2004-07-03 18:00:00,000", cachedFormat.format(jul4));
- }
- /**
- * Test of caching when less than three millisecond digits are specified.
- */
- public void test9() {
- // (Note: 'Z' is JDK 1.4, using 'z' instead.)
- DateFormat baseFormat = new SimpleDateFormat("yyyy-MMMM-dd HH:mm:ss,SS z", Locale.US);
- DateFormat cachedFormat = new CachedDateFormat(baseFormat, 1000);
- TimeZone cet = TimeZone.getTimeZone("GMT+1");
- cachedFormat.setTimeZone(cet);
-
- Calendar c = Calendar.getInstance();
- c.set(2004, Calendar.DECEMBER, 12, 20, 0);
- c.set(Calendar.SECOND, 37);
- c.set(Calendar.MILLISECOND, 23);
- c.setTimeZone(cet);
- String expected = baseFormat.format(c.getTime());
- String s = cachedFormat.format(c.getTime());
- assertEquals(expected, s);
- c.set(2005, Calendar.JANUARY, 1, 0, 0);
- c.set(Calendar.SECOND, 13);
- c.set(Calendar.MILLISECOND, 905);
- expected = baseFormat.format(c.getTime());
- s = cachedFormat.format(c.getTime());
- assertEquals(expected, s);
- }
-
- /**
- * Test when millisecond position moves but length remains constant.
- */
- public void test10() {
- DateFormat baseFormat = new SimpleDateFormat("MMMM SSS EEEEEE", Locale.US);
- DateFormat cachedFormat = new CachedDateFormat(baseFormat, 1000);
- TimeZone cet = TimeZone.getTimeZone("GMT+1");
- cachedFormat.setTimeZone(cet);
-
- Calendar c = Calendar.getInstance();
- c.set(2004, Calendar.OCTOBER, 5, 20, 0);
- c.set(Calendar.SECOND, 37);
- c.set(Calendar.MILLISECOND, 23);
- c.setTimeZone(cet);
- String expected = baseFormat.format(c.getTime());
- String s = cachedFormat.format(c.getTime());
- assertEquals(expected, s);
- c.set(2004, Calendar.NOVEMBER, 1, 0, 0);
- c.set(Calendar.MILLISECOND, 23);
- expected = baseFormat.format(c.getTime());
- s = cachedFormat.format(c.getTime());
- assertEquals(expected, s);
- c.set(Calendar.MILLISECOND, 984);
- expected = baseFormat.format(c.getTime());
- s = cachedFormat.format(c.getTime());
- assertEquals(expected, s);
- }
- /**
- * Test that tests if caching is skipped if only "SS"
- * is specified.
- */
- public void test11() {
- //
- // Earlier versions could be tricked by "SS0" patterns.
- //
- String badPattern = "ss,SS0";
- SimpleDateFormat simpleFormat = new SimpleDateFormat(badPattern);
- SimpleDateFormat baseFormat = new SimpleDateFormat(badPattern);
- DateFormat gmtFormat = new CachedDateFormat(simpleFormat, 1000);
- gmtFormat.setTimeZone(GMT);
- baseFormat.setTimeZone(GMT);
- //
- // The first request has to 100 ms after an ordinal second
- // to push the literal zero out of the pattern check
- long ticks = 11142L * 86400000L;
- Date jul2 = new Date(ticks + 120);
- String expected = baseFormat.format(jul2);
- assertEquals(expected, gmtFormat.format(jul2));
- jul2.setTime(ticks + 87);
-
- //
- // Cache gives 00,087
- expected = baseFormat.format(jul2);
- assertEquals(expected, gmtFormat.format(jul2));
- }
- /**
- * Check pattern location for ISO8601
- */
- public void test12() {
- SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss,SSS");
- long ticks = 11142L * 86400000L;
- String formatted = df.format(new Date(ticks));
- int millisecondStart = CachedDateFormat.findMillisecondStart(ticks, formatted, df);
- assertEquals(20, millisecondStart);
- }
- /**
- * Check pattern location for DATE
- */
- public void test13() {
- SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
- long ticks = 11142L * 86400000L;
- String formatted = df.format(new Date(ticks));
- int millisecondStart = CachedDateFormat.findMillisecondStart(ticks, formatted, df);
- assertEquals(CachedDateFormat.NO_MILLISECONDS, millisecondStart);
- }
- /**
- * Check pattern location for ABSOLUTE
- */
- public void test14() {
- SimpleDateFormat df = new SimpleDateFormat("HH:mm:ss,SSS");
- long ticks = 11142L * 86400000L;
- String formatted = df.format(new Date(ticks));
- int millisecondStart = CachedDateFormat.findMillisecondStart(ticks, formatted, df);
- assertEquals(9, millisecondStart);
- }
- /**
- * Check pattern location for single S
- */
- public void test15() {
- SimpleDateFormat df = new SimpleDateFormat("HH:mm:ss,S");
- long ticks = 11142L * 86400000L;
- String formatted = df.format(new Date(ticks));
- int millisecondStart = CachedDateFormat.findMillisecondStart(ticks, formatted, df);
- assertEquals(CachedDateFormat.UNRECOGNIZED_MILLISECONDS, millisecondStart);
- }
- /**
- * Check pattern location for single SS
- */
- public void test16() {
- SimpleDateFormat df = new SimpleDateFormat("HH:mm:ss,SS");
- long ticks = 11142L * 86400000L;
- String formatted = df.format(new Date(ticks));
- int millisecondStart = CachedDateFormat.findMillisecondStart(ticks, formatted, df);
- assertEquals(CachedDateFormat.UNRECOGNIZED_MILLISECONDS, millisecondStart);
- }
- /**
- * Check caching when multiple SSS appear in pattern
- */
- public void test17() {
- Date jul2 = new Date(12602L * 86400000L);
- String badPattern = "HH:mm:ss,SSS HH:mm:ss,SSS";
- SimpleDateFormat simpleFormat = new SimpleDateFormat(badPattern);
- simpleFormat.setTimeZone(GMT);
- DateFormat cachedFormat = new CachedDateFormat(simpleFormat, 1000);
- String s = cachedFormat.format(jul2);
- assertEquals("00:00:00,000 00:00:00,000", s);
- jul2.setTime(jul2.getTime() + 120);
- assertEquals("00:00:00,120 00:00:00,120", simpleFormat.format(jul2));
- s = cachedFormat.format(jul2);
- //
- // TODO: why is this returning ,120 ... , 120
- //
- //assertEquals("00:00:00,120 00:00:00,000", s) ;
-
- int maxValid = CachedDateFormat.getMaximumCacheValidity(badPattern);
- assertEquals(1, maxValid);
- }
-
- public static Test xsuite() {
- TestSuite suite = new TestSuite();
- suite.addTest(new CachedDateFormatTest("test5"));
- //suite.addTest(new CachedDateFormatTest("testS2"));
- return suite;
- }
- }