From 558efa4b559f51953492c158910b6c941dee9e27 Mon Sep 17 00:00:00 2001 From: Jean-Kevin KPADEY Date: Mon, 7 Jul 2025 22:41:28 +0200 Subject: [PATCH] refactor: rework the MinimalVisibilityCommand regex --- .../common/MinimalVisibilityCommand.java | 10 ++++---- .../common/MinimalVisibilityCommandTest.java | 23 +++++++++++++++++++ .../github/mivek/parser/MetarParserTest.java | 2 +- 3 files changed, 29 insertions(+), 6 deletions(-) create mode 100644 metarParser-parsers/src/test/java/io/github/mivek/command/common/MinimalVisibilityCommandTest.java diff --git a/metarParser-parsers/src/main/java/io/github/mivek/command/common/MinimalVisibilityCommand.java b/metarParser-parsers/src/main/java/io/github/mivek/command/common/MinimalVisibilityCommand.java index 5f6e4e51..af3ad71e 100644 --- a/metarParser-parsers/src/main/java/io/github/mivek/command/common/MinimalVisibilityCommand.java +++ b/metarParser-parsers/src/main/java/io/github/mivek/command/common/MinimalVisibilityCommand.java @@ -10,7 +10,7 @@ */ public final class MinimalVisibilityCommand implements Command { /** Pattern for the minimum visibility. */ - public static final Pattern MIN_VISIBILITY_REGEX = Pattern.compile("^(\\d{4}[NnEeSsWw]{1,2})$"); + public static final Pattern MIN_VISIBILITY_REGEX = Pattern.compile("^(\\d{4})(N|NE|E|SE|S|SW|W|NW)$"); /** * Protected constructor. @@ -20,14 +20,14 @@ public final class MinimalVisibilityCommand implements Command { @Override public boolean execute(final AbstractWeatherContainer container, final String part) { - String[] matches = Regex.pregMatch(MIN_VISIBILITY_REGEX, part); - container.getVisibility().setMinVisibility(Integer.parseInt(matches[1].substring(0, 4))); - container.getVisibility().setMinDirection(matches[1].substring(4)); + String[] matches = Regex.pregMatch(MIN_VISIBILITY_REGEX, part.toUpperCase()); + container.getVisibility().setMinVisibility(Integer.parseInt(matches[1])); + container.getVisibility().setMinDirection(matches[2]); return getReturnValue(); } @Override public boolean canParse(final String input) { - return Regex.find(MIN_VISIBILITY_REGEX, input); + return Regex.find(MIN_VISIBILITY_REGEX, input.toUpperCase()); } } diff --git a/metarParser-parsers/src/test/java/io/github/mivek/command/common/MinimalVisibilityCommandTest.java b/metarParser-parsers/src/test/java/io/github/mivek/command/common/MinimalVisibilityCommandTest.java new file mode 100644 index 00000000..29f3c8d2 --- /dev/null +++ b/metarParser-parsers/src/test/java/io/github/mivek/command/common/MinimalVisibilityCommandTest.java @@ -0,0 +1,23 @@ +package io.github.mivek.command.common; + +import io.github.mivek.model.Metar; +import io.github.mivek.model.Visibility; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.ValueSource; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +class MinimalVisibilityCommandTest { + + @ParameterizedTest + @ValueSource(strings = {"NW", "N","NE","E","SE","S","SW","W"}) + void execute(final String direction) { + MinimalVisibilityCommand command = new MinimalVisibilityCommand(); + String input = "0600" + direction; + Metar metar = new Metar(); + metar.setVisibility(new Visibility()); + command.execute(metar, input); + assertEquals(600, metar.getVisibility().getMinVisibility()); + assertEquals(direction, metar.getVisibility().getMinDirection()); + } +} \ No newline at end of file diff --git a/metarParser-parsers/src/test/java/io/github/mivek/parser/MetarParserTest.java b/metarParser-parsers/src/test/java/io/github/mivek/parser/MetarParserTest.java index 09a90678..0ffe6cd6 100644 --- a/metarParser-parsers/src/test/java/io/github/mivek/parser/MetarParserTest.java +++ b/metarParser-parsers/src/test/java/io/github/mivek/parser/MetarParserTest.java @@ -233,7 +233,7 @@ void testParseWithMinVisibility() throws ParseException { Visibility v = m.getVisibility(); assertEquals("5000m", v.getMainVisibility()); assertEquals(1100, v.getMinVisibility()); - assertEquals("w", v.getMinDirection()); + assertEquals("W", v.getMinDirection()); String des = m.toString(); assertThat(des, containsString(Messages.getInstance().getString("ToString.day.month") + "=16"));