From 33276b7aa20379210e4972c26310403cb19cb724 Mon Sep 17 00:00:00 2001 From: RatzzFatzz Date: Mon, 13 Feb 2023 23:12:08 +0100 Subject: [PATCH] Fix PatternValidator & Add PatternValidatorTest --- .../config/validator/PatternValidator.java | 6 +- .../model/ConfigProperty.java | 2 +- .../validator/BooleanValidatorTest.java | 2 +- .../MkvToolNixPathValidatorTest.java | 5 +- .../validator/PatternValidatorTest.java | 64 +++++++++++++++++++ 5 files changed, 71 insertions(+), 8 deletions(-) create mode 100644 src/test/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/validator/PatternValidatorTest.java diff --git a/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/validator/PatternValidator.java b/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/validator/PatternValidator.java index 60668d1..a3c3f3b 100644 --- a/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/validator/PatternValidator.java +++ b/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/validator/PatternValidator.java @@ -6,6 +6,8 @@ import java.util.regex.Pattern; import java.util.regex.PatternSyntaxException; public class PatternValidator extends ConfigValidator { + private static final Pattern EMPTY_PATTERN = Pattern.compile(""); + public PatternValidator(ConfigProperty property, boolean required, Pattern defaultValue) { super(property, required, defaultValue); } @@ -15,12 +17,12 @@ public class PatternValidator extends ConfigValidator { try { return Pattern.compile(value); } catch (PatternSyntaxException e) { - return null; + return EMPTY_PATTERN; } } @Override boolean isValid(Pattern result) { - return result != null; + return !result.equals(EMPTY_PATTERN); } } diff --git a/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/model/ConfigProperty.java b/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/model/ConfigProperty.java index 5a87ff9..a951f15 100644 --- a/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/model/ConfigProperty.java +++ b/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/model/ConfigProperty.java @@ -9,7 +9,7 @@ public enum ConfigProperty { SAFE_MODE("safe-mode", "s", "Test run (no files will be changes)"), WINDOWS("windows", null, "Is operating system windows"), THREADS("threads", "t", "thread count (default: 2)"), - INCLUDE_PATTERN("include-pattern", "i", "Include files matching pattern"), + INCLUDE_PATTERN("include-pattern", "p", "Include files matching pattern"), MKV_TOOL_NIX("mkvtoolnix", "m", "Path to mkv tool nix installation"), FORCED_KEYWORDS("forcedKeywords", "fk", "Additional keywords to identify forced tracks"), COMMENTARY_KEYWORDS("commentary-keywords", "ck", "Additional keywords to identify commentary tracks"), diff --git a/src/test/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/validator/BooleanValidatorTest.java b/src/test/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/validator/BooleanValidatorTest.java index c91afe1..e974c50 100644 --- a/src/test/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/validator/BooleanValidatorTest.java +++ b/src/test/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/validator/BooleanValidatorTest.java @@ -29,7 +29,7 @@ class BooleanValidatorTest { static void before() { parser = new DefaultParser(); options = new Options(); - options.addOption(optionOf(SAFE_MODE, "s", false)); + options.addOption(optionOf(SAFE_MODE, SAFE_MODE.abrv(), false)); } private static Stream provideTestCases() { diff --git a/src/test/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/validator/MkvToolNixPathValidatorTest.java b/src/test/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/validator/MkvToolNixPathValidatorTest.java index 006e7e2..6e5d262 100644 --- a/src/test/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/validator/MkvToolNixPathValidatorTest.java +++ b/src/test/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/validator/MkvToolNixPathValidatorTest.java @@ -14,16 +14,13 @@ import org.junit.jupiter.params.provider.Arguments; import org.junit.jupiter.params.provider.MethodSource; import java.io.File; -import java.nio.file.Files; import java.nio.file.Path; import java.util.stream.Stream; import static at.pcgamingfreaks.mkvaudiosubtitlechanger.config.ValidationResult.*; import static at.pcgamingfreaks.mkvaudiosubtitlechanger.config.ValidationResult.MISSING; import static at.pcgamingfreaks.mkvaudiosubtitlechanger.model.ConfigProperty.*; -import static at.pcgamingfreaks.mkvaudiosubtitlechanger.model.ConfigProperty.WINDOWS; import static at.pcgamingfreaks.mkvaudiosubtitlechanger.util.CommandLineOptionsUtil.optionOf; -import static at.pcgamingfreaks.mkvaudiosubtitlechanger.util.TestUtil.yamlList; import static org.junit.jupiter.api.Assertions.*; class MkvToolNixPathValidatorTest { @@ -34,7 +31,7 @@ class MkvToolNixPathValidatorTest { static void before() { parser = new DefaultParser(); options = new Options(); - options.addOption(optionOf(MKV_TOOL_NIX, "m", true)); + options.addOption(optionOf(MKV_TOOL_NIX, MKV_TOOL_NIX.abrv(), true)); } private static Stream provideTestCases() { diff --git a/src/test/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/validator/PatternValidatorTest.java b/src/test/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/validator/PatternValidatorTest.java new file mode 100644 index 0000000..c5124e7 --- /dev/null +++ b/src/test/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/validator/PatternValidatorTest.java @@ -0,0 +1,64 @@ +package at.pcgamingfreaks.mkvaudiosubtitlechanger.config.validator; + +import at.pcgamingfreaks.mkvaudiosubtitlechanger.config.ValidationResult; +import at.pcgamingfreaks.mkvaudiosubtitlechanger.model.ConfigProperty; +import at.pcgamingfreaks.yaml.YAML; +import at.pcgamingfreaks.yaml.YamlInvalidContentException; +import org.apache.commons.cli.CommandLineParser; +import org.apache.commons.cli.DefaultParser; +import org.apache.commons.cli.Options; +import org.apache.commons.cli.ParseException; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.Arguments; +import org.junit.jupiter.params.provider.MethodSource; + +import java.util.regex.Pattern; +import java.util.stream.Stream; + +import static at.pcgamingfreaks.mkvaudiosubtitlechanger.config.ValidationResult.*; +import static at.pcgamingfreaks.mkvaudiosubtitlechanger.config.ValidationResult.INVALID; +import static at.pcgamingfreaks.mkvaudiosubtitlechanger.model.ConfigProperty.INCLUDE_PATTERN; +import static at.pcgamingfreaks.mkvaudiosubtitlechanger.util.CommandLineOptionsUtil.optionOf; +import static at.pcgamingfreaks.mkvaudiosubtitlechanger.util.TestUtil.argumentsOf; +import static org.junit.jupiter.api.Assertions.*; + +class PatternValidatorTest { + private static CommandLineParser parser; + private static Options options; + + @BeforeAll + static void before() { + parser = new DefaultParser(); + options = new Options(); + options.addOption(optionOf(INCLUDE_PATTERN, INCLUDE_PATTERN.abrv(), true)); + } + + private static Stream provideTestCases() { + return Stream.of( + argumentsOf(INCLUDE_PATTERN, false, null, "include-pattern: \"[abd]?.*\"", new String[]{}, VALID), + argumentsOf(INCLUDE_PATTERN, true, null, "", new String[]{"-p", "[abd]?.*"}, VALID), + + argumentsOf(INCLUDE_PATTERN, false, Pattern.compile(".*"), "", new String[]{}, DEFAULT), + argumentsOf(INCLUDE_PATTERN, true, Pattern.compile(".*"), "", new String[]{}, DEFAULT), + + argumentsOf(INCLUDE_PATTERN, true, null, "", new String[]{}, MISSING), + argumentsOf(INCLUDE_PATTERN, false, null, "", new String[]{}, NOT_PRESENT), + + argumentsOf(INCLUDE_PATTERN, true, null, "", new String[]{"-p", "?."}, INVALID), + argumentsOf(INCLUDE_PATTERN, false, null, "include-pattern: \"[arst*\"", new String[]{}, INVALID), + argumentsOf(INCLUDE_PATTERN, true, Pattern.compile(".?"), "", new String[]{"-p", "?."}, INVALID) + ); + } + + @ParameterizedTest + @MethodSource("provideTestCases") + void validate(ConfigProperty property, boolean required, Pattern defaultValue, String yamlArgs, String[] cmdArgs, + ValidationResult expectedResult) throws ParseException, YamlInvalidContentException { + PatternValidator underTest = new PatternValidator(property, required, defaultValue); + + ValidationResult result = underTest.validate(new YAML(yamlArgs), parser.parse(options, cmdArgs)); + + assertEquals(expectedResult, result); + } +} \ No newline at end of file