This is an automated email from the ASF dual-hosted git repository.
vy pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/logging-log4j2.git
The following commit(s) were added to refs/heads/master by this push:
new 50458fdd28 Fixing HtmlLayoutTest when timezone has minutes (#1127)
50458fdd28 is described below
commit 50458fdd2818288116a8414cf3d127c10df7f031
Author: Adwait Kumar Singh <[email protected]>
AuthorDate: Fri Oct 28 20:44:57 2022 +0530
Fixing HtmlLayoutTest when timezone has minutes (#1127)
---
.../logging/log4j/core/layout/HtmlLayoutTest.java | 27 ++++++++++++++++------
1 file changed, 20 insertions(+), 7 deletions(-)
diff --git
a/log4j-core-test/src/test/java/org/apache/logging/log4j/core/layout/HtmlLayoutTest.java
b/log4j-core-test/src/test/java/org/apache/logging/log4j/core/layout/HtmlLayoutTest.java
index 266ca513d0..fd31532abb 100644
---
a/log4j-core-test/src/test/java/org/apache/logging/log4j/core/layout/HtmlLayoutTest.java
+++
b/log4j-core-test/src/test/java/org/apache/logging/log4j/core/layout/HtmlLayoutTest.java
@@ -18,11 +18,7 @@ package org.apache.logging.log4j.core.layout;
import org.apache.logging.log4j.Level;
import org.apache.logging.log4j.ThreadContext;
-import org.apache.logging.log4j.core.AbstractLogEvent;
-import org.apache.logging.log4j.core.Appender;
-import org.apache.logging.log4j.core.LogEvent;
-import org.apache.logging.log4j.core.Logger;
-import org.apache.logging.log4j.core.LoggerContext;
+import org.apache.logging.log4j.core.*;
import org.apache.logging.log4j.core.config.ConfigurationFactory;
import org.apache.logging.log4j.core.test.BasicConfigurationFactory;
import org.apache.logging.log4j.core.test.appender.ListAppender;
@@ -45,6 +41,7 @@ import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Calendar;
import java.util.List;
+import java.util.Locale;
import java.util.Map;
import static
org.apache.logging.log4j.core.time.internal.format.FixedDateFormat.FixedFormat;
@@ -237,7 +234,7 @@ public class HtmlLayoutTest {
@Test
public void testLayoutWithDatePatternFixedFormat() {
- for (final String timeZone : new String[] {"GMT+8", "UTC", null}) {
+ for (final String timeZone : new String[] {"GMT+8", "GMT+0530", "UTC",
null}) {
for (final FixedDateFormat.FixedFormat format :
FixedDateFormat.FixedFormat.values()) {
testLayoutWithDatePatternFixedFormat(format, timeZone);
}
@@ -262,14 +259,30 @@ public class HtmlLayoutTest {
zonedDateTime =
zonedDateTime.withZoneSameInstant(ZoneId.of(timezone));
}
+ // LOG4J2-3019 HtmlLayoutTest.testLayoutWithDatePatternFixedFormat
test fails on windows
+ // https://issues.apache.org/jira/browse/LOG4J2-3019
+ // java.time.format.DateTimeFormatterBuilder.toFormatter() defaults to
using
+ // Locale.getDefault(Locale.Category.FORMAT)
+ final Locale formatLocale = Locale.getDefault(Locale.Category.FORMAT);
+ final Locale locale = Locale.getDefault().equals(formatLocale) ?
formatLocale : Locale.getDefault();
+
// For DateTimeFormatter of jdk,
// Pattern letter 'S' means fraction-of-second, 'n' means
nano-of-second. Log4j2 needs S.
// Pattern letter 'X' (upper case) will output 'Z' when the offset to
be output would be zero,
// whereas pattern letter 'x' (lower case) will output '+00', '+0000',
or '+00:00'. Log4j2 needs x.
DateTimeFormatter dateTimeFormatter =
- DateTimeFormatter.ofPattern(format.getPattern().replace('n',
'S').replace('X', 'x'));
+ DateTimeFormatter.ofPattern(format.getPattern().replace('n',
'S').replace('X', 'x'), locale);
String expected = zonedDateTime.format(dateTimeFormatter);
+ String offset = zonedDateTime.getOffset().toString();
+
+ //Truncate minutes if timeZone format is HH and timeZone has minutes.
This is required because according to DateTimeFormatter,
+ //One letter outputs just the hour, such as '+01', unless the minute
is non-zero in which case the minute is also output, such as '+0130'
+ //ref :
https://docs.oracle.com/javase/8/docs/api/java/time/format/DateTimeFormatter.html
+ if
(FixedDateFormat.FixedTimeZoneFormat.HH.equals(format.getTimeZoneFormat()) &&
offset.contains(":") && !"00".equals(offset.split(":")[1])) {
+ expected = expected.substring(0, expected.length() - 2);
+ }
+
assertEquals("<td>" + expected + "</td>", actual,
MessageFormat.format("Incorrect date={0}, format={1},
timezone={2}", actual, format.name(), timezone));
}