From 511f961d2901c5a080cd75722499b6bad20eb803 Mon Sep 17 00:00:00 2001 From: ljacqu Date: Sat, 20 Feb 2016 12:12:24 +0100 Subject: [PATCH] #534 Get default messages from the JAR's messages_en.yml - Using new File(class.getResource(path)) apparently is the wrong approach for in-JAR files --- .../java/fr/xephi/authme/output/Messages.java | 9 ++++++--- .../java/fr/xephi/authme/settings/NewSetting.java | 15 ++++----------- .../authme/output/MessagesIntegrationTest.java | 3 +-- .../fr/xephi/authme/settings/NewSettingTest.java | 11 +++++++---- .../settings/properties/TestConfiguration.java | 2 +- 5 files changed, 19 insertions(+), 21 deletions(-) diff --git a/src/main/java/fr/xephi/authme/output/Messages.java b/src/main/java/fr/xephi/authme/output/Messages.java index fed90c91b..5afba4726 100644 --- a/src/main/java/fr/xephi/authme/output/Messages.java +++ b/src/main/java/fr/xephi/authme/output/Messages.java @@ -8,6 +8,8 @@ import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.configuration.file.YamlConfiguration; import java.io.File; +import java.io.InputStream; +import java.io.InputStreamReader; /** * Class for retrieving and sending translatable messages to players. @@ -16,7 +18,7 @@ public class Messages { private FileConfiguration configuration; private String fileName; - private final File defaultFile; + private final String defaultFile; private FileConfiguration defaultConfiguration; /** @@ -25,7 +27,7 @@ public class Messages { * @param messageFile The messages file to use * @param defaultFile The file with messages to use as default if missing */ - public Messages(File messageFile, File defaultFile) { + public Messages(File messageFile, String defaultFile) { initializeFile(messageFile); this.defaultFile = defaultFile; } @@ -117,7 +119,8 @@ public class Messages { } if (defaultConfiguration == null) { - defaultConfiguration = YamlConfiguration.loadConfiguration(defaultFile); + InputStream stream = Messages.class.getResourceAsStream(defaultFile); + defaultConfiguration = YamlConfiguration.loadConfiguration(new InputStreamReader(stream)); } String message = defaultConfiguration.getString(code); return message == null ? getDefaultErrorMessage(code) : message; diff --git a/src/main/java/fr/xephi/authme/settings/NewSetting.java b/src/main/java/fr/xephi/authme/settings/NewSetting.java index 7c509c95d..79557d9f8 100644 --- a/src/main/java/fr/xephi/authme/settings/NewSetting.java +++ b/src/main/java/fr/xephi/authme/settings/NewSetting.java @@ -18,7 +18,6 @@ import org.yaml.snakeyaml.Yaml; import java.io.File; import java.io.FileWriter; import java.io.IOException; -import java.net.URL; import java.nio.charset.Charset; import java.util.ArrayList; import java.util.Arrays; @@ -110,18 +109,12 @@ public class NewSetting { } /** - * Return the default messages file within the JAR that should contain all messages. + * Return the path to the default messages file within the JAR. * - * @return The default messages file, or {@code null} if it could not be retrieved + * @return The default messages file path */ - public File getDefaultMessagesFile() { - String defaultFilePath = "/messages/messages_en.yml"; - URL url = NewSetting.class.getResource(defaultFilePath); - if (url == null) { - return null; - } - File file = new File(url.getFile()); - return file.exists() ? file : null; + public String getDefaultMessagesFile() { + return "/messages/messages_en.yml"; } public String getEmailMessage() { diff --git a/src/test/java/fr/xephi/authme/output/MessagesIntegrationTest.java b/src/test/java/fr/xephi/authme/output/MessagesIntegrationTest.java index ca7e5f702..5ff79b9dd 100644 --- a/src/test/java/fr/xephi/authme/output/MessagesIntegrationTest.java +++ b/src/test/java/fr/xephi/authme/output/MessagesIntegrationTest.java @@ -50,8 +50,7 @@ public class MessagesIntegrationTest { @Before public void setUpMessages() { File testFile = TestHelper.getJarFile(YML_TEST_FILE); - File defaultFile = TestHelper.getJarFile(YML_DEFAULT_TEST_FILE); - messages = new Messages(testFile, defaultFile); + messages = new Messages(testFile, YML_DEFAULT_TEST_FILE); } @Test diff --git a/src/test/java/fr/xephi/authme/settings/NewSettingTest.java b/src/test/java/fr/xephi/authme/settings/NewSettingTest.java index d381604c6..710698e5a 100644 --- a/src/test/java/fr/xephi/authme/settings/NewSettingTest.java +++ b/src/test/java/fr/xephi/authme/settings/NewSettingTest.java @@ -7,7 +7,8 @@ import org.bukkit.configuration.file.YamlConfiguration; import org.junit.Test; import org.mockito.internal.stubbing.answers.ReturnsArgumentAt; -import java.io.File; +import java.io.IOException; +import java.io.InputStream; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.equalTo; @@ -55,17 +56,19 @@ public class NewSettingTest { } @Test - public void shouldReturnDefaultFile() { + public void shouldReturnDefaultFile() throws IOException { // given YamlConfiguration configuration = mock(YamlConfiguration.class); NewSetting settings = new NewSetting(configuration, null, null); // when - File defaultFile = settings.getDefaultMessagesFile(); + String defaultFile = settings.getDefaultMessagesFile(); // then assertThat(defaultFile, not(nullValue())); - assertThat(defaultFile.exists(), equalTo(true)); + InputStream stream = this.getClass().getResourceAsStream(defaultFile); + assertThat(stream, not(nullValue())); + assertThat(stream.read(), not(equalTo(0))); } private static void setReturnValue(YamlConfiguration config, Property property, T value) { diff --git a/src/test/java/fr/xephi/authme/settings/properties/TestConfiguration.java b/src/test/java/fr/xephi/authme/settings/properties/TestConfiguration.java index dc02e9ccb..72960f6c4 100644 --- a/src/test/java/fr/xephi/authme/settings/properties/TestConfiguration.java +++ b/src/test/java/fr/xephi/authme/settings/properties/TestConfiguration.java @@ -35,7 +35,7 @@ public final class TestConfiguration implements SettingsClass { newProperty(PropertyType.STRING_LIST, "features.boring.colors"); public static final Property DUST_LEVEL = - newProperty(PropertyType.INTEGER, "features.boring.dustLevel", -1); + newProperty("features.boring.dustLevel", -1); public static final Property USE_COOL_FEATURES = newProperty("features.cool.enabled", false);