
Author: ceki Date: Mon Aug 3 22:18:56 2009 New Revision: 2407 Added: logback/trunk/logback-core/src/test/java/ch/qos/logback/core/rolling/helper/DatePatternToRegexTest.java Modified: logback/trunk/logback-core/src/main/java/ch/qos/logback/core/rolling/helper/DatePatternToRegex.java logback/trunk/logback-core/src/main/java/ch/qos/logback/core/rolling/helper/DateTokenConverter.java logback/trunk/logback-core/src/main/java/ch/qos/logback/core/rolling/helper/SDFToken.java logback/trunk/logback-core/src/test/java/ch/qos/logback/core/rolling/helper/PackageTest.java Log: initial tests for DatePatternToRegex Modified: logback/trunk/logback-core/src/main/java/ch/qos/logback/core/rolling/helper/DatePatternToRegex.java ============================================================================== --- logback/trunk/logback-core/src/main/java/ch/qos/logback/core/rolling/helper/DatePatternToRegex.java (original) +++ logback/trunk/logback-core/src/main/java/ch/qos/logback/core/rolling/helper/DatePatternToRegex.java Mon Aug 3 22:18:56 2009 @@ -1,3 +1,13 @@ +/** + * Logback: the generic, reliable, fast and flexible logging framework. + * + * Copyright (C) 2000-2009, QOS.ch + * + * This library is free software, you can redistribute it and/or modify it under + * the terms of the GNU Lesser General Public License as published by the Free + * Software Foundation. + */ + package ch.qos.logback.core.rolling.helper; import java.util.ArrayList; @@ -13,19 +23,16 @@ length = datePattern.length(); } - public String toRegex(String datePattern) { + String toRegex() { List<SDFToken> tokenList = tokenize(); + StringBuilder sb = new StringBuilder(); for(SDFToken token: tokenList) { - - } - char c = 0; - for (int i = 0; i < length; i++) { - char t = 1; + sb.append(token.toRegex()); } - return null; + return sb.toString(); } - List<SDFToken> tokenize() { + private List<SDFToken> tokenize() { List<SDFToken> tokenList = new ArrayList<SDFToken>(); SDFToken token = null; for (int i = 0; i < length; i++) { Modified: logback/trunk/logback-core/src/main/java/ch/qos/logback/core/rolling/helper/DateTokenConverter.java ============================================================================== --- logback/trunk/logback-core/src/main/java/ch/qos/logback/core/rolling/helper/DateTokenConverter.java (original) +++ logback/trunk/logback-core/src/main/java/ch/qos/logback/core/rolling/helper/DateTokenConverter.java Mon Aug 3 22:18:56 2009 @@ -1,7 +1,7 @@ /** - * LOGBack: the reliable, fast and flexible logging library for Java. + * Logback: the generic, reliable, fast and flexible logging framework. * - * Copyright (C) 1999-2006, QOS.ch + * Copyright (C) 2000-2009, QOS.ch * * This library is free software, you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by the Free @@ -16,6 +16,7 @@ import ch.qos.logback.core.pattern.DynamicConverter; /** + * Returns a date formatted by SimpleDateFormatter. * * @author Ceki Gücü */ @@ -26,8 +27,8 @@ */ public final static String CONVERTER_KEY = "d"; - String datePattern; - SimpleDateFormat sdf; + private String datePattern; + private SimpleDateFormat sdf; public DateTokenConverter() { } @@ -66,9 +67,11 @@ return (o instanceof Date); } - String toRegex() { - return null; + public String toRegex() { + DatePatternToRegex toRegex = new DatePatternToRegex(datePattern); + return toRegex.toRegex(); } + /** * Set the date pattern. */ Modified: logback/trunk/logback-core/src/main/java/ch/qos/logback/core/rolling/helper/SDFToken.java ============================================================================== --- logback/trunk/logback-core/src/main/java/ch/qos/logback/core/rolling/helper/SDFToken.java (original) +++ logback/trunk/logback-core/src/main/java/ch/qos/logback/core/rolling/helper/SDFToken.java Mon Aug 3 22:18:56 2009 @@ -21,11 +21,57 @@ void inc() { occurrences++; } - + String toRegex() { - switch(c) { + switch (c) { case 'G': - return null; + return ".*"; + case 'M': + if (occurrences >= 3) { + return ".*"; + } else { + return number(occurrences); + } + case 'y': + case 'w': + case 'W': + case 'D': + case 'd': + case 'F': + case 'H': + case 'k': + case 'K': + case 'h': + case 'm': + case 's': + case 'S': + return number(occurrences); + case 'E': + if (occurrences >= 4) { + return ".{3,10}"; + } else { + return number(occurrences); + } + case 'a': + return ".{2}"; + case 'z': + case 'Z': + return ".*"; + default: + if (occurrences == 1) { + return "" + c; + } else { + return c + "{" + occurrences + "}"; + } } } + + @Override + public String toString() { + return c+"("+occurrences+")"; + } + + private String number(int occurences) { + return "\\d{" + occurrences + "}"; + } } \ No newline at end of file Added: logback/trunk/logback-core/src/test/java/ch/qos/logback/core/rolling/helper/DatePatternToRegexTest.java ============================================================================== --- (empty file) +++ logback/trunk/logback-core/src/test/java/ch/qos/logback/core/rolling/helper/DatePatternToRegexTest.java Mon Aug 3 22:18:56 2009 @@ -0,0 +1,60 @@ +/** + * Logback: the generic, reliable, fast and flexible logging framework. + * + * Copyright (C) 2000-2009, QOS.ch + * + * This library is free software, you can redistribute it and/or modify it under + * the terms of the GNU Lesser General Public License as published by the Free + * Software Foundation. + */ + +package ch.qos.logback.core.rolling.helper; + +import static org.junit.Assert.assertTrue; + +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; + +import org.junit.Before; +import org.junit.Test; + +import ch.qos.logback.core.CoreConstants; + +public class DatePatternToRegexTest { + + @Before + public void setUp() throws Exception { + // set(int year, int month, int date, int hourOfDay, int minute, int + // second); + // calendar.set(2009, 8, 3, 21, 57, 16); + } + + @Test + public void ISO8601() { + SimpleDateFormat sdf = new SimpleDateFormat(CoreConstants.ISO8601_PATTERN); + Calendar calendar = Calendar.getInstance(); + calendar.set(2009, 8, 3, 21, 57, 16); + calendar.set(Calendar.MILLISECOND, 333); + // 2009-09-03 21:57:16,333 + DateTokenConverter dtc = makeDTC(CoreConstants.ISO8601_PATTERN); + verify(sdf, calendar, dtc); + } + + void verify(SimpleDateFormat sdf, Calendar calendar, DateTokenConverter dtc) { + String expected = sdf.format(calendar.getTime()); + String regex = dtc.toRegex(); + assertTrue("[" + expected + "] does not match regex [" + regex + "]", + expected.matches(regex)); + } + + private DateTokenConverter makeDTC(String datePattern) { + DateTokenConverter dtc = new DateTokenConverter(); + List<String> optionList = new ArrayList<String>(); + optionList.add(datePattern); + dtc.setOptionList(optionList); + dtc.start(); + return dtc; + } +} Modified: logback/trunk/logback-core/src/test/java/ch/qos/logback/core/rolling/helper/PackageTest.java ============================================================================== --- logback/trunk/logback-core/src/test/java/ch/qos/logback/core/rolling/helper/PackageTest.java (original) +++ logback/trunk/logback-core/src/test/java/ch/qos/logback/core/rolling/helper/PackageTest.java Mon Aug 3 22:18:56 2009 @@ -17,7 +17,7 @@ @RunWith(Suite.class) @Suite.SuiteClasses( { CompressTest.class, FileNamePatternTest.class, - RollingCalendarTest.class }) + RollingCalendarTest.class, DatePatternToRegexTest.class }) public class PackageTest extends TestCase { }