diff --git a/src/main/java/world/bentobox/bentobox/api/localization/BentoBoxLocale.java b/src/main/java/world/bentobox/bentobox/api/localization/BentoBoxLocale.java index 20f034672..6583bf6c1 100644 --- a/src/main/java/world/bentobox/bentobox/api/localization/BentoBoxLocale.java +++ b/src/main/java/world/bentobox/bentobox/api/localization/BentoBoxLocale.java @@ -72,6 +72,9 @@ public class BentoBoxLocale { * @return the locale language tag */ public String toLanguageTag(){ + if(locale == null) { + return "unknown"; + } return locale.toLanguageTag(); } diff --git a/src/test/java/world/bentobox/bentobox/api/localization/BentoBoxLocaleTest.java b/src/test/java/world/bentobox/bentobox/api/localization/BentoBoxLocaleTest.java new file mode 100644 index 000000000..4b91ddb9e --- /dev/null +++ b/src/test/java/world/bentobox/bentobox/api/localization/BentoBoxLocaleTest.java @@ -0,0 +1,161 @@ +/** + * + */ +package world.bentobox.bentobox.api.localization; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; +import static org.mockito.Matchers.any; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +import java.util.ArrayList; +import java.util.List; +import java.util.Locale; + +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.inventory.ItemFactory; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.BannerMeta; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mockito; +import org.powermock.api.mockito.PowerMockito; +import org.powermock.core.classloader.annotations.PrepareForTest; +import org.powermock.modules.junit4.PowerMockRunner; + +/** + * Tests BentoBoxLocale class + * @author tastybento + * + */ +@RunWith(PowerMockRunner.class) +@PrepareForTest( { Bukkit.class }) +public class BentoBoxLocaleTest { + + private BentoBoxLocale localeObject; + private BannerMeta bannerMeta; + + /** + * @throws java.lang.Exception + */ + @Before + public void setUp() throws Exception { + PowerMockito.mockStatic(Bukkit.class); + // Mock item factory (for itemstacks) + ItemFactory itemFactory = mock(ItemFactory.class); + bannerMeta = mock(BannerMeta.class); + when(itemFactory.getItemMeta(any())).thenReturn(bannerMeta); + when(Bukkit.getItemFactory()).thenReturn(itemFactory); + + Locale locale = Locale.US; + YamlConfiguration config = new YamlConfiguration(); + config.set("meta.banner", "WHITE_BANNER:1:STRIPE_SMALL:RED:SQUARE_TOP_RIGHT:CYAN:SQUARE_TOP_RIGHT:BLUE"); + List authors = new ArrayList<>(); + authors.add("tastybento"); + authors.add("tastybento2"); + config.set("meta.authors", authors ); + config.set("reference.to.test", "test result"); + localeObject = new BentoBoxLocale(locale, config); + } + + /** + * Test method for {@link world.bentobox.bentobox.api.localization.BentoBoxLocale#BentoBoxLocale(java.util.Locale, org.bukkit.configuration.file.YamlConfiguration)}. + */ + @Test + public void testBentoBoxLocale() { + } + + /** + * Test method for {@link world.bentobox.bentobox.api.localization.BentoBoxLocale#get(java.lang.String)}. + */ + @Test + public void testGet() { + assertEquals("test result", localeObject.get("reference.to.test")); + assertEquals("missing.reference", localeObject.get("missing.reference")); + } + + /** + * Test method for {@link world.bentobox.bentobox.api.localization.BentoBoxLocale#getLanguage()}. + */ + @Test + public void testGetLanguage() { + assertEquals(Locale.US.getDisplayLanguage(), localeObject.getLanguage()); + assertEquals("unknown", new BentoBoxLocale(null, new YamlConfiguration()).getLanguage()); + } + + /** + * Test method for {@link world.bentobox.bentobox.api.localization.BentoBoxLocale#getCountry()}. + */ + @Test + public void testGetCountry() { + assertEquals(Locale.US.getDisplayCountry(), localeObject.getCountry()); + assertEquals("unknown", new BentoBoxLocale(null, new YamlConfiguration()).getCountry()); + } + + /** + * Test method for {@link world.bentobox.bentobox.api.localization.BentoBoxLocale#toLanguageTag()}. + */ + @Test + public void testToLanguageTag() { + assertEquals(Locale.US.toLanguageTag(), localeObject.toLanguageTag()); + assertEquals("unknown", new BentoBoxLocale(null, new YamlConfiguration()).toLanguageTag()); + } + + /** + * Test method for {@link world.bentobox.bentobox.api.localization.BentoBoxLocale#getBanner()}. + */ + @Test + public void testGetBanner() { + ItemStack banner = localeObject.getBanner(); + assertEquals(Material.WHITE_BANNER, banner.getType()); + // Check that three patters were added + Mockito.verify(bannerMeta, Mockito.times(3)).addPattern(Mockito.any()); + } + + /** + * Test method for {@link world.bentobox.bentobox.api.localization.BentoBoxLocale#getAuthors()}. + */ + @Test + public void testGetAuthors() { + assertEquals("tastybento", localeObject.getAuthors().get(0)); + assertEquals("tastybento2", localeObject.getAuthors().get(1)); + } + + /** + * Test method for {@link world.bentobox.bentobox.api.localization.BentoBoxLocale#merge(org.bukkit.configuration.file.YamlConfiguration)}. + */ + @Test + public void testMerge() { + YamlConfiguration config2 = new YamlConfiguration(); + config2.set("meta.banner", "SHOULD NOT BE MERGED"); + List authors = new ArrayList<>(); + authors.add("new author"); + config2.set("meta.authors", authors ); + config2.set("reference.to.test", "DO NOT OVERWRITE"); + config2.set("new.string", "this is okay"); + localeObject.merge(config2); + assertEquals("test result", localeObject.get("reference.to.test")); + assertEquals("missing.reference", localeObject.get("missing.reference")); + assertEquals("this is okay", localeObject.get("new.string")); + assertEquals("test result", localeObject.get("reference.to.test")); + assertEquals("tastybento", localeObject.getAuthors().get(0)); + assertEquals("tastybento2", localeObject.getAuthors().get(1)); + assertEquals("new author", localeObject.getAuthors().get(2)); + assertEquals(3, localeObject.getAuthors().size()); + } + + /** + * Test method for {@link world.bentobox.bentobox.api.localization.BentoBoxLocale#contains(java.lang.String)}. + */ + @Test + public void testContains() { + assertTrue(localeObject.contains("reference.to.test")); + assertFalse(localeObject.contains("false.reference.to.test")); + } + +}