From d0c4b07f52b122ce9d8ad2a291a94ef59e77fa67 Mon Sep 17 00:00:00 2001 From: RatzzFatzz Date: Thu, 16 Feb 2023 22:43:38 +0100 Subject: [PATCH] Add AttributeConfigValidatorTest --- .../validator/AttributeConfigValidator.java | 1 - .../model/AttributeConfig.java | 15 ++++ .../AttributeConfigValidatorTest.java | 90 +++++++++++++++++++ 3 files changed, 105 insertions(+), 1 deletion(-) create mode 100644 src/test/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/validator/AttributeConfigValidatorTest.java diff --git a/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/validator/AttributeConfigValidator.java b/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/validator/AttributeConfigValidator.java index ee3a17f..64b2cf3 100644 --- a/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/validator/AttributeConfigValidator.java +++ b/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/validator/AttributeConfigValidator.java @@ -6,7 +6,6 @@ import at.pcgamingfreaks.mkvaudiosubtitlechanger.model.ConfigProperty; import at.pcgamingfreaks.yaml.YAML; import org.apache.commons.cli.CommandLine; -import java.util.ArrayList; import java.util.List; import java.util.function.Function; import java.util.stream.Collectors; diff --git a/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/model/AttributeConfig.java b/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/model/AttributeConfig.java index 3208cc6..53dd213 100644 --- a/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/model/AttributeConfig.java +++ b/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/model/AttributeConfig.java @@ -4,6 +4,8 @@ import lombok.AllArgsConstructor; import lombok.Getter; import lombok.extern.log4j.Log4j2; +import java.util.Objects; + @Log4j2 @Getter @AllArgsConstructor @@ -11,6 +13,19 @@ public class AttributeConfig { private final String audioLanguage; private final String subtitleLanguage; + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + AttributeConfig that = (AttributeConfig) o; + return Objects.equals(audioLanguage, that.audioLanguage) && Objects.equals(subtitleLanguage, that.subtitleLanguage); + } + + @Override + public int hashCode() { + return Objects.hash(audioLanguage, subtitleLanguage); + } + @Override public String toString() { return "AttributeConfig{" diff --git a/src/test/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/validator/AttributeConfigValidatorTest.java b/src/test/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/validator/AttributeConfigValidatorTest.java new file mode 100644 index 0000000..bd14457 --- /dev/null +++ b/src/test/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/validator/AttributeConfigValidatorTest.java @@ -0,0 +1,90 @@ +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.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.io.File; +import java.nio.file.Path; +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 at.pcgamingfreaks.mkvaudiosubtitlechanger.util.TestUtil.argumentsOf; +import static org.junit.jupiter.api.Assertions.*; + +class AttributeConfigValidatorTest { + private static final String TEST_DIR = "src/test/resources/test-dir"; + private static final String TEST_FILE = "src/test/resources/test-dir/test-file.mkv"; + private static final String TEST_CONFIG = "src/test/resources/test-dir/test-config.yml"; + + 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(), true)); + } + + @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(attrConfYaml("jpn", "ger", "jpn", "eng"), new String[]{}, VALID, attrConf("jpn", "ger", "jpn", "eng")), + Arguments.of(attrConfYaml("jpn", "ger", "jpn", "OFF"), new String[]{}, 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) { + String yaml = "attribute-config: "; + int counter = 0; + for (int i = 0; i < languages.length; i += 2) { + counter++; + yaml += String.format("\n %s:\n audio: %s\n subtitle: %s", counter, languages[0], languages[1]); + } + return yaml; + } + + private static List attrConf(String... languages) { + List conf = new ArrayList<>(); + for (int i = 0; i < languages.length; i += 2) { + conf.add(new AttributeConfig(languages[0], languages[1])); + } + return conf; + } +} \ No newline at end of file