diff --git a/pom.xml b/pom.xml
index 09111eb..0e2416b 100644
--- a/pom.xml
+++ b/pom.xml
@@ -132,6 +132,35 @@
picocli
4.7.6
+
+
+
+ org.hibernate.validator
+ hibernate-validator
+ 8.0.1.Final
+
+
+
+
+ org.glassfish
+ jakarta.el
+ 4.0.2
+
+
+
+
+ jakarta.el
+ jakarta.el-api
+ 4.0.0
+
+
+
+
+ jakarta.validation
+ jakarta.validation-api
+ 3.0.2
+
+
org.apache.logging.log4j
diff --git a/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/Main.java b/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/Main.java
index 66dac88..581e305 100644
--- a/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/Main.java
+++ b/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/Main.java
@@ -7,20 +7,29 @@ import at.pcgamingfreaks.mkvaudiosubtitlechanger.impl.kernel.CoherentAttributeUp
import at.pcgamingfreaks.mkvaudiosubtitlechanger.impl.kernel.DefaultAttributeUpdaterKernel;
import at.pcgamingfreaks.mkvaudiosubtitlechanger.impl.MkvFileCollector;
import at.pcgamingfreaks.mkvaudiosubtitlechanger.util.ProjectUtil;
+import jakarta.validation.ConstraintViolation;
+import jakarta.validation.Validation;
+import jakarta.validation.Validator;
import lombok.Getter;
import lombok.extern.slf4j.Slf4j;
import picocli.CommandLine;
+import java.util.Set;
+
@Slf4j
@CommandLine.Command(mixinStandardHelpOptions = true, versionProvider = ProjectUtil.class)
public class Main implements Runnable {
@Getter
@CommandLine.ArgGroup(exclusive = false)
- private Config config = Config.getInstance();
+ private Config config;
+
+ @CommandLine.Spec
+ CommandLine.Model.CommandSpec spec;
@Override
public void run() {
+ validate();
Config.setInstance(config);
AttributeUpdaterKernel kernel = Config.getInstance().getCoherent() != null
? new CoherentAttributeUpdaterKernel(new MkvFileCollector(), new CachedMkvFileProcessor())
@@ -28,6 +37,19 @@ public class Main implements Runnable {
kernel.execute();
}
+ private void validate() {
+ Validator validator = Validation.buildDefaultValidatorFactory().getValidator();
+ Set> violations = validator.validate(config);
+
+ if (!violations.isEmpty()) {
+ StringBuilder errorMsg = new StringBuilder();
+ for (ConstraintViolation violation : violations) {
+ errorMsg.append("ERROR: ").append(violation.getMessage()).append("\n");
+ }
+ throw new CommandLine.ParameterException(spec.commandLine(), errorMsg.toString());
+ }
+ }
+
public static void main(String[] args) {
new CommandLine(Main.class).execute(args);
}
diff --git a/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/Config.java b/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/Config.java
index 758c0d9..65402ec 100644
--- a/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/Config.java
+++ b/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/Config.java
@@ -2,6 +2,11 @@ package at.pcgamingfreaks.mkvaudiosubtitlechanger.config;
import at.pcgamingfreaks.mkvaudiosubtitlechanger.model.AttributeConfig;
import at.pcgamingfreaks.mkvaudiosubtitlechanger.model.MkvToolNix;
+import com.sun.jna.platform.win32.Netapi32Util;
+import jakarta.validation.ConstraintViolation;
+import jakarta.validation.Validation;
+import jakarta.validation.Validator;
+import jakarta.validation.constraints.Min;
import lombok.AccessLevel;
import lombok.Getter;
import lombok.NoArgsConstructor;
@@ -36,7 +41,8 @@ public class Config {
@CommandLine.Option(names = {"-m", "--mkvtoolnix"}, defaultValue = "C:\\Program Files\\MKVToolNix", description = "path to mkvtoolnix installation")
private File mkvToolNix;
- @CommandLine.Option(names = {"-t", "--threads"}, defaultValue = "2", description = "thread count (default: 2)")
+ @Min(value = 1)
+ @CommandLine.Option(names = {"-t", "--threads"}, defaultValue = "2", description = "thread count (default: ${DEFAULT-VALUE})")
private int threads;
@CommandLine.Option(names = {"-i", "--include-pattern"}, defaultValue = ".*", description = "include files matching pattern (default: \".*\")")
private Pattern includePattern;
diff --git a/src/test/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/AttributeConfigTest.java b/src/test/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/AttributeConfigTest.java
new file mode 100644
index 0000000..22527ea
--- /dev/null
+++ b/src/test/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/AttributeConfigTest.java
@@ -0,0 +1,83 @@
+package at.pcgamingfreaks.mkvaudiosubtitlechanger.config;
+
+import at.pcgamingfreaks.mkvaudiosubtitlechanger.Main;
+import at.pcgamingfreaks.mkvaudiosubtitlechanger.model.AttributeConfig;
+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.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.Arguments;
+import org.junit.jupiter.params.provider.MethodSource;
+import picocli.CommandLine;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.stream.Stream;
+
+import static at.pcgamingfreaks.mkvaudiosubtitlechanger.model.ConfigProperty.*;
+import static at.pcgamingfreaks.mkvaudiosubtitlechanger.util.CommandLineOptionsUtil.optionOf;
+import static org.junit.jupiter.api.Assertions.*;
+
+class AttributeConfigTest {
+ private static CommandLineParser parser;
+ private static Options options;
+
+ @BeforeAll
+ static void before() {
+ parser = new DefaultParser();
+ options = new Options();
+ options.addOption(optionOf(ATTRIBUTE_CONFIG, ATTRIBUTE_CONFIG.abrv(), ATTRIBUTE_CONFIG.args()));
+ }
+
+ @BeforeEach
+ void beforeEach() {
+ Config.getInstance(true);
+ }
+
+ private static Stream provideTestCases() {
+ return Stream.of(
+ Arguments.of(args("-a", "jpn:ger"), attrConf("jpn", "ger")),
+ Arguments.of(args("-a", "jpn:ger", "jpn:eng"), attrConf("jpn", "ger", "jpn", "eng")),
+ Arguments.of(args("-a", "jpn:ger", "jpn:OFF"), attrConf("jpn", "ger", "jpn", "OFF"))
+ );
+ }
+
+ @ParameterizedTest
+ @MethodSource("provideTestCases")
+ void validate(String[] cmdArgs, List expectedConfig) {
+ Main underTest = new Main();
+ CommandLine.populateCommand(underTest, cmdArgs);
+ assertIterableEquals(expectedConfig, underTest.getConfig().getAttributeConfig());
+ }
+
+ @Test
+ void validate() {
+ Main sut = new Main();
+ assertThrows(CommandLine.MissingParameterException.class, () -> CommandLine.populateCommand(sut, new String[]{"-l", "/"}));
+ assertThrows(CommandLine.MissingParameterException.class, () -> CommandLine.populateCommand(sut, new String[]{"-l", "/", "-a"}));
+ assertThrows(CommandLine.ParameterException.class, () -> CommandLine.populateCommand(sut, new String[]{"-l", "/", "-a", "ger:"}));
+ assertThrows(CommandLine.ParameterException.class,
+ () -> CommandLine.populateCommand(sut, new String[]{"-l", "/", "-a", "ger:qwf"})); // Invalid language code
+ }
+
+ private static String[] args(String... args) {
+ String[] staticArray = new String[]{"-l", "/"};
+ String[] result = new String[staticArray.length + args.length];
+ System.arraycopy(staticArray, 0, result, 0, staticArray.length);
+ System.arraycopy(args, 0, result, staticArray.length, args.length);
+ return result;
+ }
+
+ private static List attrConf(String... languages) {
+ List conf = new ArrayList<>();
+ for (int i = 0; i < languages.length; i += 2) {
+ conf.add(new AttributeConfig(languages[i], languages[i+1]));
+ }
+ return conf;
+ }
+}
\ No newline at end of file
diff --git a/src/test/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/BooleanConfigParameterTest.java b/src/test/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/BooleanConfigParameterTest.java
new file mode 100644
index 0000000..8a3619e
--- /dev/null
+++ b/src/test/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/BooleanConfigParameterTest.java
@@ -0,0 +1,53 @@
+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.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.Arguments;
+import org.junit.jupiter.params.provider.MethodSource;
+import picocli.CommandLine;
+
+import java.util.function.Function;
+import java.util.stream.Stream;
+
+import static at.pcgamingfreaks.mkvaudiosubtitlechanger.model.ConfigProperty.*;
+import static at.pcgamingfreaks.mkvaudiosubtitlechanger.util.CommandLineOptionsUtil.optionOf;
+import static at.pcgamingfreaks.mkvaudiosubtitlechanger.util.TestUtil.args;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertIterableEquals;
+
+class BooleanConfigParameterTest {
+ private static CommandLineParser parser;
+ private static Options options;
+
+ @BeforeAll
+ static void before() {
+ parser = new DefaultParser();
+ options = new Options();
+ options.addOption(optionOf(SAFE_MODE, SAFE_MODE.abrv(), SAFE_MODE.args()));
+ }
+
+ private static Stream provideTestCases() {
+ return Stream.of(
+ Arguments.of(args("-s"), true, (Function) Config::isSafeMode),
+ Arguments.of(args("--safemode"), true, (Function) Config::isSafeMode),
+ Arguments.of(args(), false, (Function) Config::isSafeMode),
+ Arguments.of(args("-cf"), true, (Function) Config::isForceCoherent),
+ Arguments.of(args("--force-coherent"), true, (Function) Config::isForceCoherent),
+ Arguments.of(args(), false, (Function) Config::isForceCoherent),
+ Arguments.of(args("-n"), true, (Function) Config::isOnlyNewFiles),
+ Arguments.of(args(), false, (Function) Config::isOnlyNewFiles)
+ );
+ }
+
+ @ParameterizedTest
+ @MethodSource("provideTestCases")
+ void validate(String[] cmdArgs, boolean expected, Function fieldUnderTest) {
+ Main sut = new Main();
+ CommandLine.populateCommand(sut, cmdArgs);
+ assertEquals(expected, fieldUnderTest.apply(sut.getConfig()));
+ }
+}
\ No newline at end of file
diff --git a/src/test/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/ConfigLoaderTest.java b/src/test/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/ConfigTest.java
similarity index 98%
rename from src/test/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/ConfigLoaderTest.java
rename to src/test/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/ConfigTest.java
index 3849b97..10f0235 100644
--- a/src/test/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/ConfigLoaderTest.java
+++ b/src/test/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/ConfigTest.java
@@ -9,7 +9,7 @@ import java.util.List;
import static at.pcgamingfreaks.mkvaudiosubtitlechanger.util.PathUtils.TEST_FILE;
import static org.junit.jupiter.api.Assertions.*;
-class ConfigLoaderTest {
+class ConfigTest {
@Test
void initConfig() {
diff --git a/src/test/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/IntegerConfigParameterTest.java b/src/test/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/IntegerConfigParameterTest.java
new file mode 100644
index 0000000..a8142b4
--- /dev/null
+++ b/src/test/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/IntegerConfigParameterTest.java
@@ -0,0 +1,59 @@
+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;
+import org.junit.jupiter.params.provider.MethodSource;
+import picocli.CommandLine;
+
+import java.util.function.Function;
+import java.util.stream.Stream;
+
+import static at.pcgamingfreaks.mkvaudiosubtitlechanger.config.ValidationResult.*;
+import static at.pcgamingfreaks.mkvaudiosubtitlechanger.model.ConfigProperty.THREADS;
+import static at.pcgamingfreaks.mkvaudiosubtitlechanger.util.CommandLineOptionsUtil.optionOf;
+import static at.pcgamingfreaks.mkvaudiosubtitlechanger.util.TestUtil.args;
+import static at.pcgamingfreaks.mkvaudiosubtitlechanger.util.TestUtil.argumentsOf;
+import static org.junit.jupiter.api.Assertions.*;
+
+class IntegerConfigParameterTest {
+
+ private static CommandLineParser parser;
+ private static Options options;
+
+ @BeforeAll
+ static void before() {
+ parser = new DefaultParser();
+ options = new Options();
+ options.addOption(optionOf(THREADS, "t", THREADS.args()));
+ }
+
+ private static Stream provideTestCases() {
+ return Stream.of(
+ Arguments.of(args(), 2, (Function) Config::getThreads),
+ Arguments.of(args("-t", "5"), 5, (Function) Config::getThreads),
+ Arguments.of(args("--threads", "5"), 5, (Function) Config::getThreads)
+ );
+ }
+
+ @ParameterizedTest
+ @MethodSource("provideTestCases")
+ void validate(String[] cmdArgs, int expected, Function fieldUnderTest) {
+ Main sut = new Main();
+ CommandLine.populateCommand(sut, cmdArgs);
+ assertEquals(expected, fieldUnderTest.apply(sut.getConfig()));
+ }
+
+ @Test
+ void validate() {
+ Main sut = new Main();
+ assertThrows(CommandLine.MissingParameterException.class, () -> CommandLine.populateCommand(sut, args("-t")));
+ assertThrows(CommandLine.MissingParameterException.class, () -> CommandLine.populateCommand(sut, args("--threads")));
+ assertThrows(CommandLine.ParameterException.class, () -> Main.main(args("--threads", "0")));
+ }
+}
\ No newline at end of file
diff --git a/src/test/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/validator/AttributeConfigValidatorTest.java b/src/test/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/validator/AttributeConfigValidatorTest.java
deleted file mode 100644
index 8a1b143..0000000
--- a/src/test/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/validator/AttributeConfigValidatorTest.java
+++ /dev/null
@@ -1,85 +0,0 @@
-package at.pcgamingfreaks.mkvaudiosubtitlechanger.config.validator;
-
-import at.pcgamingfreaks.mkvaudiosubtitlechanger.config.Config;
-import at.pcgamingfreaks.mkvaudiosubtitlechanger.config.ValidationResult;
-import at.pcgamingfreaks.mkvaudiosubtitlechanger.model.AttributeConfig;
-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.api.BeforeEach;
-import org.junit.jupiter.params.ParameterizedTest;
-import org.junit.jupiter.params.provider.Arguments;
-import org.junit.jupiter.params.provider.MethodSource;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.stream.Stream;
-
-import static at.pcgamingfreaks.mkvaudiosubtitlechanger.config.ValidationResult.*;
-import static at.pcgamingfreaks.mkvaudiosubtitlechanger.model.ConfigProperty.*;
-import static at.pcgamingfreaks.mkvaudiosubtitlechanger.util.CommandLineOptionsUtil.optionOf;
-import static org.junit.jupiter.api.Assertions.*;
-
-class AttributeConfigValidatorTest {
- private static CommandLineParser parser;
- private static Options options;
-
- @BeforeAll
- static void before() {
- parser = new DefaultParser();
- options = new Options();
- options.addOption(optionOf(ATTRIBUTE_CONFIG, ATTRIBUTE_CONFIG.abrv(), ATTRIBUTE_CONFIG.args()));
- }
-
- @BeforeEach
- void beforeEach() {
- Config.getInstance(true);
- }
-
- private static Stream provideTestCases() {
- return Stream.of(
- Arguments.of(attrConfYaml("jpn", "ger"), new String[]{}, VALID, attrConf("jpn", "ger")),
- Arguments.of("", new String[]{"-a", "jpn:ger"}, VALID, attrConf("jpn", "ger")),
- Arguments.of(attrConfYaml("jpn", "ger", "jpn", "eng"), new String[]{}, VALID, attrConf("jpn", "ger", "jpn", "eng")),
- Arguments.of("", new String[]{"-a", "jpn:ger", "jpn:eng"}, VALID, attrConf("jpn", "ger", "jpn", "eng")),
- Arguments.of(attrConfYaml("jpn", "ger", "jpn", "OFF"), new String[]{}, VALID, attrConf("jpn", "ger", "jpn", "OFF")),
- Arguments.of("", new String[]{"-a", "jpn:ger", "jpn:OFF"}, VALID, attrConf("jpn", "ger", "jpn", "OFF")),
- Arguments.of(attrConfYaml("jpn", "invalid"), new String[]{}, INVALID, null),
- Arguments.of("", new String[]{}, MISSING, null)
- );
- }
-
- @ParameterizedTest
- @MethodSource("provideTestCases")
- void validate(String yamlArgs, String[] cmdArgs, ValidationResult expectedResult, List expectedConfig)
- throws ParseException, YamlInvalidContentException {
- AttributeConfigValidator underTest = new AttributeConfigValidator();
-
- ValidationResult result = underTest.validate(new YAML(yamlArgs), parser.parse(options, cmdArgs));
-
- assertEquals(expectedResult, result);
- assertIterableEquals(expectedConfig, Config.getInstance().getAttributeConfig());
- }
-
- private static String attrConfYaml(String... languages) {
- StringBuilder yaml = new StringBuilder("attribute-config: ");
- int counter = 0;
- for (int i = 0; i < languages.length; i += 2) {
- counter++;
- yaml.append(String.format("\n %s:\n audio: %s\n subtitle: %s", counter, languages[i], languages[i+1]));
- }
- return yaml.toString();
- }
-
- private static List attrConf(String... languages) {
- List conf = new ArrayList<>();
- for (int i = 0; i < languages.length; i += 2) {
- conf.add(new AttributeConfig(languages[i], languages[i+1]));
- }
- return conf;
- }
-}
\ No newline at end of file
diff --git a/src/test/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/validator/BooleanValidatorTest.java b/src/test/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/validator/BooleanValidatorTest.java
deleted file mode 100644
index 15411c6..0000000
--- a/src/test/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/validator/BooleanValidatorTest.java
+++ /dev/null
@@ -1,58 +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.util.stream.Stream;
-
-import static at.pcgamingfreaks.mkvaudiosubtitlechanger.config.ValidationResult.*;
-import static at.pcgamingfreaks.mkvaudiosubtitlechanger.model.ConfigProperty.*;
-import static at.pcgamingfreaks.mkvaudiosubtitlechanger.util.CommandLineOptionsUtil.optionOf;
-import static at.pcgamingfreaks.mkvaudiosubtitlechanger.util.TestUtil.yamlList;
-import static org.junit.jupiter.api.Assertions.assertEquals;
-
-class BooleanValidatorTest {
- private static CommandLineParser parser;
- private static Options options;
-
- @BeforeAll
- static void before() {
- parser = new DefaultParser();
- options = new Options();
- options.addOption(optionOf(SAFE_MODE, SAFE_MODE.abrv(), SAFE_MODE.args()));
- }
-
- private static Stream provideTestCases() {
- return Stream.of(
- Arguments.of(SAFE_MODE, false, "", new String[]{"-safe-mode"}, VALID),
- Arguments.of(SAFE_MODE, true, "", new String[]{"-safe-mode"}, VALID),
- Arguments.of(SAFE_MODE, false, "", new String[]{""}, NOT_PRESENT),
- Arguments.of(SAFE_MODE, true, "", new String[]{""}, MISSING),
- Arguments.of(SAFE_MODE, false, yamlList(ARGUMENTS, SAFE_MODE), new String[]{""}, VALID),
- Arguments.of(SAFE_MODE, true, yamlList(ARGUMENTS, SAFE_MODE), new String[]{""}, VALID),
- Arguments.of(SAFE_MODE, false, yamlList(ARGUMENTS, WINDOWS), new String[]{""}, NOT_PRESENT),
- Arguments.of(SAFE_MODE, true, yamlList(ARGUMENTS, WINDOWS), new String[]{""}, MISSING)
- );
- }
-
- @ParameterizedTest
- @MethodSource("provideTestCases")
- void validate(ConfigProperty property, boolean required, String yamlArgs, String[] cmdArgs,
- ValidationResult expectedResult) throws ParseException, YamlInvalidContentException {
- BooleanValidator underTest = new BooleanValidator(property, required);
-
- ValidationResult result = underTest.validate(new YAML(yamlArgs), parser.parse(options, cmdArgs));
-
- assertEquals(expectedResult, result);
- }
-}
\ No newline at end of file
diff --git a/src/test/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/validator/ThreadValidatorTest.java b/src/test/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/validator/ThreadValidatorTest.java
deleted file mode 100644
index d3d5dd3..0000000
--- a/src/test/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/validator/ThreadValidatorTest.java
+++ /dev/null
@@ -1,61 +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.util.stream.Stream;
-
-import static at.pcgamingfreaks.mkvaudiosubtitlechanger.config.ValidationResult.*;
-import static at.pcgamingfreaks.mkvaudiosubtitlechanger.model.ConfigProperty.THREADS;
-import static at.pcgamingfreaks.mkvaudiosubtitlechanger.util.CommandLineOptionsUtil.optionOf;
-import static at.pcgamingfreaks.mkvaudiosubtitlechanger.util.TestUtil.argumentsOf;
-import static org.junit.jupiter.api.Assertions.assertEquals;
-
-class ThreadValidatorTest {
-
- private static CommandLineParser parser;
- private static Options options;
-
- @BeforeAll
- static void before() {
- parser = new DefaultParser();
- options = new Options();
- options.addOption(optionOf(THREADS, "t", THREADS.args()));
- }
-
- private static Stream provideTestCases() {
- return Stream.of(
- argumentsOf(THREADS, false, null, "", new String[]{"-t", "10"}, VALID),
- argumentsOf(THREADS, true, null, "", new String[]{"-t", "10"}, VALID),
- argumentsOf(THREADS, false, null, "threads: 10", new String[]{}, VALID),
- argumentsOf(THREADS, true, null, "threads: 10", new String[]{}, VALID),
- argumentsOf(THREADS, false, 2, "", new String[]{}, DEFAULT),
- argumentsOf(THREADS, true, null, "", new String[]{}, MISSING),
- argumentsOf(THREADS, false, null, "", new String[]{}, NOT_PRESENT),
- argumentsOf(THREADS, true, null, "", new String[]{"-t", "-1"}, INVALID),
- argumentsOf(THREADS, true, null, "threads: 0", new String[]{}, INVALID),
- argumentsOf(THREADS, true, 2, "", new String[]{"-t", "0"}, INVALID)
- );
- }
-
- @ParameterizedTest
- @MethodSource("provideTestCases")
- void validate(ConfigProperty property, boolean required, Integer defaultValue, String yamlArgs, String[] cmdArgs,
- ValidationResult expectedResult) throws ParseException, YamlInvalidContentException {
- ThreadValidator underTest = new ThreadValidator(property, required, defaultValue);
-
- ValidationResult result = underTest.validate(new YAML(yamlArgs), parser.parse(options, cmdArgs));
-
- assertEquals(expectedResult, result);
- }
-}
\ No newline at end of file
diff --git a/src/test/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/util/TestUtil.java b/src/test/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/util/TestUtil.java
index 0c08e15..458c4ba 100644
--- a/src/test/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/util/TestUtil.java
+++ b/src/test/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/util/TestUtil.java
@@ -43,4 +43,12 @@ public class TestUtil {
fileInfoDto.setMatchedConfig(config);
return fileInfoDto;
}
+
+ public static String[] args(String... args) {
+ String[] staticArray = new String[]{"-l", "/", "-a", "jpn:ger"};
+ String[] result = new String[staticArray.length + args.length];
+ System.arraycopy(staticArray, 0, result, 0, staticArray.length);
+ System.arraycopy(args, 0, result, staticArray.length, args.length);
+ return result;
+ }
}