This is an automated email from the ASF dual-hosted git repository.

vy pushed a commit to branch 2.x-java-17
in repository https://gitbox.apache.org/repos/asf/logging-log4j2.git

commit 1d26d96a64a4a1340c7edb289153b8e2b237cf88
Author: Volkan Yazıcı <[email protected]>
AuthorDate: Thu Nov 30 15:50:51 2023 +0100

    Refactor `DatePatternConverterTest` for Java 17 compatibility
---
 ...Test.java => DatePatternConverterTestBase.java} | 123 +++++++++------------
 .../DatePatternConverterWithThreadLocalsTest.java  |  30 +++++
 ...atePatternConverterWithoutThreadLocalsTest.java |  29 +++++
 3 files changed, 114 insertions(+), 68 deletions(-)

diff --git 
a/log4j-core-test/src/test/java/org/apache/logging/log4j/core/pattern/DatePatternConverterTest.java
 
b/log4j-core-test/src/test/java/org/apache/logging/log4j/core/pattern/DatePatternConverterTestBase.java
similarity index 83%
rename from 
log4j-core-test/src/test/java/org/apache/logging/log4j/core/pattern/DatePatternConverterTest.java
rename to 
log4j-core-test/src/test/java/org/apache/logging/log4j/core/pattern/DatePatternConverterTestBase.java
index 278305d252..881d0968bd 100644
--- 
a/log4j-core-test/src/test/java/org/apache/logging/log4j/core/pattern/DatePatternConverterTest.java
+++ 
b/log4j-core-test/src/test/java/org/apache/logging/log4j/core/pattern/DatePatternConverterTestBase.java
@@ -16,16 +16,6 @@
  */
 package org.apache.logging.log4j.core.pattern;
 
-import static org.junit.Assert.*;
-
-import java.lang.reflect.Field;
-import java.lang.reflect.Modifier;
-import java.text.SimpleDateFormat;
-import java.util.Arrays;
-import java.util.Calendar;
-import java.util.Collection;
-import java.util.Date;
-import java.util.TimeZone;
 import org.apache.logging.log4j.core.AbstractLogEvent;
 import org.apache.logging.log4j.core.LogEvent;
 import org.apache.logging.log4j.core.time.Instant;
@@ -34,14 +24,19 @@ import org.apache.logging.log4j.core.util.Constants;
 import org.apache.logging.log4j.core.util.datetime.FixedDateFormat;
 import 
org.apache.logging.log4j.core.util.datetime.FixedDateFormat.FixedTimeZoneFormat;
 import org.apache.logging.log4j.util.Strings;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.Parameterized;
+import org.junit.jupiter.api.Test;
+
+import java.text.SimpleDateFormat;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.TimeZone;
 
-@RunWith(Parameterized.class)
-public class DatePatternConverterTest {
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNull;
 
-    private class MyLogEvent extends AbstractLogEvent {
+abstract class DatePatternConverterTestBase {
+
+    private static final class MyLogEvent extends AbstractLogEvent {
         private static final long serialVersionUID = 0;
 
         @Override
@@ -83,24 +78,11 @@ public class DatePatternConverterTest {
             FixedDateFormat.FixedFormat.ISO8601_OFFSET_DATE_TIME_HHCMM.name();
 
     private static final String[] ISO8601_FORMAT_OPTIONS = {ISO8601};
+    
+    private final boolean threadLocalsEnabled;
 
-    @Parameterized.Parameters(name = "threadLocalEnabled={0}")
-    public static Collection<Object[]> data() {
-        return Arrays.asList(new Object[][] {{Boolean.TRUE}, {Boolean.FALSE}});
-    }
-
-    public DatePatternConverterTest(final Boolean threadLocalEnabled) throws 
Exception {
-        // Setting the system property does not work: the Constant field has 
already been initialized...
-        // System.setProperty("log4j2.enable.threadlocals", 
threadLocalEnabled.toString());
-
-        final Field field = 
Constants.class.getDeclaredField("ENABLE_THREADLOCALS");
-        field.setAccessible(true); // make non-private
-
-        final Field modifiersField = Field.class.getDeclaredField("modifiers");
-        modifiersField.setAccessible(true);
-        modifiersField.setInt(field, field.getModifiers() & ~Modifier.FINAL); 
// make non-final
-
-        field.setBoolean(null, threadLocalEnabled.booleanValue());
+    DatePatternConverterTestBase(final boolean threadLocalsEnabled) {
+        this.threadLocalsEnabled = threadLocalsEnabled;
     }
 
     private static Date date(final int year, final int month, final int date) {
@@ -119,12 +101,17 @@ public class DatePatternConverterTest {
     }
 
     @Test
-    public void testFormatDateStringBuilderDefaultPattern() {
+    void testThreadLocalsConstant() {
+        assertEquals(threadLocalsEnabled, Constants.ENABLE_THREADLOCALS);
+    }
+
+    @Test
+    void testFormatDateStringBuilderDefaultPattern() {
         assertDatePattern(null, date(2001, 1, 1), "2001-02-01 14:15:16,123");
     }
 
     @Test
-    public void testFormatDateStringBuilderIso8601() {
+    void testFormatDateStringBuilderIso8601() {
         final DatePatternConverter converter = 
DatePatternConverter.newInstance(ISO8601_FORMAT_OPTIONS);
         final StringBuilder sb = new StringBuilder();
         converter.format(date(2001, 1, 1), sb);
@@ -134,19 +121,19 @@ public class DatePatternConverterTest {
     }
 
     @Test
-    public void testFormatDateStringBuilderIso8601BasicWithPeriod() {
+    void testFormatDateStringBuilderIso8601BasicWithPeriod() {
         assertDatePattern(
                 FixedDateFormat.FixedFormat.ISO8601_BASIC_PERIOD.name(), 
date(2001, 1, 1), "20010201T141516.123");
     }
 
     @Test
-    public void testFormatDateStringBuilderIso8601WithPeriod() {
+    void testFormatDateStringBuilderIso8601WithPeriod() {
         assertDatePattern(
                 FixedDateFormat.FixedFormat.ISO8601_PERIOD.name(), date(2001, 
1, 1), "2001-02-01T14:15:16.123");
     }
 
     @Test
-    public void testFormatDateStringBuilderIso8601WithPeriodMicroseconds() {
+    void testFormatDateStringBuilderIso8601WithPeriodMicroseconds() {
         final String[] pattern = 
{FixedDateFormat.FixedFormat.ISO8601_PERIOD_MICROS.name(), "Z"};
         final DatePatternConverter converter = 
DatePatternConverter.newInstance(pattern);
         final StringBuilder sb = new StringBuilder();
@@ -162,12 +149,12 @@ public class DatePatternConverterTest {
     }
 
     @Test
-    public void testFormatDateStringBuilderOriginalPattern() {
+    void testFormatDateStringBuilderOriginalPattern() {
         assertDatePattern("yyyy/MM/dd HH-mm-ss.SSS", date(2001, 1, 1), 
"2001/02/01 14-15-16.123");
     }
 
     @Test
-    public void testFormatLogEventStringBuilderDefaultPattern() {
+    void testFormatLogEventStringBuilderDefaultPattern() {
         final LogEvent event = new MyLogEvent();
         final DatePatternConverter converter = 
DatePatternConverter.newInstance(null);
         final StringBuilder sb = new StringBuilder();
@@ -178,7 +165,7 @@ public class DatePatternConverterTest {
     }
 
     @Test
-    public void testFormatLogEventStringBuilderIso8601() {
+    void testFormatLogEventStringBuilderIso8601() {
         final LogEvent event = new MyLogEvent();
         final DatePatternConverter converter = 
DatePatternConverter.newInstance(ISO8601_FORMAT_OPTIONS);
         final StringBuilder sb = new StringBuilder();
@@ -189,7 +176,7 @@ public class DatePatternConverterTest {
     }
 
     @Test
-    public void testFormatAmericanPatterns() {
+    void testFormatAmericanPatterns() {
         final Date date = date(2011, 2, 11);
         assertDatePattern("US_MONTH_DAY_YEAR4_TIME", date, "11/03/2011 
14:15:16.123");
         assertDatePattern("US_MONTH_DAY_YEAR2_TIME", date, "11/03/11 
14:15:16.123");
@@ -208,7 +195,7 @@ public class DatePatternConverterTest {
     }
 
     @Test
-    public void testFormatLogEventStringBuilderIso8601TimezoneJST() {
+    void testFormatLogEventStringBuilderIso8601TimezoneJST() {
         final LogEvent event = new MyLogEvent();
         final String[] optionsWithTimezone = {ISO8601, "JST"};
         final DatePatternConverter converter = 
DatePatternConverter.newInstance(optionsWithTimezone);
@@ -226,7 +213,7 @@ public class DatePatternConverterTest {
     }
 
     @Test
-    public void testFormatLogEventStringBuilderIso8601TimezoneOffsetHHCMM() {
+    void testFormatLogEventStringBuilderIso8601TimezoneOffsetHHCMM() {
         final LogEvent event = new MyLogEvent();
         final String[] optionsWithTimezone = {ISO8601_OFFSET_DATE_TIME_HHCMM};
         final DatePatternConverter converter = 
DatePatternConverter.newInstance(optionsWithTimezone);
@@ -240,7 +227,7 @@ public class DatePatternConverterTest {
     }
 
     @Test
-    public void testFormatLogEventStringBuilderIso8601TimezoneOffsetHHMM() {
+    void testFormatLogEventStringBuilderIso8601TimezoneOffsetHHMM() {
         final LogEvent event = new MyLogEvent();
         final String[] optionsWithTimezone = {ISO8601_OFFSET_DATE_TIME_HHMM};
         final DatePatternConverter converter = 
DatePatternConverter.newInstance(optionsWithTimezone);
@@ -254,7 +241,7 @@ public class DatePatternConverterTest {
     }
 
     @Test
-    public void testFormatLogEventStringBuilderIso8601TimezoneUTC() {
+    void testFormatLogEventStringBuilderIso8601TimezoneUTC() {
         final LogEvent event = new MyLogEvent();
         final DatePatternConverter converter = 
DatePatternConverter.newInstance(new String[] {"ISO8601", "UTC"});
         final StringBuilder sb = new StringBuilder();
@@ -270,7 +257,7 @@ public class DatePatternConverterTest {
     }
 
     @Test
-    public void testFormatLogEventStringBuilderIso8601TimezoneZ() {
+    void testFormatLogEventStringBuilderIso8601TimezoneZ() {
         final LogEvent event = new MyLogEvent();
         final String[] optionsWithTimezone = {ISO8601, "Z"};
         final DatePatternConverter converter = 
DatePatternConverter.newInstance(optionsWithTimezone);
@@ -287,7 +274,7 @@ public class DatePatternConverterTest {
     }
 
     @Test
-    public void testFormatObjectStringBuilderDefaultPattern() {
+    void testFormatObjectStringBuilderDefaultPattern() {
         final DatePatternConverter converter = 
DatePatternConverter.newInstance(null);
         final StringBuilder sb = new StringBuilder();
         converter.format("nondate", sb);
@@ -297,7 +284,7 @@ public class DatePatternConverterTest {
     }
 
     @Test
-    public void testFormatStringBuilderObjectArrayDefaultPattern() {
+    void testFormatStringBuilderObjectArrayDefaultPattern() {
         final DatePatternConverter converter = 
DatePatternConverter.newInstance(null);
         final StringBuilder sb = new StringBuilder();
         converter.format(sb, date(2001, 1, 1), date(2002, 2, 2), date(2003, 3, 
3));
@@ -307,7 +294,7 @@ public class DatePatternConverterTest {
     }
 
     @Test
-    public void testFormatStringBuilderObjectArrayIso8601() {
+    void testFormatStringBuilderObjectArrayIso8601() {
         final DatePatternConverter converter = 
DatePatternConverter.newInstance(ISO8601_FORMAT_OPTIONS);
         final StringBuilder sb = new StringBuilder();
         converter.format(sb, date(2001, 1, 1), date(2002, 2, 2), date(2003, 3, 
3));
@@ -317,49 +304,49 @@ public class DatePatternConverterTest {
     }
 
     @Test
-    public void testGetPatternReturnsDefaultForEmptyOptionsArray() {
+    void testGetPatternReturnsDefaultForEmptyOptionsArray() {
         assertEquals(
                 DEFAULT_PATTERN,
                 
DatePatternConverter.newInstance(Strings.EMPTY_ARRAY).getPattern());
     }
 
     @Test
-    public void testGetPatternReturnsDefaultForInvalidPattern() {
+    void testGetPatternReturnsDefaultForInvalidPattern() {
         final String[] invalid = {"ABC I am not a valid date pattern"};
         assertEquals(DEFAULT_PATTERN, 
DatePatternConverter.newInstance(invalid).getPattern());
     }
 
     @Test
-    public void testGetPatternReturnsDefaultForNullOptions() {
+    void testGetPatternReturnsDefaultForNullOptions() {
         assertEquals(DEFAULT_PATTERN, 
DatePatternConverter.newInstance(null).getPattern());
     }
 
     @Test
-    public void testGetPatternReturnsDefaultForSingleNullElementOptionsArray() 
{
+    void testGetPatternReturnsDefaultForSingleNullElementOptionsArray() {
         assertEquals(
                 DEFAULT_PATTERN, DatePatternConverter.newInstance(new 
String[1]).getPattern());
     }
 
     @Test
-    public void testGetPatternReturnsDefaultForTwoNullElementsOptionsArray() {
+    void testGetPatternReturnsDefaultForTwoNullElementsOptionsArray() {
         assertEquals(
                 DEFAULT_PATTERN, DatePatternConverter.newInstance(new 
String[2]).getPattern());
     }
 
     @Test
-    public void testGetPatternReturnsNullForUnix() {
+    void testGetPatternReturnsNullForUnix() {
         final String[] options = {"UNIX"};
         assertNull(DatePatternConverter.newInstance(options).getPattern());
     }
 
     @Test
-    public void testGetPatternReturnsNullForUnixMillis() {
+    void testGetPatternReturnsNullForUnixMillis() {
         final String[] options = {"UNIX_MILLIS"};
         assertNull(DatePatternConverter.newInstance(options).getPattern());
     }
 
     @Test
-    public void testInvalidLongPatternIgnoresExcessiveDigits() {
+    void testInvalidLongPatternIgnoresExcessiveDigits() {
         final StringBuilder preciseBuilder = new StringBuilder();
         final StringBuilder milliBuilder = new StringBuilder();
         final LogEvent event = new MyLogEvent();
@@ -402,21 +389,21 @@ public class DatePatternConverterTest {
             final String expected = milliBuilder.append(tz).toString();
 
             assertEquals(
-                    "format = " + format + ", pattern = " + pattern + ", 
precisePattern = " + precisePattern,
                     expected,
-                    preciseBuilder.toString());
+                    preciseBuilder.toString(),
+                    "format = " + format + ", pattern = " + pattern + ", 
precisePattern = " + precisePattern);
             // System.out.println(preciseOptions[0] + ": " + precise);
         }
     }
 
     @Test
-    public void testNewInstanceAllowsNullParameter() {
+    void testNewInstanceAllowsNullParameter() {
         DatePatternConverter.newInstance(null); // no errors
     }
 
     // test with all formats from one 'n' (100s of millis) to 'nnnnnnnnn' 
(nanosecond precision)
     @Test
-    public void testPredefinedFormatWithAnyValidNanoPrecision() {
+    void testPredefinedFormatWithAnyValidNanoPrecision() {
         final StringBuilder preciseBuilder = new StringBuilder();
         final StringBuilder milliBuilder = new StringBuilder();
         final LogEvent event = new MyLogEvent();
@@ -428,7 +415,7 @@ public class DatePatternConverterTest {
                     if (pattern.endsWith("n")
                             || pattern.matches(".+n+X*")
                             || pattern.matches(".+n+Z*")
-                            || pattern.indexOf("SSS") < 0) {
+                            || !pattern.contains("SSS")) {
                         // ignore patterns that already have precise time 
formats
                         // ignore patterns that do not use seconds.
                         continue;
@@ -451,14 +438,14 @@ public class DatePatternConverterTest {
                             : Strings.EMPTY;
                     milliBuilder.setLength(milliBuilder.length() - 
truncateLen); // truncate millis
                     final String expected = milliBuilder
-                            .append("987123456".substring(0, i))
+                            .append("987123456", 0, i)
                             .append(tz)
                             .toString();
 
                     assertEquals(
-                            "format = " + format + ", pattern = " + pattern + 
", precisePattern = " + precisePattern,
                             expected,
-                            preciseBuilder.toString());
+                            preciseBuilder.toString(),
+                            "format = " + format + ", pattern = " + pattern + 
", precisePattern = " + precisePattern);
                     // System.out.println(preciseOptions[0] + ": " + precise);
                 }
             }
@@ -466,7 +453,7 @@ public class DatePatternConverterTest {
     }
 
     @Test
-    public void testPredefinedFormatWithoutTimezone() {
+    void testPredefinedFormatWithoutTimezone() {
         for (final FixedDateFormat.FixedFormat format : 
FixedDateFormat.FixedFormat.values()) {
             final String[] options = {format.name()};
             final DatePatternConverter converter = 
DatePatternConverter.newInstance(options);
@@ -475,7 +462,7 @@ public class DatePatternConverterTest {
     }
 
     @Test
-    public void testPredefinedFormatWithTimezone() {
+    void testPredefinedFormatWithTimezone() {
         for (final FixedDateFormat.FixedFormat format : 
FixedDateFormat.FixedFormat.values()) {
             final String[] options = {format.name(), "PST"}; // Pacific 
Standard Time=UTC-8:00
             final DatePatternConverter converter = 
DatePatternConverter.newInstance(options);
diff --git 
a/log4j-core-test/src/test/java/org/apache/logging/log4j/core/pattern/DatePatternConverterWithThreadLocalsTest.java
 
b/log4j-core-test/src/test/java/org/apache/logging/log4j/core/pattern/DatePatternConverterWithThreadLocalsTest.java
new file mode 100644
index 0000000000..e116120a97
--- /dev/null
+++ 
b/log4j-core-test/src/test/java/org/apache/logging/log4j/core/pattern/DatePatternConverterWithThreadLocalsTest.java
@@ -0,0 +1,30 @@
+/*
+ * 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 org.apache.logging.log4j.test.junit.SetTestProperty;
+import org.apache.logging.log4j.test.junit.UsingTestProperties;
+
+@SetTestProperty(key = "log4j2.is.webapp", value = "false")
+@SetTestProperty(key = "log4j2.enable.threadlocals", value = "true")
+@UsingTestProperties
+class DatePatternConverterWithThreadLocalsTest extends 
DatePatternConverterTestBase {
+
+    DatePatternConverterWithThreadLocalsTest() {
+        super(true);
+    }
+}
diff --git 
a/log4j-core-test/src/test/java/org/apache/logging/log4j/core/pattern/DatePatternConverterWithoutThreadLocalsTest.java
 
b/log4j-core-test/src/test/java/org/apache/logging/log4j/core/pattern/DatePatternConverterWithoutThreadLocalsTest.java
new file mode 100644
index 0000000000..1559e28efb
--- /dev/null
+++ 
b/log4j-core-test/src/test/java/org/apache/logging/log4j/core/pattern/DatePatternConverterWithoutThreadLocalsTest.java
@@ -0,0 +1,29 @@
+/*
+ * 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 org.apache.logging.log4j.test.junit.SetTestProperty;
+import org.apache.logging.log4j.test.junit.UsingTestProperties;
+
+@SetTestProperty(key = "log4j2.enable.threadlocals", value = "false")
+@UsingTestProperties
+class DatePatternConverterWithoutThreadLocalsTest extends 
DatePatternConverterTestBase {
+
+    DatePatternConverterWithoutThreadLocalsTest() {
+        super(false);
+    }
+}

Reply via email to