diff --git a/src/main/java/fr/xephi/authme/message/AbstractMessageFileHandler.java b/src/main/java/fr/xephi/authme/message/AbstractMessageFileHandler.java index 4dbbe33b..fc140ef1 100644 --- a/src/main/java/fr/xephi/authme/message/AbstractMessageFileHandler.java +++ b/src/main/java/fr/xephi/authme/message/AbstractMessageFileHandler.java @@ -14,13 +14,13 @@ import javax.annotation.PostConstruct; import javax.inject.Inject; import java.io.File; +import static fr.xephi.authme.message.MessagePathHelper.DEFAULT_LANGUAGE; + /** * Handles a YAML message file with a default file fallback. */ public abstract class AbstractMessageFileHandler implements Reloadable { - protected static final String DEFAULT_LANGUAGE = "en"; - @DataFolder @Inject private File dataFolder; diff --git a/src/main/java/fr/xephi/authme/message/HelpMessagesFileHandler.java b/src/main/java/fr/xephi/authme/message/HelpMessagesFileHandler.java index 37888753..c0d18481 100644 --- a/src/main/java/fr/xephi/authme/message/HelpMessagesFileHandler.java +++ b/src/main/java/fr/xephi/authme/message/HelpMessagesFileHandler.java @@ -9,6 +9,8 @@ import javax.inject.Inject; import java.io.InputStream; import java.io.InputStreamReader; +import static fr.xephi.authme.message.MessagePathHelper.DEFAULT_LANGUAGE; + /** * File handler for the help_xx.yml resource. */ @@ -57,6 +59,6 @@ public class HelpMessagesFileHandler extends AbstractMessageFileHandler { @Override protected String createFilePath(String language) { - return "messages/help_" + language + ".yml"; + return MessagePathHelper.createHelpMessageFilePath(language); } } diff --git a/src/main/java/fr/xephi/authme/message/MessagePathHelper.java b/src/main/java/fr/xephi/authme/message/MessagePathHelper.java new file mode 100644 index 00000000..82c829d1 --- /dev/null +++ b/src/main/java/fr/xephi/authme/message/MessagePathHelper.java @@ -0,0 +1,77 @@ +package fr.xephi.authme.message; + +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/** + * Helper for creating and processing paths to message files. + */ +public final class MessagePathHelper { + + /** The default language (used as fallback, assumed to be complete, etc.). */ + public static final String DEFAULT_LANGUAGE = "en"; + /** Local path to the folder containing the message files. */ + public static final String MESSAGES_FOLDER = "messages/"; + /** Local path to the default messages file (messages/messages_en.yml). */ + public static final String DEFAULT_MESSAGES_FILE = createMessageFilePath(DEFAULT_LANGUAGE); + + private static final Pattern MESSAGE_FILE_PATTERN = Pattern.compile("messages_([a-z]+)\\.yml"); + private static final Pattern HELP_MESSAGES_FILE = Pattern.compile("help_[a-z]+\\.yml"); + + private MessagePathHelper() { + } + + /** + * Creates the local path to the messages file for the provided language code. + * + * @param languageCode the language code + * @return local path to the messages file of the given language + */ + public static String createMessageFilePath(String languageCode) { + return "messages/messages_" + languageCode + ".yml"; + } + + /** + * Creates the local path to the help messages file for the provided language code. + * + * @param languageCode the language code + * @return local path to the help messages file of the given language + */ + public static String createHelpMessageFilePath(String languageCode) { + return "messages/help_" + languageCode + ".yml"; + } + + /** + * Returns whether the given file name is a messages file. + * + * @param filename the file name to test + * @return true if it is a messages file, false otherwise + */ + public static boolean isMessagesFile(String filename) { + return MESSAGE_FILE_PATTERN.matcher(filename).matches(); + } + + /** + * Returns the language code the given file name is for if it is a messages file, otherwise null is returned. + * + * @param filename the file name to process + * @return the language code the file name is a messages file for, or null if not applicable + */ + public static String getLanguageIfIsMessagesFile(String filename) { + Matcher matcher = MESSAGE_FILE_PATTERN.matcher(filename); + if (matcher.matches()) { + return matcher.group(1); + } + return null; + } + + /** + * Returns whether the given file name is a help messages file. + * + * @param filename the file name to test + * @return true if it is a help messages file, false otherwise + */ + public static boolean isHelpFile(String filename) { + return HELP_MESSAGES_FILE.matcher(filename).matches(); + } +} diff --git a/src/main/java/fr/xephi/authme/message/MessagesFileHandler.java b/src/main/java/fr/xephi/authme/message/MessagesFileHandler.java index 7ca19249..a047ee14 100644 --- a/src/main/java/fr/xephi/authme/message/MessagesFileHandler.java +++ b/src/main/java/fr/xephi/authme/message/MessagesFileHandler.java @@ -5,6 +5,8 @@ import fr.xephi.authme.message.updater.MessageUpdater; import javax.inject.Inject; +import static fr.xephi.authme.message.MessagePathHelper.DEFAULT_LANGUAGE; + /** * File handler for the messages_xx.yml resource. */ @@ -38,6 +40,6 @@ public class MessagesFileHandler extends AbstractMessageFileHandler { @Override protected String createFilePath(String language) { - return "messages/messages_" + language + ".yml"; + return MessagePathHelper.createMessageFilePath(language); } } diff --git a/src/main/java/fr/xephi/authme/service/HelpTranslationGenerator.java b/src/main/java/fr/xephi/authme/service/HelpTranslationGenerator.java index 21407b4f..e1c8c5ba 100644 --- a/src/main/java/fr/xephi/authme/service/HelpTranslationGenerator.java +++ b/src/main/java/fr/xephi/authme/service/HelpTranslationGenerator.java @@ -8,6 +8,7 @@ import fr.xephi.authme.command.help.HelpMessage; import fr.xephi.authme.command.help.HelpMessagesService; import fr.xephi.authme.command.help.HelpSection; import fr.xephi.authme.initialization.DataFolder; +import fr.xephi.authme.message.MessagePathHelper; import fr.xephi.authme.permission.DefaultPermission; import fr.xephi.authme.settings.Settings; import fr.xephi.authme.settings.properties.PluginSettings; @@ -49,7 +50,7 @@ public class HelpTranslationGenerator { */ public File updateHelpFile() throws IOException { String languageCode = settings.getProperty(PluginSettings.MESSAGES_LANGUAGE); - File helpFile = new File(dataFolder, "messages/help_" + languageCode + ".yml"); + File helpFile = new File(dataFolder, MessagePathHelper.createHelpMessageFilePath(languageCode)); Map helpEntries = generateHelpMessageEntries(); String helpEntriesYaml = exportToYaml(helpEntries); diff --git a/src/test/java/fr/xephi/authme/command/help/HelpMessagesConsistencyTest.java b/src/test/java/fr/xephi/authme/command/help/HelpMessagesConsistencyTest.java index 1c4f7542..019e6c86 100644 --- a/src/test/java/fr/xephi/authme/command/help/HelpMessagesConsistencyTest.java +++ b/src/test/java/fr/xephi/authme/command/help/HelpMessagesConsistencyTest.java @@ -5,6 +5,7 @@ import ch.jalu.configme.resource.YamlFileReader; import fr.xephi.authme.TestHelper; import fr.xephi.authme.command.CommandDescription; import fr.xephi.authme.command.CommandInitializer; +import fr.xephi.authme.message.MessagePathHelper; import org.bukkit.configuration.MemorySection; import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.configuration.file.YamlConfiguration; @@ -25,7 +26,8 @@ import static org.junit.Assert.assertThat; */ public class HelpMessagesConsistencyTest { - private static final File DEFAULT_MESSAGES_FILE = TestHelper.getJarFile("/messages/help_en.yml"); + private static final File DEFAULT_MESSAGES_FILE = + TestHelper.getJarFile("/" + MessagePathHelper.createHelpMessageFilePath(MessagePathHelper.DEFAULT_LANGUAGE)); @Test public void shouldHaveIdenticalTexts() { diff --git a/src/test/java/fr/xephi/authme/command/help/HelpMessagesServiceTest.java b/src/test/java/fr/xephi/authme/command/help/HelpMessagesServiceTest.java index c7202a92..514724a9 100644 --- a/src/test/java/fr/xephi/authme/command/help/HelpMessagesServiceTest.java +++ b/src/test/java/fr/xephi/authme/command/help/HelpMessagesServiceTest.java @@ -7,6 +7,7 @@ import fr.xephi.authme.command.CommandDescription; import fr.xephi.authme.command.TestCommandsUtil; import fr.xephi.authme.message.AbstractMessageFileHandler; import fr.xephi.authme.message.HelpMessagesFileHandler; +import fr.xephi.authme.message.MessagePathHelper; import fr.xephi.authme.permission.DefaultPermission; import fr.xephi.authme.settings.Settings; import fr.xephi.authme.settings.properties.PluginSettings; @@ -32,7 +33,7 @@ import static org.mockito.Mockito.mock; */ public class HelpMessagesServiceTest { - private static final String TEST_FILE = "/fr/xephi/authme/command/help/help_test.yml"; + private static final String TEST_FILE = TestHelper.PROJECT_ROOT + "command/help/help_test.yml"; private static final Collection COMMANDS = TestCommandsUtil.generateCommands(); private HelpMessagesService helpMessagesService; @@ -42,10 +43,10 @@ public class HelpMessagesServiceTest { private File dataFolder; @Before - public void initializeHandler() throws IOException, InstantiationException, IllegalAccessException { + public void initializeHandler() throws IOException { dataFolder = temporaryFolder.newFolder(); new File(dataFolder, "messages").mkdirs(); - File messagesFile = new File(dataFolder, "messages/help_test.yml"); + File messagesFile = new File(dataFolder, MessagePathHelper.createHelpMessageFilePath("test")); Files.copy(TestHelper.getJarFile(TEST_FILE), messagesFile); HelpMessagesFileHandler helpMessagesFileHandler = createMessagesFileHandler(); @@ -146,7 +147,7 @@ public class HelpMessagesServiceTest { assertThat(description, equalTo(command.getDescription())); } - private HelpMessagesFileHandler createMessagesFileHandler() throws IllegalAccessException, InstantiationException { + private HelpMessagesFileHandler createMessagesFileHandler() { Settings settings = mock(Settings.class); given(settings.getProperty(PluginSettings.MESSAGES_LANGUAGE)).willReturn("test"); diff --git a/src/test/java/fr/xephi/authme/data/limbo/persistence/DistributedFilesPersistenceHandlerTest.java b/src/test/java/fr/xephi/authme/data/limbo/persistence/DistributedFilesPersistenceHandlerTest.java index 7c2c84d2..fd41134a 100644 --- a/src/test/java/fr/xephi/authme/data/limbo/persistence/DistributedFilesPersistenceHandlerTest.java +++ b/src/test/java/fr/xephi/authme/data/limbo/persistence/DistributedFilesPersistenceHandlerTest.java @@ -26,6 +26,8 @@ import java.io.IOException; import java.util.Collections; import java.util.UUID; +import static fr.xephi.authme.TestHelper.PROJECT_ROOT; +import static fr.xephi.authme.TestHelper.TEST_RESOURCES_FOLDER; import static fr.xephi.authme.data.limbo.LimboPlayerMatchers.hasLocation; import static fr.xephi.authme.data.limbo.LimboPlayerMatchers.isLimbo; import static java.util.UUID.fromString; @@ -96,7 +98,7 @@ public class DistributedFilesPersistenceHandlerTest { playerDataFolder = new File(dataFolder, "playerdata"); playerDataFolder.mkdir(); - File limboFilesFolder = new File("src/test/resources/fr/xephi/authme/data/limbo"); + File limboFilesFolder = new File(TEST_RESOURCES_FOLDER + PROJECT_ROOT + "data/limbo"); for (File file : limboFilesFolder.listFiles()) { File from = new File(playerDataFolder, file.getName()); Files.copy(file, from); diff --git a/src/test/java/fr/xephi/authme/message/HelpMessageConsistencyTest.java b/src/test/java/fr/xephi/authme/message/HelpMessageConsistencyTest.java index 83db38d2..b6fcba7c 100644 --- a/src/test/java/fr/xephi/authme/message/HelpMessageConsistencyTest.java +++ b/src/test/java/fr/xephi/authme/message/HelpMessageConsistencyTest.java @@ -13,9 +13,9 @@ import org.junit.Test; import java.io.File; import java.util.Arrays; import java.util.List; -import java.util.regex.Pattern; import java.util.stream.Collectors; +import static fr.xephi.authme.message.MessagePathHelper.MESSAGES_FOLDER; import static org.hamcrest.Matchers.both; import static org.hamcrest.Matchers.emptyString; import static org.hamcrest.Matchers.not; @@ -28,20 +28,17 @@ import static org.junit.Assert.assertThat; */ public class HelpMessageConsistencyTest { - private static final String MESSAGES_FOLDER = "/messages"; - private static final Pattern HELP_MESSAGES_FILE = Pattern.compile("help_[a-z]+\\.yml"); - private List helpFiles; @Before public void findHelpMessagesFiles() { - File folder = TestHelper.getJarFile(MESSAGES_FOLDER); + File folder = TestHelper.getJarFile("/" + MESSAGES_FOLDER); File[] files = folder.listFiles(); if (files == null || files.length == 0) { throw new IllegalStateException("Could not get files from '" + MESSAGES_FOLDER + "'"); } helpFiles = Arrays.stream(files) - .filter(file -> HELP_MESSAGES_FILE.matcher(file.getName()).matches()) + .filter(file -> MessagePathHelper.isHelpFile(file.getName())) .collect(Collectors.toList()); } diff --git a/src/test/java/fr/xephi/authme/message/MessageFilePlaceholderTest.java b/src/test/java/fr/xephi/authme/message/MessageFilePlaceholderTest.java index f7b8596d..0966902b 100644 --- a/src/test/java/fr/xephi/authme/message/MessageFilePlaceholderTest.java +++ b/src/test/java/fr/xephi/authme/message/MessageFilePlaceholderTest.java @@ -14,9 +14,9 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.List; -import java.util.regex.Pattern; import java.util.stream.Collectors; +import static fr.xephi.authme.message.MessagePathHelper.MESSAGES_FOLDER; import static org.junit.Assert.fail; import static tools.utils.FileIoUtils.listFilesOrThrow; @@ -27,12 +27,6 @@ import static tools.utils.FileIoUtils.listFilesOrThrow; @RunWith(Parameterized.class) public class MessageFilePlaceholderTest { - /** Path in the resources folder where the message files are located. */ - private static final String MESSAGES_FOLDER = "/messages/"; - - /** Pattern for detecting messages files. */ - private static final Pattern IS_MESSAGES_FILE = Pattern.compile("messages_.*?\\.yml"); - /** Defines exclusions: a (key, tag) pair in this map will not be checked in the test. */ private static final Multimap EXCLUSIONS = ImmutableMultimap.builder() .put(MessageKey.INCORRECT_RECOVERY_CODE, "%count") @@ -80,10 +74,10 @@ public class MessageFilePlaceholderTest { @Parameterized.Parameters(name = "{1}") public static List buildParams() { - File folder = TestHelper.getJarFile(MESSAGES_FOLDER); + File folder = TestHelper.getJarFile("/" + MESSAGES_FOLDER); List messageFiles = Arrays.stream(listFilesOrThrow(folder)) - .filter(file -> IS_MESSAGES_FILE.matcher(file.getName()).matches()) + .filter(file -> MessagePathHelper.isMessagesFile(file.getName())) .map(file -> new Object[]{file, file.getName()}) .collect(Collectors.toList()); if (messageFiles.isEmpty()) { diff --git a/src/test/java/fr/xephi/authme/message/MessagePathHelperTest.java b/src/test/java/fr/xephi/authme/message/MessagePathHelperTest.java new file mode 100644 index 00000000..7e12aa4f --- /dev/null +++ b/src/test/java/fr/xephi/authme/message/MessagePathHelperTest.java @@ -0,0 +1,67 @@ +package fr.xephi.authme.message; + +import fr.xephi.authme.settings.properties.PluginSettings; +import org.junit.Test; + +import static org.hamcrest.Matchers.equalTo; +import static org.hamcrest.Matchers.nullValue; +import static org.junit.Assert.assertThat; + +/** + * Test for {@link MessagePathHelper}. + */ +public class MessagePathHelperTest { + + @Test + public void shouldHaveLanguageInSyncWithConfigurations() { + // given / when / then + assertThat(MessagePathHelper.DEFAULT_LANGUAGE, equalTo(PluginSettings.MESSAGES_LANGUAGE.getDefaultValue())); + assertThat(MessagePathHelper.DEFAULT_MESSAGES_FILE, equalTo(MessagePathHelper.createMessageFilePath(MessagePathHelper.DEFAULT_LANGUAGE))); + } + + @Test + public void shouldBuildTextFilePaths() { + // given / when / then + assertThat(MessagePathHelper.createMessageFilePath("qq"), equalTo(MessagePathHelper.MESSAGES_FOLDER + "messages_qq.yml")); + assertThat(MessagePathHelper.createHelpMessageFilePath("qq"), equalTo(MessagePathHelper.MESSAGES_FOLDER + "help_qq.yml")); + } + + @Test + public void shouldRecognizeIfIsMessagesFile() { + // given / when / then + assertThat(MessagePathHelper.isMessagesFile("messages_nl.yml"), equalTo(true)); + assertThat(MessagePathHelper.isMessagesFile("messages_testtest.yml"), equalTo(true)); + + assertThat(MessagePathHelper.isMessagesFile("messages/messages_fr.yml"), equalTo(false)); + assertThat(MessagePathHelper.isMessagesFile("Messages_fr.yml"), equalTo(false)); + assertThat(MessagePathHelper.isMessagesFile("otherfile.txt"), equalTo(false)); + assertThat(MessagePathHelper.isMessagesFile("messages_de.txt"), equalTo(false)); + assertThat(MessagePathHelper.isMessagesFile(""), equalTo(false)); + } + + @Test + public void shouldReturnLanguageForMessagesFile() { + // given / when / then + assertThat(MessagePathHelper.getLanguageIfIsMessagesFile("messages_nl.yml"), equalTo("nl")); + assertThat(MessagePathHelper.getLanguageIfIsMessagesFile("messages_testtest.yml"), equalTo("testtest")); + + assertThat(MessagePathHelper.getLanguageIfIsMessagesFile("messages/messages_fr.yml"), nullValue()); + assertThat(MessagePathHelper.getLanguageIfIsMessagesFile("Messages_fr.yml"), nullValue()); + assertThat(MessagePathHelper.getLanguageIfIsMessagesFile("otherfile.txt"), nullValue()); + assertThat(MessagePathHelper.getLanguageIfIsMessagesFile("messages_de.txt"), nullValue()); + assertThat(MessagePathHelper.getLanguageIfIsMessagesFile(""), nullValue()); + } + + @Test + public void shouldRecognizeIfIsHelpFile() { + // given / when / then + assertThat(MessagePathHelper.isHelpFile("help_nl.yml"), equalTo(true)); + assertThat(MessagePathHelper.isHelpFile("help_testtest.yml"), equalTo(true)); + + assertThat(MessagePathHelper.isHelpFile("messages/help_fr.yml"), equalTo(false)); + assertThat(MessagePathHelper.isHelpFile("Help_fr.yml"), equalTo(false)); + assertThat(MessagePathHelper.isHelpFile("otherfile.txt"), equalTo(false)); + assertThat(MessagePathHelper.isHelpFile("help_de.txt"), equalTo(false)); + assertThat(MessagePathHelper.isHelpFile(""), equalTo(false)); + } +} diff --git a/src/test/java/fr/xephi/authme/message/MessagesFileConsistencyTest.java b/src/test/java/fr/xephi/authme/message/MessagesFileConsistencyTest.java index c1362dd6..1679e9ac 100644 --- a/src/test/java/fr/xephi/authme/message/MessagesFileConsistencyTest.java +++ b/src/test/java/fr/xephi/authme/message/MessagesFileConsistencyTest.java @@ -19,11 +19,11 @@ import static org.junit.Assert.fail; */ public class MessagesFileConsistencyTest { - private static final String MESSAGES_FILE = "/messages/messages_en.yml"; + private static final String MESSAGES_FILE = MessagePathHelper.DEFAULT_MESSAGES_FILE; @Test public void shouldHaveAllMessages() { - File file = TestHelper.getJarFile(MESSAGES_FILE); + File file = TestHelper.getJarFile("/" + MESSAGES_FILE); PropertyReader reader = new YamlFileReader(file); List errors = new ArrayList<>(); for (MessageKey messageKey : MessageKey.values()) { diff --git a/src/test/java/fr/xephi/authme/message/MessagesIntegrationTest.java b/src/test/java/fr/xephi/authme/message/MessagesIntegrationTest.java index d8a2bd00..d57e29fe 100644 --- a/src/test/java/fr/xephi/authme/message/MessagesIntegrationTest.java +++ b/src/test/java/fr/xephi/authme/message/MessagesIntegrationTest.java @@ -44,7 +44,8 @@ import static org.mockito.hamcrest.MockitoHamcrest.argThat; */ public class MessagesIntegrationTest { - private static final String YML_TEST_FILE = TestHelper.PROJECT_ROOT + "message/messages_test.yml"; + private static final String TEST_MESSAGES_LOCAL_PATH = "message/messages_test.yml"; + private static final String YML_TEST_FILE = TestHelper.PROJECT_ROOT + TEST_MESSAGES_LOCAL_PATH; private Messages messages; private MessagesFileHandler messagesFileHandler; @@ -68,8 +69,8 @@ public class MessagesIntegrationTest { @Before public void setUpMessages() throws IOException { dataFolder = temporaryFolder.newFolder(); - File testFile = new File(dataFolder, "messages/messages_test.yml"); - new File(dataFolder, "messages").mkdirs(); + File testFile = new File(dataFolder, MessagePathHelper.createMessageFilePath("test")); + new File(dataFolder, MessagePathHelper.MESSAGES_FOLDER).mkdirs(); FileUtils.create(testFile); Files.copy(TestHelper.getJarFile(YML_TEST_FILE), testFile); @@ -276,8 +277,8 @@ public class MessagesIntegrationTest { public void shouldFormatDurationObjects() throws IOException { // given // Use the JAR's messages_en.yml file for this, so copy to the file we're using and reload the file handler - File testFile = new File(dataFolder, "messages/messages_test.yml"); - Files.copy(TestHelper.getJarFile("/messages/messages_en.yml"), testFile); + File testFile = new File(dataFolder, MessagePathHelper.createMessageFilePath("test")); + Files.copy(TestHelper.getJarFile("/" + MessagePathHelper.DEFAULT_MESSAGES_FILE), testFile); messagesFileHandler.reload(); Map expectedTexts = ImmutableMap.builder() diff --git a/src/test/java/fr/xephi/authme/message/YamlTextFileCheckerTest.java b/src/test/java/fr/xephi/authme/message/YamlTextFileCheckerTest.java index 2b1820fb..98a87e75 100644 --- a/src/test/java/fr/xephi/authme/message/YamlTextFileCheckerTest.java +++ b/src/test/java/fr/xephi/authme/message/YamlTextFileCheckerTest.java @@ -11,10 +11,10 @@ import org.junit.Test; import java.io.File; import java.util.ArrayList; -import java.util.Arrays; import java.util.List; -import java.util.regex.Pattern; +import java.util.function.Predicate; +import static fr.xephi.authme.message.MessagePathHelper.MESSAGES_FOLDER; import static org.junit.Assert.fail; import static tools.utils.FileIoUtils.listFilesOrThrow; @@ -23,52 +23,50 @@ import static tools.utils.FileIoUtils.listFilesOrThrow; */ public class YamlTextFileCheckerTest { - /** Path in the resources folder where the message files are located. */ - private static final String MESSAGES_FOLDER = "/messages/"; /** Contains all files of the MESSAGES_FOLDER. */ - private static List messageFiles; + private static File[] messageFiles; @BeforeClass public static void loadMessagesFiles() { - File folder = TestHelper.getJarFile(MESSAGES_FOLDER); - messageFiles = Arrays.asList(listFilesOrThrow(folder)); + File folder = TestHelper.getJarFile("/" + MESSAGES_FOLDER); + messageFiles = listFilesOrThrow(folder); } @Test public void testAllMessagesYmlFiles() { checkFiles( - Pattern.compile("messages_\\w+\\.yml"), + MessagePathHelper::isMessagesFile, MessageKey.LOGIN_MESSAGE.getKey()); } @Test public void testAllHelpYmlFiles() { checkFiles( - Pattern.compile("help_\\w+\\.yml"), + MessagePathHelper::isHelpFile, HelpSection.ALTERNATIVES.getKey()); } /** * Checks all files in the messages folder that match the given pattern. * - * @param pattern the pattern the file name needs to match + * @param isRelevantFilePredicate predicate determining which files should be tested * @param mandatoryKey key present in all matched files */ - private void checkFiles(Pattern pattern, String mandatoryKey) { + private void checkFiles(Predicate isRelevantFilePredicate, String mandatoryKey) { List errors = new ArrayList<>(); boolean hasMatch = false; for (File file : messageFiles) { - if (pattern.matcher(file.getName()).matches()) { + if (isRelevantFilePredicate.test(file.getName())) { checkFile(file, mandatoryKey, errors); hasMatch = true; } } if (!errors.isEmpty()) { - fail("Errors while checking files matching '" + pattern + "':\n-" + String.join("\n-", errors)); + fail("Errors while checking files\n-" + String.join("\n-", errors)); } else if (!hasMatch) { - fail("Could not find any files satisfying pattern '" + pattern + "'"); + fail("Could not find any files matching criteria"); } } diff --git a/src/test/java/fr/xephi/authme/message/updater/MessageUpdaterTest.java b/src/test/java/fr/xephi/authme/message/updater/MessageUpdaterTest.java index cb4d0315..eac3b67e 100644 --- a/src/test/java/fr/xephi/authme/message/updater/MessageUpdaterTest.java +++ b/src/test/java/fr/xephi/authme/message/updater/MessageUpdaterTest.java @@ -19,6 +19,7 @@ import java.util.Map; import java.util.Set; import java.util.stream.Collectors; +import static fr.xephi.authme.message.MessagePathHelper.DEFAULT_MESSAGES_FILE; import static org.hamcrest.Matchers.equalTo; import static org.junit.Assert.assertThat; @@ -40,7 +41,7 @@ public class MessageUpdaterTest { @Test public void shouldNotUpdateDefaultFile() throws IOException { // given - String messagesFilePath = "messages/messages_en.yml"; + String messagesFilePath = DEFAULT_MESSAGES_FILE; File messagesFile = temporaryFolder.newFile(); Files.copy(TestHelper.getJarFile("/" + messagesFilePath), messagesFile); long modifiedDate = messagesFile.lastModified(); @@ -60,7 +61,7 @@ public class MessageUpdaterTest { Files.copy(TestHelper.getJarFile(TestHelper.PROJECT_ROOT + "message/messages_test.yml"), messagesFile); // when - boolean wasChanged = messageUpdater.migrateAndSave(messagesFile, "does-not-exist", "messages/messages_en.yml"); + boolean wasChanged = messageUpdater.migrateAndSave(messagesFile, "does-not-exist", DEFAULT_MESSAGES_FILE); // then assertThat(wasChanged, equalTo(true)); @@ -80,7 +81,7 @@ public class MessageUpdaterTest { Files.copy(TestHelper.getJarFile(TestHelper.PROJECT_ROOT + "message/messages_en_old.yml"), messagesFile); // when - boolean wasChanged = messageUpdater.migrateAndSave(messagesFile, "messages/messages_en.yml", "messages/messages_en.yml"); + boolean wasChanged = messageUpdater.migrateAndSave(messagesFile, DEFAULT_MESSAGES_FILE, DEFAULT_MESSAGES_FILE); // then assertThat(wasChanged, equalTo(true)); @@ -106,7 +107,7 @@ public class MessageUpdaterTest { Files.copy(TestHelper.getJarFile(TestHelper.PROJECT_ROOT + "message/messages_test2.yml"), messagesFile); // when - boolean wasChanged = messageUpdater.migrateAndSave(messagesFile, "messages/messages_en.yml", "messages/messages_en.yml"); + boolean wasChanged = messageUpdater.migrateAndSave(messagesFile, DEFAULT_MESSAGES_FILE, DEFAULT_MESSAGES_FILE); // then assertThat(wasChanged, equalTo(true)); diff --git a/src/test/java/tools/docs/translations/TranslationsGatherer.java b/src/test/java/tools/docs/translations/TranslationsGatherer.java index 3e2119ff..9a08bd50 100644 --- a/src/test/java/tools/docs/translations/TranslationsGatherer.java +++ b/src/test/java/tools/docs/translations/TranslationsGatherer.java @@ -2,14 +2,14 @@ package tools.docs.translations; import ch.jalu.configme.resource.PropertyReader; import ch.jalu.configme.resource.YamlFileReader; +import fr.xephi.authme.message.MessagePathHelper; import fr.xephi.authme.message.MessageKey; import tools.utils.ToolsConstants; import java.io.File; import java.util.ArrayList; +import java.util.Comparator; import java.util.List; -import java.util.regex.Matcher; -import java.util.regex.Pattern; import static tools.utils.FileIoUtils.listFilesOrThrow; @@ -18,14 +18,13 @@ import static tools.utils.FileIoUtils.listFilesOrThrow; */ public class TranslationsGatherer { - private static final Pattern MESSAGES_PATTERN = Pattern.compile("messages_([a-z]{2,4})\\.yml"); - private static final String MESSAGES_FOLDER = ToolsConstants.MAIN_RESOURCES_ROOT + "messages/"; + private static final String MESSAGES_FOLDER = ToolsConstants.MAIN_RESOURCES_ROOT + MessagePathHelper.MESSAGES_FOLDER; private List translationInfo = new ArrayList<>(); public TranslationsGatherer() { gatherTranslations(); - translationInfo.sort((e1, e2) -> getSortCode(e1).compareTo(getSortCode(e2))); + translationInfo.sort(Comparator.comparing(TranslationsGatherer::getSortCode)); } public List getTranslationInfo() { @@ -35,7 +34,7 @@ public class TranslationsGatherer { private void gatherTranslations() { File[] files = listFilesOrThrow(new File(MESSAGES_FOLDER)); for (File file : files) { - String code = getLanguageCode(file.getName()); + String code = MessagePathHelper.getLanguageIfIsMessagesFile(file.getName()); if (code != null) { processMessagesFile(code, file); } @@ -53,14 +52,6 @@ public class TranslationsGatherer { translationInfo.add(new TranslationInfo(code, (double) availableMessages / MessageKey.values().length)); } - private String getLanguageCode(String messagesFile) { - Matcher matcher = MESSAGES_PATTERN.matcher(messagesFile); - if (matcher.find()) { - return matcher.group(1); - } - return null; - } - /** * Returns the language code from the translation info for sorting purposes. * Returns "a" for "en" language code to sort English on top. @@ -69,7 +60,7 @@ public class TranslationsGatherer { * @return the language code for sorting */ private static String getSortCode(TranslationInfo info) { - return "en".equals(info.code) ? "a" : info.code; + return MessagePathHelper.DEFAULT_LANGUAGE.equals(info.code) ? "a" : info.code; } public static final class TranslationInfo { diff --git a/src/test/java/tools/messages/AddJavaDocToMessageEnumTask.java b/src/test/java/tools/messages/AddJavaDocToMessageEnumTask.java index 44306dc8..383a3e96 100644 --- a/src/test/java/tools/messages/AddJavaDocToMessageEnumTask.java +++ b/src/test/java/tools/messages/AddJavaDocToMessageEnumTask.java @@ -1,5 +1,6 @@ package tools.messages; +import fr.xephi.authme.message.MessagePathHelper; import fr.xephi.authme.message.MessageKey; import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.configuration.file.YamlConfiguration; @@ -15,7 +16,8 @@ import java.util.List; */ public class AddJavaDocToMessageEnumTask implements AutoToolTask { - private static final String MESSAGES_FILE = ToolsConstants.MAIN_RESOURCES_ROOT + "messages/messages_en.yml"; + private static final String MESSAGES_FILE = + ToolsConstants.MAIN_RESOURCES_ROOT + MessagePathHelper.DEFAULT_MESSAGES_FILE; private FileConfiguration configuration; diff --git a/src/test/java/tools/messages/VerifyMessagesTask.java b/src/test/java/tools/messages/VerifyMessagesTask.java index e60fa0fd..c08108cd 100644 --- a/src/test/java/tools/messages/VerifyMessagesTask.java +++ b/src/test/java/tools/messages/VerifyMessagesTask.java @@ -1,6 +1,7 @@ package tools.messages; import com.google.common.collect.Multimap; +import fr.xephi.authme.message.MessagePathHelper; import fr.xephi.authme.message.MessageKey; import fr.xephi.authme.util.StringUtils; import org.bukkit.configuration.file.FileConfiguration; @@ -15,8 +16,8 @@ import java.util.List; import java.util.Map; import java.util.Scanner; import java.util.Set; -import java.util.regex.Pattern; +import static fr.xephi.authme.message.MessagePathHelper.DEFAULT_MESSAGES_FILE; import static tools.utils.FileIoUtils.listFilesOrThrow; /** @@ -25,11 +26,7 @@ import static tools.utils.FileIoUtils.listFilesOrThrow; public final class VerifyMessagesTask implements ToolTask { /** The folder containing the message files. */ - private static final String MESSAGES_FOLDER = ToolsConstants.MAIN_RESOURCES_ROOT + "messages/"; - /** Pattern of the message file names. */ - private static final Pattern MESSAGE_FILE_PATTERN = Pattern.compile("messages_[a-z]{2,7}\\.yml"); - /** File to get default messages from (assumes that it is complete). */ - private static final String DEFAULT_MESSAGES_FILE = MESSAGES_FOLDER + "messages_en.yml"; + private static final String MESSAGES_FOLDER = ToolsConstants.MAIN_RESOURCES_ROOT + MessagePathHelper.MESSAGES_FOLDER; @Override public String getTaskName() { @@ -50,7 +47,7 @@ public final class VerifyMessagesTask implements ToolTask { if (StringUtils.isEmpty(inputFile)) { messageFiles = getMessagesFiles(); } else { - File customFile = new File(MESSAGES_FOLDER, "messages_" + inputFile + ".yml"); + File customFile = new File(ToolsConstants.MAIN_RESOURCES_ROOT, MessagePathHelper.createMessageFilePath(inputFile)); messageFiles = Collections.singletonList(customFile); } @@ -118,7 +115,7 @@ public final class VerifyMessagesTask implements ToolTask { File[] files = listFilesOrThrow(new File(MESSAGES_FOLDER)); List messageFiles = new ArrayList<>(); for (File file : files) { - if (MESSAGE_FILE_PATTERN.matcher(file.getName()).matches()) { + if (MessagePathHelper.isMessagesFile(file.getName())) { messageFiles.add(file); } }