/* * 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.logging.log4j.core.pattern; import java.util.ArrayList; import java.util.Calendar; import java.util.Date; import java.util.List; import org.junit.Test; import static org.junit.Assert.*; /** * */ public class PatternParserTest2 { @Test public void testParseConvertBackslashes() { final boolean convert = true; final StringBuilder buf = new StringBuilder(); final String pattern = "%d{HH-mm-ss} \\t ..."; final Calendar cal = Calendar.getInstance(); cal.set(Calendar.HOUR_OF_DAY, 23); cal.set(Calendar.MINUTE, 53); cal.set(Calendar.SECOND, 01); parse(pattern, convert, buf, cal.getTime(), 123); assertEquals("23-53-01 \t ...", buf.toString()); } @Test public void testParseDontConvertBackslashes() { final boolean convert = false; final StringBuilder buf = new StringBuilder(); final String pattern = "%d{HH-mm-ss} \\t---"; final Calendar cal = Calendar.getInstance(); cal.set(Calendar.HOUR_OF_DAY, 13); cal.set(Calendar.MINUTE, 24); cal.set(Calendar.SECOND, 59); parse(pattern, convert, buf, cal.getTime(), 3); assertEquals("13-24-59 \\t---", buf.toString()); } private void parse(final String pattern, final boolean convert, final StringBuilder buf, final Date date, final int i) { final PatternParser parser0 = new PatternParser(null, "Converter", null); final List<PatternConverter> converters = new ArrayList<>(); final List<FormattingInfo> fields = new ArrayList<>(); parser0.parse(pattern, converters, fields, false, false, convert); final FormattingInfo[] infoArray = new FormattingInfo[fields.size()]; final FormattingInfo[] patternFields = fields.toArray(infoArray); final ArrayPatternConverter[] converterArray = new ArrayPatternConverter[converters.size()]; final ArrayPatternConverter[] patternConverters = converters.toArray(converterArray); formatFileName(patternConverters, patternFields, buf, date, i); } /** * Format file name. * * @param buf string buffer to which formatted file name is appended, may not be null. * @param objects objects to be evaluated in formatting, may not be null. */ protected final void formatFileName(final ArrayPatternConverter[] patternConverters, final FormattingInfo[] patternFields, final StringBuilder buf, final Object... objects) { for (int i = 0; i < patternConverters.length; i++) { final int fieldStart = buf.length(); patternConverters[i].format(buf, objects); if (patternFields[i] != null) { patternFields[i].format(fieldStart, buf); } } } }