diff --git a/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/Config.java b/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/Config.java index 7d85a52..b8d75b3 100644 --- a/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/Config.java +++ b/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/Config.java @@ -18,6 +18,8 @@ import org.apache.commons.cli.HelpFormatter; import picocli.CommandLine; import java.io.File; +import java.nio.file.Files; +import java.nio.file.Path; import java.util.*; import java.util.regex.Pattern; @@ -45,7 +47,7 @@ public class Config { private boolean safeMode; @Getter(AccessLevel.NONE) - @CommandLine.Option(names = {"-m", "--mkvtoolnix"}, defaultValue = "C:\\Program Files\\MKVToolNix", description = "path to mkvtoolnix installation") + @Setter(AccessLevel.NONE) private File mkvToolNix; @Min(value = 1) @@ -80,8 +82,20 @@ public class Config { @CommandLine.Option(names = {"-l", "--library"}, required = true, description = "path to library") public void setLibraryPath(File libraryPath) { - this.libraryPath = libraryPath; if (!libraryPath.exists()) throw new CommandLine.ParameterException(spec.commandLine(), "Path does not exist: " + libraryPath.getAbsolutePath()); + this.libraryPath = libraryPath; + } + + @CommandLine.Option(names = {"-m", "--mkvtoolnix"}, defaultValue = "C:\\Program Files\\MKVToolNix", description = "path to mkvtoolnix installation") + public void setMkvToolNix(File mkvToolNix) { + this.mkvToolNix = mkvToolNix; + if (!mkvToolNix.exists() + || !Path.of(getPathFor(MkvToolNix.MKV_MERGER)).toFile().exists() + || !Path.of(getPathFor(MkvToolNix.MKV_PROP_EDIT)).toFile().exists()) { + throw new CommandLine.ParameterException(spec.commandLine(), + "Invalid path to mkvtoolnix installation: " + mkvToolNix.getAbsolutePath()); + } + } public static Config getInstance() { diff --git a/src/test/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/MkvToolNixPathConfigParameterTest.java b/src/test/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/MkvToolNixPathConfigParameterTest.java new file mode 100644 index 0000000..519645d --- /dev/null +++ b/src/test/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/MkvToolNixPathConfigParameterTest.java @@ -0,0 +1,19 @@ +package at.pcgamingfreaks.mkvaudiosubtitlechanger.config; + +import at.pcgamingfreaks.mkvaudiosubtitlechanger.Main; +import org.junit.jupiter.api.Test; +import picocli.CommandLine; + +import static at.pcgamingfreaks.mkvaudiosubtitlechanger.util.CommandLineOptionsUtil.optionOf; +import static at.pcgamingfreaks.mkvaudiosubtitlechanger.util.TestUtil.args; +import static org.junit.jupiter.api.Assertions.*; + +class MkvToolNixPathConfigParameterTest { + + @Test + void validate() { + Main sut = new Main(); + assertThrows(CommandLine.ParameterException.class, () -> CommandLine.populateCommand(sut, args("-m", "./"))); + assertThrows(CommandLine.ParameterException.class, () -> CommandLine.populateCommand(sut, args("-m"))); + } +} \ No newline at end of file diff --git a/src/test/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/PathConfigParameterTest.java b/src/test/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/PathConfigParameterTest.java index 1cb778b..d5aaaca 100644 --- a/src/test/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/PathConfigParameterTest.java +++ b/src/test/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/PathConfigParameterTest.java @@ -1,10 +1,6 @@ package at.pcgamingfreaks.mkvaudiosubtitlechanger.config; import at.pcgamingfreaks.mkvaudiosubtitlechanger.Main; -import org.apache.commons.cli.CommandLineParser; -import org.apache.commons.cli.DefaultParser; -import org.apache.commons.cli.Options; -import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.Arguments; @@ -16,23 +12,12 @@ import java.nio.file.Path; import java.util.function.Function; import java.util.stream.Stream; -import static at.pcgamingfreaks.mkvaudiosubtitlechanger.model.ConfigProperty.LIBRARY; -import static at.pcgamingfreaks.mkvaudiosubtitlechanger.util.CommandLineOptionsUtil.optionOf; import static at.pcgamingfreaks.mkvaudiosubtitlechanger.util.PathUtils.TEST_DIR; import static at.pcgamingfreaks.mkvaudiosubtitlechanger.util.PathUtils.TEST_FILE; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertThrows; class PathConfigParameterTest { - private static CommandLineParser parser; - private static Options options; - - @BeforeAll - static void before() { - parser = new DefaultParser(); - options = new Options(); - options.addOption(optionOf(LIBRARY, LIBRARY.abrv(), LIBRARY.args())); - } private static Stream provideTestCases() { return Stream.of( diff --git a/src/test/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/PatternConfigParameterTest.java b/src/test/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/PatternConfigParameterTest.java index 569de48..ec010c1 100644 --- a/src/test/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/PatternConfigParameterTest.java +++ b/src/test/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/PatternConfigParameterTest.java @@ -22,15 +22,6 @@ import static at.pcgamingfreaks.mkvaudiosubtitlechanger.util.TestUtil.argumentsO import static org.junit.jupiter.api.Assertions.*; class PatternConfigParameterTest { - 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(), INCLUDE_PATTERN.args())); - } private static Stream provideTestCases() { return Stream.of( diff --git a/src/test/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/validator/MkvToolNixPathValidatorTest.java b/src/test/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/validator/MkvToolNixPathValidatorTest.java deleted file mode 100644 index fb66685..0000000 --- a/src/test/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/validator/MkvToolNixPathValidatorTest.java +++ /dev/null @@ -1,65 +0,0 @@ -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.io.File; -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.util.CommandLineOptionsUtil.optionOf; -import static org.junit.jupiter.api.Assertions.*; - -class MkvToolNixPathValidatorTest { - private static final String TEST_INVALID_DIR = "src/test/resources/test-dir"; - private static final String TEST_MKVTOOLNIX_DIR = "src/test/resources/mkvtoolnix"; - private static final String TEST_MKVTOOLNIX_EXE_DIR = "src/test/resources/mkvtoolnix_exe"; - - private static CommandLineParser parser; - private static Options options; - - @BeforeAll - static void before() { - parser = new DefaultParser(); - options = new Options(); - options.addOption(optionOf(MKV_TOOL_NIX, MKV_TOOL_NIX.abrv(), MKV_TOOL_NIX.args())); - } - - private static Stream provideTestCases() { - return Stream.of( - Arguments.of(MKV_TOOL_NIX, false, null, "", new String[]{"-m", TEST_MKVTOOLNIX_DIR}, VALID), - Arguments.of(MKV_TOOL_NIX, true, null, "", new String[]{"-m", TEST_MKVTOOLNIX_EXE_DIR}, VALID), - Arguments.of(MKV_TOOL_NIX, false, null, "mkvtoolnix: " + TEST_MKVTOOLNIX_EXE_DIR, new String[]{}, VALID), - Arguments.of(MKV_TOOL_NIX, true, null, "mkvtoolnix: " + TEST_MKVTOOLNIX_DIR, new String[]{}, VALID), - Arguments.of(MKV_TOOL_NIX, false, Path.of(TEST_MKVTOOLNIX_EXE_DIR).toFile(), "", new String[]{}, DEFAULT), - Arguments.of(MKV_TOOL_NIX, false, null, "", new String[]{}, NOT_PRESENT), - Arguments.of(MKV_TOOL_NIX, true, null, "", new String[]{}, MISSING), - Arguments.of(MKV_TOOL_NIX, true, null, "", new String[]{"-m", TEST_INVALID_DIR}, INVALID) - ); - } - - @ParameterizedTest - @MethodSource("provideTestCases") - void validate(ConfigProperty property, boolean required, File defaultValue, String yamlArgs, String[] cmdArgs, - ValidationResult expectedResult) throws ParseException, YamlInvalidContentException { - MkvToolNixPathValidator underTest = new MkvToolNixPathValidator(property, required, defaultValue); - - ValidationResult result = underTest.validate(new YAML(yamlArgs), parser.parse(options, cmdArgs)); - - assertEquals(expectedResult, result); - } - -} \ No newline at end of file