diff --git a/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/Config.java b/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/Config.java index 65402ec..951239a 100644 --- a/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/Config.java +++ b/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/Config.java @@ -58,13 +58,20 @@ public class Config { @CommandLine.Option(names = {"-d", "--filter-date"}, defaultValue = CommandLine.Option.NULL_VALUE, description = "only consider files created newer than entered date (format: \"dd.MM.yyyy-HH:mm:ss\")") private Date filterDate; - @CommandLine.Option(names = {"-fk", "--force-keywords"}, description = "Additional keywords to identify forced tracks") + @CommandLine.Option(names = {"-fk", "--force-keywords"}, arity = "1..*", + description = "Additional keywords to identify forced tracks (Defaults are will be overwritten; Default: ${DEFAULT-VALUE}") private Set forcedKeywords = new HashSet<>(Arrays.asList("forced", "signs", "songs")); - @CommandLine.Option(names = {"-ck", "--commentary-keywords"}, description = "Additional keywords to identify commentary tracks") + + @CommandLine.Option(names = {"-ck", "--commentary-keywords"}, arity = "1..*", + description = "Additional keywords to identify commentary tracks (Defaults are will be overwritten; Default: ${DEFAULT-VALUE}") private Set commentaryKeywords = new HashSet<>(Arrays.asList("commentary", "director")); - @CommandLine.Option(names = {"-e", "--excluded-directory"}, description = "Directories to be excluded, combines with config file") + + @CommandLine.Option(names = {"-e", "--excluded-directory"}, arity = "1..*", + description = "Directories to be excluded, combines with config file") private Set excludedDirectories = new HashSet<>(); - @CommandLine.Option(names = {"-ps", "--preferred-subtiltes"}, description = "Additional keywords to prefer specific subtitle tracks") + + @CommandLine.Option(names = {"-ps", "--preferred-subtiltes"}, arity = "1..*", + description = "Additional keywords to prefer specific subtitle tracks (Defaults are will be overwritten; Default: ${DEFAULT-VALUE}") private Set preferredSubtitles = new HashSet<>(Arrays.asList("unstyled")); @CommandLine.Option(names = {"-a"}, required = true, arity = "1..*", converter = AttributeConfigConverter.class) diff --git a/src/test/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/AttributeConfigTest.java b/src/test/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/AttributeConfigTest.java index 22527ea..c9eacb6 100644 --- a/src/test/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/AttributeConfigTest.java +++ b/src/test/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/AttributeConfigTest.java @@ -24,20 +24,6 @@ import static at.pcgamingfreaks.mkvaudiosubtitlechanger.util.CommandLineOptionsU 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( diff --git a/src/test/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/BooleanConfigParameterTest.java b/src/test/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/BooleanConfigParameterTest.java index 8a3619e..8b22f21 100644 --- a/src/test/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/BooleanConfigParameterTest.java +++ b/src/test/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/BooleanConfigParameterTest.java @@ -20,15 +20,6 @@ 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( diff --git a/src/test/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/IntegerConfigParameterTest.java b/src/test/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/IntegerConfigParameterTest.java index a8142b4..f5e1c19 100644 --- a/src/test/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/IntegerConfigParameterTest.java +++ b/src/test/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/IntegerConfigParameterTest.java @@ -23,16 +23,6 @@ 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), diff --git a/src/test/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/SetConfigParameterTest.java b/src/test/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/SetConfigParameterTest.java new file mode 100644 index 0000000..b12c0a0 --- /dev/null +++ b/src/test/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/SetConfigParameterTest.java @@ -0,0 +1,52 @@ +package at.pcgamingfreaks.mkvaudiosubtitlechanger.config; + +import at.pcgamingfreaks.mkvaudiosubtitlechanger.Main; +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.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.assertEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; + +class SetConfigParameterTest { + + private static Stream provideTestCases() { + return Stream.of( + Arguments.of(args("-ck", "test"), 1, (Function>) Config::getCommentaryKeywords), + Arguments.of(args("-ck", "test", "test1", "test2", "test3", "test4"), 5, (Function>) Config::getCommentaryKeywords), + Arguments.of(args(), 2, (Function>) Config::getCommentaryKeywords), + Arguments.of(args("-fk", "test"), 1, (Function>) Config::getForcedKeywords), + Arguments.of(args("-fk", "test", "test1", "test2", "test3", "test4"), 5, (Function>) Config::getForcedKeywords), + Arguments.of(args(), 3, (Function>) Config::getForcedKeywords), + Arguments.of(args("-ps", "test"), 1, (Function>) Config::getPreferredSubtitles), + Arguments.of(args("-ps", "test", "test1", "test2", "test3", "test4"), 5, (Function>) Config::getPreferredSubtitles), + Arguments.of(args(), 1, (Function>) Config::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("-ck"))); + assertThrows(CommandLine.MissingParameterException.class, () -> CommandLine.populateCommand(sut, args("-fk"))); + assertThrows(CommandLine.MissingParameterException.class, () -> CommandLine.populateCommand(sut, args("-e"))); + assertThrows(CommandLine.MissingParameterException.class, () -> CommandLine.populateCommand(sut, args("-ps"))); + } +} \ No newline at end of file diff --git a/src/test/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/validator/SetValidatorTest.java b/src/test/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/validator/SetValidatorTest.java deleted file mode 100644 index 174a5b8..0000000 --- a/src/test/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/validator/SetValidatorTest.java +++ /dev/null @@ -1,68 +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.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.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.stream.Stream; - -import static at.pcgamingfreaks.mkvaudiosubtitlechanger.config.ValidationResult.*; -import static at.pcgamingfreaks.mkvaudiosubtitlechanger.model.ConfigProperty.COMMENTARY_KEYWORDS; -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 SetValidatorTest { - - private static CommandLineParser parser; - private static Options options; - - @BeforeAll - static void before() { - parser = new DefaultParser(); - options = new Options(); - options.addOption(optionOf(COMMENTARY_KEYWORDS, COMMENTARY_KEYWORDS.abrv(), COMMENTARY_KEYWORDS.args())); - } - - @BeforeEach - void beforeEach() { - Config.getInstance(true); - } - - private static Stream provideTestCases() { - return Stream.of( - argumentsOf(COMMENTARY_KEYWORDS, true, true, "", new String[]{"-ck", "test"}, VALID, 3), - argumentsOf(COMMENTARY_KEYWORDS, true, false, COMMENTARY_KEYWORDS.prop() + ": [test]", new String[]{}, VALID, 1), - argumentsOf(COMMENTARY_KEYWORDS, true, false, COMMENTARY_KEYWORDS.prop() + ":\n - test\n - test2", new String[]{}, VALID, 2), - argumentsOf(COMMENTARY_KEYWORDS, false, true, COMMENTARY_KEYWORDS.prop() + ": [test]", new String[]{}, VALID, 3), - argumentsOf(COMMENTARY_KEYWORDS, false, false, "", new String[]{"-ck", "test"}, VALID, 1), - argumentsOf(COMMENTARY_KEYWORDS, true, true, COMMENTARY_KEYWORDS.prop() + ": [commentary]", new String[]{}, VALID, 2), - - argumentsOf(COMMENTARY_KEYWORDS, true, true, "", new String[]{}, MISSING, 2), - argumentsOf(COMMENTARY_KEYWORDS, false, true, "", new String[]{}, NOT_PRESENT, 2) - ); - } - - @ParameterizedTest - @MethodSource("provideTestCases") - void validate(ConfigProperty property, boolean required, boolean append, String yamlArgs, String[] cmdArgs, - ValidationResult expectedResult, int expectedSize) throws ParseException, YamlInvalidContentException { - SetValidator underTest = new SetValidator(property, required, append); - - ValidationResult result = underTest.validate(new YAML(yamlArgs), parser.parse(options, cmdArgs)); - - assertEquals(expectedResult, result); - assertEquals(expectedSize, Config.getInstance().getCommentaryKeywords().size()); - } -} \ No newline at end of file