Skip to content

Commit 5d15e0e

Browse files
committed
Allow more log levels in log() Fix function. (#366)
* Disallow unsupported levels. * Add tests.
1 parent f1405ea commit 5d15e0e

File tree

4 files changed

+54
-14
lines changed

4 files changed

+54
-14
lines changed

build.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ subprojects {
4949
'mockito': '2.27.0',
5050
'requirejs': '2.3.6',
5151
'slf4j': '1.7.21',
52+
'slf4j_mock': '2.3.0',
5253
'wiremock': '2.33.2',
5354
'xtext': '2.26.0'
5455
]

metafix/build.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ dependencies {
2525
testImplementation "org.eclipse.xtext:org.eclipse.xtext.xbase.testing:${versions.xtext}"
2626
testImplementation "org.junit.jupiter:junit-jupiter-api:${versions.junit_jupiter}"
2727
testImplementation "org.junit.platform:junit-platform-launcher:${versions.junit_platform}"
28+
testImplementation "org.simplify4u:slf4j2-mock:${versions.slf4j_mock}"
2829

2930
testRuntimeOnly "org.junit.jupiter:junit-jupiter-engine:${versions.junit_jupiter}"
3031

metafix/src/main/java/org/metafacture/metafix/FixMethod.java

Lines changed: 25 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,9 @@
2424
import org.metafacture.metamorph.functions.URLEncode;
2525
import org.metafacture.metamorph.maps.FileMap;
2626

27+
import org.slf4j.Logger;
28+
import org.slf4j.LoggerFactory;
29+
2730
import java.io.File;
2831
import java.io.IOException;
2932
import java.util.Arrays;
@@ -43,9 +46,6 @@
4346
import java.util.regex.Pattern;
4447
import java.util.stream.Collectors;
4548

46-
import org.slf4j.Logger;
47-
import org.slf4j.LoggerFactory;
48-
4949
public enum FixMethod implements FixFunction { // checkstyle-disable-line ClassDataAbstractionCoupling|ClassFanOutComplexity
5050

5151
// SCRIPT-LEVEL METHODS:
@@ -68,18 +68,29 @@ public void apply(final Metafix metafix, final Record record, final List<String>
6868
log {
6969
@Override
7070
public void apply(final Metafix metafix, final Record record, final List<String> params, final Map<String, String> options) {
71-
final String logMessage = params.get(0);
72-
final String logLevel = options.get("level"); // does not support Catmandu lop level option FATAL
73-
74-
if (logLevel.equals("WARN")) {
75-
LOG.warn(logMessage);
76-
}
77-
else if (logLevel.equals("ERROR")) {
78-
LOG.error(logMessage);
79-
}
80-
else {
81-
LOG.info(logMessage);
71+
// does not support Catmandu log level option FATAL
72+
73+
final String level = options.getOrDefault("level", "INFO");
74+
final Consumer<String> consumer;
75+
76+
switch (level) {
77+
case "DEBUG":
78+
consumer = LOG::debug;
79+
break;
80+
case "ERROR":
81+
consumer = LOG::error;
82+
break;
83+
case "INFO":
84+
consumer = LOG::info;
85+
break;
86+
case "WARN":
87+
consumer = LOG::warn;
88+
break;
89+
default:
90+
throw new IllegalArgumentException("Unsupported log level: " + level);
8291
}
92+
93+
consumer.accept(params.get(0));
8394
}
8495
},
8596
nothing {

metafix/src/test/java/org/metafacture/metafix/MetafixScriptTest.java

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import org.mockito.Mock;
2727
import org.mockito.Mockito;
2828
import org.mockito.junit.jupiter.MockitoExtension;
29+
import org.slf4j.Logger;
2930

3031
import java.io.IOException;
3132
import java.util.Arrays;
@@ -45,6 +46,9 @@ public class MetafixScriptTest {
4546
private static final String CSV_MAP = "src/test/resources/org/metafacture/metafix/maps/test.csv";
4647
private static final String TSV_MAP = "src/test/resources/org/metafacture/metafix/maps/test.tsv";
4748

49+
@Mock(name = "org.metafacture.metafix.FixMethod")
50+
private Logger fixMethodLogger;
51+
4852
@Mock
4953
private StreamReceiver streamReceiver;
5054

@@ -193,6 +197,29 @@ public void shouldPutExternalFileMapWithNameAndOptions() {
193197
assertMap("put_filemap('" + TSV_MAP + "', '" + MAP_NAME + "', sep_char: '\t')", MAP_NAME);
194198
}
195199

200+
@Test
201+
public void shouldLog() {
202+
assertFix("log('test')", f -> {
203+
Mockito.verify(fixMethodLogger).info("test");
204+
Mockito.verifyNoMoreInteractions(fixMethodLogger);
205+
});
206+
}
207+
208+
@Test
209+
public void shouldLogWithLevel() {
210+
assertFix("log('test', level: 'DEBUG')", f -> {
211+
Mockito.verify(fixMethodLogger).debug("test");
212+
Mockito.verifyNoMoreInteractions(fixMethodLogger);
213+
});
214+
}
215+
216+
@Test
217+
public void shouldNotLogWithUnsupportedLevel() {
218+
MetafixTestHelpers.assertProcessException(IllegalArgumentException.class, "Unsupported log level: FATAL", () ->
219+
assertFix("log('test', level: 'FATAL')", f -> { })
220+
);
221+
}
222+
196223
@Test
197224
public void shouldDoNothing() {
198225
assertFix("nothing()", f -> { });

0 commit comments

Comments
 (0)