From 80c46508b89f23747d40acb075b1010f1fa965aa Mon Sep 17 00:00:00 2001 From: RatzzFatzz Date: Sun, 14 Dec 2025 22:47:41 +0100 Subject: [PATCH] Add tests for validation and extract command from Main --- .../mkvaudiosubtitlechanger/Main.java | 54 +------------ .../impl/CommandRunner.java | 50 ++++++++++++ .../impl/kernel/AttributeUpdaterKernel.java | 11 +-- .../ValidationExecutionStrategy.java | 4 +- .../config/fields/AttributeConfigTest.java | 61 -------------- .../fields/BooleanConfigParameterTest.java | 38 --------- .../fields/IntegerConfigParameterTest.java | 41 ---------- .../MkvToolNixPathConfigParameterTest.java | 45 ----------- .../fields/PathConfigParameterTest.java | 54 ------------- .../fields/PatternConfigParameterTest.java | 43 ---------- .../config/fields/SetConfigParameterTest.java | 51 ------------ .../impl/MkvFileProcessorTest.java | 50 ------------ .../impl/SubtitleTrackComparatorTest.java | 5 +- .../ValidationExecutionStrategyTest.java | 61 ++++++++++++++ .../model/InputConfigTest.java | 80 ------------------- .../util/PathUtils.java | 4 + 16 files changed, 125 insertions(+), 527 deletions(-) create mode 100644 src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/impl/CommandRunner.java delete mode 100644 src/test/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/fields/AttributeConfigTest.java delete mode 100644 src/test/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/fields/BooleanConfigParameterTest.java delete mode 100644 src/test/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/fields/IntegerConfigParameterTest.java delete mode 100644 src/test/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/fields/MkvToolNixPathConfigParameterTest.java delete mode 100644 src/test/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/fields/PathConfigParameterTest.java delete mode 100644 src/test/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/fields/PatternConfigParameterTest.java delete mode 100644 src/test/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/fields/SetConfigParameterTest.java delete mode 100644 src/test/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/impl/MkvFileProcessorTest.java create mode 100644 src/test/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/impl/validation/ValidationExecutionStrategyTest.java delete mode 100644 src/test/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/model/InputConfigTest.java diff --git a/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/Main.java b/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/Main.java index f16f7fd..0cdde16 100644 --- a/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/Main.java +++ b/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/Main.java @@ -1,64 +1,18 @@ package at.pcgamingfreaks.mkvaudiosubtitlechanger; -import at.pcgamingfreaks.mkvaudiosubtitlechanger.impl.FileFilter; -import at.pcgamingfreaks.mkvaudiosubtitlechanger.impl.processors.FileProcessor; -import at.pcgamingfreaks.mkvaudiosubtitlechanger.impl.processors.MkvFileProcessor; -import at.pcgamingfreaks.mkvaudiosubtitlechanger.model.InputConfig; +import at.pcgamingfreaks.mkvaudiosubtitlechanger.impl.CommandRunner; import at.pcgamingfreaks.mkvaudiosubtitlechanger.impl.validation.ValidationExecutionStrategy; -import at.pcgamingfreaks.mkvaudiosubtitlechanger.impl.processors.CachedFileProcessor; -import at.pcgamingfreaks.mkvaudiosubtitlechanger.impl.kernel.AttributeUpdaterKernel; -import at.pcgamingfreaks.mkvaudiosubtitlechanger.impl.kernel.CoherentAttributeUpdaterKernel; -import at.pcgamingfreaks.mkvaudiosubtitlechanger.impl.kernel.DefaultAttributeUpdaterKernel; -import at.pcgamingfreaks.mkvaudiosubtitlechanger.util.ProjectUtil; -import lombok.Getter; -import lombok.extern.slf4j.Slf4j; -import org.apache.logging.log4j.Level; -import org.apache.logging.log4j.core.config.Configurator; import picocli.CommandLine; -@Slf4j -@CommandLine.Command( - name = "mkvaudiosubtitlechanger", - usageHelpAutoWidth = true, - customSynopsis = { - "mkvaudiosubtitlechanger -a [...] -l [-s]", - "Example: mkvaudiosubtitlechanger -a eng:eng eng:ger -l /mnt/media/ -s", - "" - }, - requiredOptionMarker = '*', - sortOptions = false, - mixinStandardHelpOptions = true, - versionProvider = ProjectUtil.class -) -public class Main implements Runnable { - - @Getter - @CommandLine.ArgGroup(exclusive = false) - private InputConfig config; - +public class Main { public static void main(String[] args) { if (args.length == 0) { - CommandLine.usage(Main.class, System.out); + CommandLine.usage(CommandRunner.class, System.out); return; } - new CommandLine(Main.class) + new CommandLine(CommandRunner.class) .setExecutionStrategy(new ValidationExecutionStrategy()) .execute(args); } - - @Override - public void run() { - if (config.isDebug()) { - Configurator.setRootLevel(Level.DEBUG); - } - - FileFilter fileFilter = new FileFilter(config.getExcluded(), config.getIncludePattern(), config.getFilterDate()); - FileProcessor fileProcessor = new CachedFileProcessor(new MkvFileProcessor(config.getMkvToolNix(), fileFilter)); - - AttributeUpdaterKernel kernel = config.getCoherent() != null - ? new CoherentAttributeUpdaterKernel(config, fileProcessor) - : new DefaultAttributeUpdaterKernel(config, fileProcessor); - kernel.execute(); - } } diff --git a/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/impl/CommandRunner.java b/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/impl/CommandRunner.java new file mode 100644 index 0000000..9de4791 --- /dev/null +++ b/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/impl/CommandRunner.java @@ -0,0 +1,50 @@ +package at.pcgamingfreaks.mkvaudiosubtitlechanger.impl; + +import at.pcgamingfreaks.mkvaudiosubtitlechanger.impl.kernel.AttributeUpdaterKernel; +import at.pcgamingfreaks.mkvaudiosubtitlechanger.impl.kernel.CoherentAttributeUpdaterKernel; +import at.pcgamingfreaks.mkvaudiosubtitlechanger.impl.kernel.DefaultAttributeUpdaterKernel; +import at.pcgamingfreaks.mkvaudiosubtitlechanger.impl.processors.CachedFileProcessor; +import at.pcgamingfreaks.mkvaudiosubtitlechanger.impl.processors.FileProcessor; +import at.pcgamingfreaks.mkvaudiosubtitlechanger.impl.processors.MkvFileProcessor; +import at.pcgamingfreaks.mkvaudiosubtitlechanger.model.InputConfig; +import at.pcgamingfreaks.mkvaudiosubtitlechanger.util.ProjectUtil; +import lombok.Getter; +import lombok.extern.slf4j.Slf4j; +import org.apache.logging.log4j.Level; +import org.apache.logging.log4j.core.config.Configurator; +import picocli.CommandLine; + +@Slf4j +@CommandLine.Command( + name = "mkvaudiosubtitlechanger", + usageHelpAutoWidth = true, + customSynopsis = { + "mkvaudiosubtitlechanger -a [...] -l [-s]", + "Example: mkvaudiosubtitlechanger -a eng:eng eng:ger -l /mnt/media/ -s", + "" + }, + requiredOptionMarker = '*', + sortOptions = false, + mixinStandardHelpOptions = true, + versionProvider = ProjectUtil.class +) +public class CommandRunner implements Runnable { + @Getter + @CommandLine.ArgGroup(exclusive = false) + private InputConfig config; + + @Override + public void run() { + if (config.isDebug()) { + Configurator.setRootLevel(Level.DEBUG); + } + + FileFilter fileFilter = new FileFilter(config.getExcluded(), config.getIncludePattern(), config.getFilterDate()); + FileProcessor fileProcessor = new CachedFileProcessor(new MkvFileProcessor(config.getMkvToolNix(), fileFilter)); + + AttributeUpdaterKernel kernel = config.getCoherent() != null + ? new CoherentAttributeUpdaterKernel(config, fileProcessor) + : new DefaultAttributeUpdaterKernel(config, fileProcessor); + kernel.execute(); + } +} diff --git a/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/impl/kernel/AttributeUpdaterKernel.java b/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/impl/kernel/AttributeUpdaterKernel.java index 1d20eac..671d2ac 100644 --- a/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/impl/kernel/AttributeUpdaterKernel.java +++ b/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/impl/kernel/AttributeUpdaterKernel.java @@ -3,22 +3,17 @@ package at.pcgamingfreaks.mkvaudiosubtitlechanger.impl.kernel; import at.pcgamingfreaks.mkvaudiosubtitlechanger.exceptions.MkvToolNixException; import at.pcgamingfreaks.mkvaudiosubtitlechanger.impl.processors.AttributeProcessor; import at.pcgamingfreaks.mkvaudiosubtitlechanger.impl.processors.FileProcessor; -import at.pcgamingfreaks.mkvaudiosubtitlechanger.model.*; -import at.pcgamingfreaks.mkvaudiosubtitlechanger.util.DateUtils; -import at.pcgamingfreaks.mkvaudiosubtitlechanger.util.ProjectUtil; -import at.pcgamingfreaks.yaml.YAML; -import at.pcgamingfreaks.yaml.YamlInvalidContentException; +import at.pcgamingfreaks.mkvaudiosubtitlechanger.model.FileInfo; +import at.pcgamingfreaks.mkvaudiosubtitlechanger.model.InputConfig; +import at.pcgamingfreaks.mkvaudiosubtitlechanger.model.ResultStatistic; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; import me.tongfei.progressbar.ProgressBar; import me.tongfei.progressbar.ProgressBarBuilder; import me.tongfei.progressbar.ProgressBarStyle; -import net.harawata.appdirs.AppDirsFactory; import java.io.File; import java.io.IOException; -import java.nio.file.Path; -import java.util.Date; import java.util.List; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; diff --git a/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/impl/validation/ValidationExecutionStrategy.java b/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/impl/validation/ValidationExecutionStrategy.java index 2ff6763..54cd89e 100644 --- a/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/impl/validation/ValidationExecutionStrategy.java +++ b/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/impl/validation/ValidationExecutionStrategy.java @@ -1,6 +1,6 @@ package at.pcgamingfreaks.mkvaudiosubtitlechanger.impl.validation; -import at.pcgamingfreaks.mkvaudiosubtitlechanger.Main; +import at.pcgamingfreaks.mkvaudiosubtitlechanger.impl.CommandRunner; import at.pcgamingfreaks.mkvaudiosubtitlechanger.model.InputConfig; import at.pcgamingfreaks.mkvaudiosubtitlechanger.util.ValidationUtil; import jakarta.validation.ConstraintViolation; @@ -18,7 +18,7 @@ public class ValidationExecutionStrategy implements CommandLine.IExecutionStrate private static void validate(CommandLine.Model.CommandSpec spec) { Validator validator = ValidationUtil.getValidator(); - Set> violations = validator.validate(((Main)spec.userObject()).getConfig()); + Set> violations = validator.validate(((CommandRunner)spec.userObject()).getConfig()); if (!violations.isEmpty()) { StringBuilder errors = new StringBuilder(); diff --git a/src/test/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/fields/AttributeConfigTest.java b/src/test/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/fields/AttributeConfigTest.java deleted file mode 100644 index 72287e4..0000000 --- a/src/test/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/fields/AttributeConfigTest.java +++ /dev/null @@ -1,61 +0,0 @@ -package at.pcgamingfreaks.mkvaudiosubtitlechanger.config.fields; - -import at.pcgamingfreaks.mkvaudiosubtitlechanger.Main; -import at.pcgamingfreaks.mkvaudiosubtitlechanger.model.AttributeConfig; - -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 org.junit.jupiter.api.Assertions.*; - -class AttributeConfigTest { - - 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, AttributeConfig[] expectedConfig) { - Main underTest = new Main(); - CommandLine.populateCommand(underTest, cmdArgs); - assertArrayEquals(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 AttributeConfig[] attrConf(String... languages) { - AttributeConfig[] conf = new AttributeConfig[languages.length/2]; - for (int i = 0; i < languages.length; i += 2) { - conf[i / 2] = 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/fields/BooleanConfigParameterTest.java b/src/test/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/fields/BooleanConfigParameterTest.java deleted file mode 100644 index 9c5938e..0000000 --- a/src/test/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/fields/BooleanConfigParameterTest.java +++ /dev/null @@ -1,38 +0,0 @@ -package at.pcgamingfreaks.mkvaudiosubtitlechanger.config.fields; - -import at.pcgamingfreaks.mkvaudiosubtitlechanger.Main; -import at.pcgamingfreaks.mkvaudiosubtitlechanger.model.InputConfig; -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.util.TestUtil.args; -import static org.junit.jupiter.api.Assertions.assertEquals; - -class BooleanConfigParameterTest { - - private static Stream provideTestCases() { - return Stream.of( - Arguments.of(args("-s"), true, (Function) InputConfig::isSafeMode), - Arguments.of(args("--safemode"), true, (Function) InputConfig::isSafeMode), - Arguments.of(args(), false, (Function) InputConfig::isSafeMode), - Arguments.of(args("-cf"), true, (Function) InputConfig::isForceCoherent), - Arguments.of(args("--force-coherent"), true, (Function) InputConfig::isForceCoherent), - Arguments.of(args(), false, (Function) InputConfig::isForceCoherent), - Arguments.of(args("-n"), true, (Function) InputConfig::isOnlyNewFiles), - Arguments.of(args(), false, (Function) InputConfig::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/fields/IntegerConfigParameterTest.java b/src/test/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/fields/IntegerConfigParameterTest.java deleted file mode 100644 index eefeb1f..0000000 --- a/src/test/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/fields/IntegerConfigParameterTest.java +++ /dev/null @@ -1,41 +0,0 @@ -package at.pcgamingfreaks.mkvaudiosubtitlechanger.config.fields; - -import at.pcgamingfreaks.mkvaudiosubtitlechanger.Main; -import at.pcgamingfreaks.mkvaudiosubtitlechanger.model.InputConfig; -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.util.TestUtil.args; -import static org.junit.jupiter.api.Assertions.*; - -class IntegerConfigParameterTest { - - private static Stream provideTestCases() { - return Stream.of( - Arguments.of(args(), 2, (Function) InputConfig::getThreads), - Arguments.of(args("-t", "5"), 5, (Function) InputConfig::getThreads), - Arguments.of(args("--threads", "5"), 5, (Function) InputConfig::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"))); - } -} \ No newline at end of file diff --git a/src/test/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/fields/MkvToolNixPathConfigParameterTest.java b/src/test/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/fields/MkvToolNixPathConfigParameterTest.java deleted file mode 100644 index 0a37e1c..0000000 --- a/src/test/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/fields/MkvToolNixPathConfigParameterTest.java +++ /dev/null @@ -1,45 +0,0 @@ -package at.pcgamingfreaks.mkvaudiosubtitlechanger.config.fields; - -import at.pcgamingfreaks.mkvaudiosubtitlechanger.Main; -import at.pcgamingfreaks.mkvaudiosubtitlechanger.model.InputConfig; -import org.apache.commons.lang3.SystemUtils; -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.io.File; -import java.nio.file.Path; -import java.util.function.Function; -import java.util.stream.Stream; - -import static at.pcgamingfreaks.mkvaudiosubtitlechanger.util.TestUtil.args; -import static org.junit.jupiter.api.Assertions.*; - -class MkvToolNixPathConfigParameterTest { - - private static final String TEST_MKVTOOLNIX_DIR = SystemUtils.IS_OS_WINDOWS ? "src/test/resources/mkvtoolnix_exe" : "src/test/resources/mkvtoolnix"; - - private static Stream provideTestCases() { - return Stream.of( - Arguments.of(args("-m", TEST_MKVTOOLNIX_DIR), TEST_MKVTOOLNIX_DIR, (Function) InputConfig::getMkvToolNix), - Arguments.of(args("--mkvtoolnix", TEST_MKVTOOLNIX_DIR), TEST_MKVTOOLNIX_DIR, (Function) InputConfig::getMkvToolNix) - ); - } - - @ParameterizedTest - @MethodSource("provideTestCases") - void validate(String[] cmdArgs, String expected, Function fieldUnderTest) { - Main sut = new Main(); - CommandLine.populateCommand(sut, cmdArgs); - assertEquals(Path.of(expected).toFile().getAbsolutePath(), fieldUnderTest.apply(sut.getConfig()).getAbsolutePath()); - } - - @Test - void validate() { - Main sut = new Main(); - assertThrows(CommandLine.ParameterException.class, () -> CommandLine.populateCommand(sut, args("-m"))); - assertThrows(CommandLine.ParameterException.class, () -> CommandLine.populateCommand(sut, args(""))); - } -} \ No newline at end of file diff --git a/src/test/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/fields/PathConfigParameterTest.java b/src/test/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/fields/PathConfigParameterTest.java deleted file mode 100644 index 82326fe..0000000 --- a/src/test/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/fields/PathConfigParameterTest.java +++ /dev/null @@ -1,54 +0,0 @@ -package at.pcgamingfreaks.mkvaudiosubtitlechanger.config.fields; - -import at.pcgamingfreaks.mkvaudiosubtitlechanger.Main; -import at.pcgamingfreaks.mkvaudiosubtitlechanger.model.InputConfig; -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.io.File; -import java.nio.file.Path; -import java.util.function.Function; -import java.util.stream.Stream; - -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 Stream provideTestCases() { - return Stream.of( - Arguments.of(args("-l", TEST_DIR), Path.of(TEST_DIR).toFile(), true, (Function) InputConfig::getLibraryPath), - Arguments.of(args("-l", TEST_FILE), Path.of(TEST_FILE).toFile(), true, (Function) InputConfig::getLibraryPath) - ); - } - - @ParameterizedTest - @MethodSource("provideTestCases") - void validate(String[] cmdArgs, File expected, boolean exists, Function fieldUnderTest) { - Main sut = new Main(); - CommandLine.populateCommand(sut, cmdArgs); - assertEquals(expected.getAbsolutePath(), fieldUnderTest.apply(sut.getConfig()).getAbsolutePath()); - assertEquals(exists, fieldUnderTest.apply(sut.getConfig()).exists()); - } - - @Test - void validate() { - Main sut = new Main(); -// assertThrows(CommandLine.ParameterException.class, () -> new CommandLine(sut).execute(args("-l", "arst"))); - assertThrows(CommandLine.MissingParameterException.class, () -> CommandLine.populateCommand(sut, args("-l"))); - assertThrows(CommandLine.UnmatchedArgumentException.class, () -> CommandLine.populateCommand(sut, args(""))); - } - - private static String[] args(String... args) { - String[] staticArray = new String[]{"-a", "ger: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; - } -} \ No newline at end of file diff --git a/src/test/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/fields/PatternConfigParameterTest.java b/src/test/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/fields/PatternConfigParameterTest.java deleted file mode 100644 index 64bce97..0000000 --- a/src/test/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/fields/PatternConfigParameterTest.java +++ /dev/null @@ -1,43 +0,0 @@ -package at.pcgamingfreaks.mkvaudiosubtitlechanger.config.fields; - -import at.pcgamingfreaks.mkvaudiosubtitlechanger.Main; -import at.pcgamingfreaks.mkvaudiosubtitlechanger.model.InputConfig; -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.regex.Pattern; -import java.util.stream.Stream; - -import static at.pcgamingfreaks.mkvaudiosubtitlechanger.util.TestUtil.args; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertThrows; - -class PatternConfigParameterTest { - - private static Stream provideTestCases() { - return Stream.of( - Arguments.of(args("-i", "[abd]?.*"), Pattern.compile("[abd]?.*"), (Function) InputConfig::getIncludePattern), - Arguments.of(args("-i", ".*"), Pattern.compile(".*"), (Function) InputConfig::getIncludePattern), - Arguments.of(args(), Pattern.compile(".*"), (Function) InputConfig::getIncludePattern) - ); - } - - @ParameterizedTest - @MethodSource("provideTestCases") - void validate(String[] cmdArgs, Pattern expected, Function fieldUnderTest) { - Main sut = new Main(); - CommandLine.populateCommand(sut, cmdArgs); - assertEquals(expected.pattern(), fieldUnderTest.apply(sut.getConfig()).pattern()); - } - - @Test - void validate() { - Main sut = new Main(); - assertThrows(CommandLine.MissingParameterException.class, () -> CommandLine.populateCommand(sut, args("-i"))); - assertThrows(CommandLine.ParameterException.class, () -> CommandLine.populateCommand(sut, args("-i", "["))); - } -} \ No newline at end of file diff --git a/src/test/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/fields/SetConfigParameterTest.java b/src/test/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/fields/SetConfigParameterTest.java deleted file mode 100644 index c898947..0000000 --- a/src/test/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/fields/SetConfigParameterTest.java +++ /dev/null @@ -1,51 +0,0 @@ -package at.pcgamingfreaks.mkvaudiosubtitlechanger.config.fields; - -import at.pcgamingfreaks.mkvaudiosubtitlechanger.Main; -import at.pcgamingfreaks.mkvaudiosubtitlechanger.model.InputConfig; -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.Set; -import java.util.function.Function; -import java.util.stream.Stream; - -import static at.pcgamingfreaks.mkvaudiosubtitlechanger.util.TestUtil.args; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertThrows; - -class SetConfigParameterTest { - - private static Stream provideTestCases() { - return Stream.of( - Arguments.of(args("--commentary-keywords", "test"), 1, (Function>) InputConfig::getCommentaryKeywords), - Arguments.of(args("--commentary-keywords", "test", "test1", "test2", "test3", "test4"), 5, (Function>) InputConfig::getCommentaryKeywords), - Arguments.of(args(), 3, (Function>) InputConfig::getCommentaryKeywords), - Arguments.of(args("--forced-keywords", "test"), 1, (Function>) InputConfig::getForcedKeywords), - Arguments.of(args("--forced-keywords", "test", "test1", "test2", "test3", "test4"), 5, (Function>) InputConfig::getForcedKeywords), - Arguments.of(args(), 3, (Function>) InputConfig::getForcedKeywords), - Arguments.of(args("--preferred-subtitles", "test"), 1, (Function>) InputConfig::getPreferredSubtitles), - Arguments.of(args("--preferred-subtitles", "test", "test1", "test2", "test3", "test4"), 5, (Function>) InputConfig::getPreferredSubtitles), - Arguments.of(args(), 1, (Function>) InputConfig::getPreferredSubtitles) - ); - } - - @ParameterizedTest - @MethodSource("provideTestCases") - void validate(String[] cmdArgs, int expectedSize, Function> fieldUnderTest) { - Main sut = new Main(); - CommandLine.populateCommand(sut, cmdArgs); - assertEquals(expectedSize, fieldUnderTest.apply(sut.getConfig()).size()); - } - - @Test - void validate() { - Main sut = new Main(); - assertThrows(CommandLine.MissingParameterException.class, () -> CommandLine.populateCommand(sut, args("--commentary-keywords"))); - assertThrows(CommandLine.MissingParameterException.class, () -> CommandLine.populateCommand(sut, args("--forced-keywords"))); - assertThrows(CommandLine.MissingParameterException.class, () -> CommandLine.populateCommand(sut, args("-e"))); - assertThrows(CommandLine.MissingParameterException.class, () -> CommandLine.populateCommand(sut, args("--preferred-subtitles"))); - } -} \ No newline at end of file diff --git a/src/test/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/impl/MkvFileProcessorTest.java b/src/test/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/impl/MkvFileProcessorTest.java deleted file mode 100644 index cfcb65f..0000000 --- a/src/test/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/impl/MkvFileProcessorTest.java +++ /dev/null @@ -1,50 +0,0 @@ -package at.pcgamingfreaks.mkvaudiosubtitlechanger.impl; - -import at.pcgamingfreaks.mkvaudiosubtitlechanger.model.FileInfo; -import at.pcgamingfreaks.mkvaudiosubtitlechanger.model.AttributeConfig; -import at.pcgamingfreaks.mkvaudiosubtitlechanger.model.TrackAttributes; -import org.junit.jupiter.api.Disabled; -import org.junit.jupiter.params.ParameterizedTest; -import org.junit.jupiter.params.provider.Arguments; -import org.junit.jupiter.params.provider.MethodSource; - -import java.util.List; -import java.util.stream.Stream; - -import static at.pcgamingfreaks.mkvaudiosubtitlechanger.util.FileInfoTestUtil.*; -import static org.junit.jupiter.api.Assertions.*; - -class MkvFileProcessorTest { - - private static Stream detectDesiredTracks() { - return Stream.of( - Arguments.of(new AttributeConfig("ger", "OFF"), List.of(AUDIO_GER, AUDIO_ENG), new AttributeConfig[] {new AttributeConfig("ger", "OFF"), new AttributeConfig("eng", "OFF")}), - Arguments.of(new AttributeConfig("eng", "OFF"), List.of(AUDIO_ENG), new AttributeConfig[] {new AttributeConfig("ger", "OFF"), new AttributeConfig("eng", "OFF")}), - Arguments.of(new AttributeConfig("eng", "ger"), List.of(AUDIO_GER, AUDIO_ENG, SUB_GER, SUB_ENG), new AttributeConfig[] {new AttributeConfig("eng", "ger"), new AttributeConfig("ger", "eng")}), - Arguments.of(new AttributeConfig("ger", "eng"), List.of(AUDIO_GER, SUB_GER, SUB_ENG), new AttributeConfig[] {new AttributeConfig("eng", "ger"), new AttributeConfig("ger", "eng")}), - Arguments.of(new AttributeConfig("OFF", "ger"), List.of(AUDIO_GER, SUB_GER, SUB_ENG), new AttributeConfig[] {new AttributeConfig("OFF", "ger"), new AttributeConfig("ger", "eng")}) - ); - } - - @ParameterizedTest - @MethodSource - @Disabled - void detectDesiredTracks(AttributeConfig expectedMatch, List tracks, AttributeConfig... configs) { - FileInfo info = new FileInfo(null); -// MkvFileProcessor processor = new MkvFileProcessor(null, new FileFilter()); -// processor.detectDesiredTracks(info, tracks, tracks, configs); - assertEquals(expectedMatch.getAudioLanguage(), info.getMatchedConfig().getAudioLanguage()); - assertEquals(expectedMatch.getSubtitleLanguage(), info.getMatchedConfig().getSubtitleLanguage()); - } - - private static Stream retrieveNonForcedTracks() { - return Stream.of( - Arguments.of(List.of(SUB_GER, SUB_ENG, SUB_GER_FORCED), List.of(SUB_GER, SUB_ENG)), - Arguments.of(List.of(SUB_GER, SUB_ENG), List.of(SUB_GER, SUB_ENG)), - Arguments.of(List.of(AUDIO_GER, SUB_GER, SUB_ENG), List.of(AUDIO_GER, SUB_GER, SUB_ENG)), - Arguments.of(List.of(AUDIO_GER), List.of(AUDIO_GER)), - Arguments.of(List.of(AUDIO_GER_FORCED), List.of()), - Arguments.of(List.of(), List.of()) - ); - } -} \ No newline at end of file diff --git a/src/test/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/impl/SubtitleTrackComparatorTest.java b/src/test/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/impl/SubtitleTrackComparatorTest.java index 8ff3b3c..2559b68 100644 --- a/src/test/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/impl/SubtitleTrackComparatorTest.java +++ b/src/test/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/impl/SubtitleTrackComparatorTest.java @@ -7,7 +7,6 @@ import org.junit.jupiter.params.provider.Arguments; import org.junit.jupiter.params.provider.MethodSource; import java.util.List; -import java.util.stream.Collectors; import java.util.stream.Stream; import static org.junit.jupiter.api.Assertions.*; @@ -35,9 +34,7 @@ class SubtitleTrackComparatorTest { @ParameterizedTest @MethodSource("compareArguments") void compare(List input, List expected) { - List result = input.stream().sorted(comparator.reversed()).collect(Collectors.toList()); - - assertArrayEquals(expected.toArray(new TrackAttributes[0]), result.toArray(new TrackAttributes[0])); + assertIterableEquals(expected, input.stream().sorted(comparator.reversed()).toList()); } private static TrackAttributes attr(String trackName, boolean defaultTrack) { diff --git a/src/test/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/impl/validation/ValidationExecutionStrategyTest.java b/src/test/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/impl/validation/ValidationExecutionStrategyTest.java new file mode 100644 index 0000000..2582aa8 --- /dev/null +++ b/src/test/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/impl/validation/ValidationExecutionStrategyTest.java @@ -0,0 +1,61 @@ +package at.pcgamingfreaks.mkvaudiosubtitlechanger.impl.validation; + +import at.pcgamingfreaks.mkvaudiosubtitlechanger.impl.CommandRunner; +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.io.PrintWriter; +import java.io.StringWriter; +import java.util.stream.Stream; + +import static at.pcgamingfreaks.mkvaudiosubtitlechanger.util.PathUtils.*; +import static at.pcgamingfreaks.mkvaudiosubtitlechanger.util.TestUtil.args; +import static org.junit.jupiter.api.Assertions.*; + +class ValidationExecutionStrategyTest { + + @Test + void validate() { + CommandRunner underTest = new CommandRunner(); + new CommandLine(underTest) + .setExecutionStrategy(new ValidationExecutionStrategy()) + .parseArgs("-a", "ger:ger", "-l", TEST_FILE, "-m", TEST_MKVTOOLNIX_DIR); + + assertEquals(TEST_FILE, underTest.getConfig().getLibraryPath().getPath()); + assertEquals(TEST_MKVTOOLNIX_DIR, underTest.getConfig().getMkvToolNix().getPath()); + } + + private static Stream validateFailure() { + return Stream.of( + Arguments.of(new String[]{"-a", "jpn:ger"}, "Error: Missing required argument(s): --library="), + Arguments.of(new String[]{"-a", "jpn:ger", "-l"}, "Missing required parameter for option '--library' ()"), + Arguments.of(new String[]{"-l", "/arstarstarst"}, "Error: Missing required argument(s): --attribute-config="), + Arguments.of(new String[]{"-l", "/arstarstarst", "-a",}, "Missing required parameter for option '--attribute-config' at index 0 ()"), + Arguments.of(new String[]{"-l", "/arstarstarst", "-a", "jpn:ger"}, "libraryPath does not exist"), + Arguments.of(args("-m"), "Missing required parameter for option '--mkvtoolnix' ()"), + Arguments.of(args("-m", TEST_INVALID_DIR), "mkvToolNix does not exist"), + Arguments.of(args("-t"), "Missing required parameter for option '--threads' ()"), + Arguments.of(args("-t", "0"), "threads must be greater than or equal to 1"), + Arguments.of(args("-t", "-1"), "threads must be greater than or equal to 1"), + Arguments.of(args("-c", "-1"), "coherent must be greater than or equal to 0") + ); + } + + @ParameterizedTest + @MethodSource("validateFailure") + void validateFailure(String[] args, String expectedMessage) { + StringWriter writer = new StringWriter(); + PrintWriter printWriter = new PrintWriter(writer); + + new CommandLine(CommandRunner.class) + .setExecutionStrategy(new ValidationExecutionStrategy()) + .setErr(printWriter) + .execute(args); + + printWriter.flush(); + assertEquals(expectedMessage, writer.toString().split("\n")[0]); + } +} \ No newline at end of file diff --git a/src/test/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/model/InputConfigTest.java b/src/test/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/model/InputConfigTest.java deleted file mode 100644 index 361f2a7..0000000 --- a/src/test/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/model/InputConfigTest.java +++ /dev/null @@ -1,80 +0,0 @@ -package at.pcgamingfreaks.mkvaudiosubtitlechanger.model; - -import at.pcgamingfreaks.mkvaudiosubtitlechanger.Main; -import at.pcgamingfreaks.mkvaudiosubtitlechanger.impl.validation.ValidationExecutionStrategy; -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.io.PrintWriter; -import java.io.StringWriter; -import java.util.List; -import java.util.stream.Stream; - -import static at.pcgamingfreaks.mkvaudiosubtitlechanger.util.PathUtils.TEST_FILE; -import static at.pcgamingfreaks.mkvaudiosubtitlechanger.util.TestUtil.args; -import static org.junit.jupiter.api.Assertions.*; - -class InputConfigTest { - private static final String TEST_INVALID_DIR = "src/test/resources/test-dir"; - - @Test - void initConfig() { - String[] sut = new String[]{"-a", "ger:ger", "eng:eng", "-l", TEST_FILE, - "-s", "-cf", "-n", - "-c", "2", - "-t", "4", - "-i", ".*[abc].*", - "--forced-keywords", "testForced", - "--commentary-keywords", "testCommentary", - "--preferred-subtitles", "testPreferred" - }; - InputConfig config = CommandLine.populateCommand(new InputConfig(), sut); - - assertTrue(config.getLibraryPath().exists()); - assertArrayEquals(new AttributeConfig[]{new AttributeConfig("ger", "ger"), new AttributeConfig("eng", "eng")}, - config.getAttributeConfig()); - - assertTrue(config.isSafeMode()); - assertTrue(config.isForceCoherent()); - assertTrue(config.isOnlyNewFiles()); - assertNull(config.getFilterDate()); - - assertEquals(2, config.getCoherent()); - assertEquals(4, config.getThreads()); - assertEquals(".*[abc].*", config.getIncludePattern().pattern()); - assertTrue(config.getForcedKeywords().contains("testForced")); - assertTrue(config.getCommentaryKeywords().contains("testCommentary")); - assertTrue(config.getPreferredSubtitles().contains("testPreferred")); - - assertNull(config.getConfigPath()); - } - - - private static Stream jakartaValidationData() { - return Stream.of( - Arguments.of(new String[]{"-l", "/arstarstarst", "-a", "jpn:ger"}, "libraryPath does not exist"), - Arguments.of(args("-m", TEST_INVALID_DIR), "mkvToolNix does not exist"), - Arguments.of(args("-t", "0"), "threads must be greater than or equal to 1"), - Arguments.of(args("-t", "-1"), "threads must be greater than or equal to 1"), - Arguments.of(args("-c", "-1"), "coherent must be greater than or equal to 0") - ); - } - - @ParameterizedTest - @MethodSource("jakartaValidationData") - void testJakartaValidation(String[] args, String expectedMessage) { - StringWriter writer = new StringWriter(); - PrintWriter printWriter = new PrintWriter(writer); - - new CommandLine(Main.class) - .setExecutionStrategy(new ValidationExecutionStrategy()) - .setErr(printWriter) - .execute(args); - - printWriter.flush(); - assertTrue(writer.toString().contains(expectedMessage)); - } -} \ No newline at end of file diff --git a/src/test/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/util/PathUtils.java b/src/test/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/util/PathUtils.java index 8024523..a956fea 100644 --- a/src/test/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/util/PathUtils.java +++ b/src/test/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/util/PathUtils.java @@ -1,6 +1,10 @@ package at.pcgamingfreaks.mkvaudiosubtitlechanger.util; +import org.apache.commons.lang3.SystemUtils; + public class PathUtils { public static final String TEST_DIR = "src/test/resources/test-dir"; public static final String TEST_FILE = "src/test/resources/test-dir/test-file.mkv"; + public static final String TEST_INVALID_DIR = "src/test/resources/test-dir"; + public static final String TEST_MKVTOOLNIX_DIR = SystemUtils.IS_OS_WINDOWS ? "src/test/resources/mkvtoolnix_exe" : "src/test/resources/mkvtoolnix"; }