From dea45194e94dd11e73ef4d249c7eeeb32e8f25ab Mon Sep 17 00:00:00 2001 From: siddharth2010 Date: Fri, 1 Jun 2018 09:20:59 +0530 Subject: [PATCH] Add BookUtilsTest --- .../di/modules/ApplicationModule.java | 10 +++- .../kiwix/kiwixmobile/utils/BookUtils.java | 6 +- .../kiwixmobile/utils/LanguageUtils.java | 13 ++-- .../kiwixmobile/utils/BookUtilsTest.java | 59 +++++++++++++++++++ 4 files changed, 78 insertions(+), 10 deletions(-) create mode 100644 app/src/test/java/org/kiwix/kiwixmobile/utils/BookUtilsTest.java diff --git a/app/src/main/java/org/kiwix/kiwixmobile/di/modules/ApplicationModule.java b/app/src/main/java/org/kiwix/kiwixmobile/di/modules/ApplicationModule.java index 6ca032f54..b4fc34f03 100644 --- a/app/src/main/java/org/kiwix/kiwixmobile/di/modules/ApplicationModule.java +++ b/app/src/main/java/org/kiwix/kiwixmobile/di/modules/ApplicationModule.java @@ -28,6 +28,7 @@ import javax.inject.Singleton; import dagger.Module; import dagger.Provides; import dagger.android.AndroidInjectionModule; +import org.kiwix.kiwixmobile.utils.LanguageUtils; @Module(includes = {ActivityBindingModule.class, AndroidInjectionModule.class}) public class ApplicationModule { @@ -45,8 +46,11 @@ public class ApplicationModule { return (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); } - @Provides @Singleton - BookUtils provideBookUtils() { - return new BookUtils(); + @Provides @Singleton BookUtils provideBookUtils(LanguageUtils.LanguageContainer container) { + return new BookUtils(container); + } + + @Provides @Singleton LanguageUtils.LanguageContainer provideLanguageContainer(){ + return new LanguageUtils.LanguageContainer(); } } diff --git a/app/src/main/java/org/kiwix/kiwixmobile/utils/BookUtils.java b/app/src/main/java/org/kiwix/kiwixmobile/utils/BookUtils.java index 1f3d266ad..1ed48a6a7 100644 --- a/app/src/main/java/org/kiwix/kiwixmobile/utils/BookUtils.java +++ b/app/src/main/java/org/kiwix/kiwixmobile/utils/BookUtils.java @@ -27,10 +27,12 @@ import java.util.Map; public class BookUtils { + public LanguageUtils.LanguageContainer container; public final Map localeMap; // Create a map of ISO 369-2 language codes - public BookUtils() { + public BookUtils(LanguageUtils.LanguageContainer container) { + this.container = container; String[] languages = Locale.getISOLanguages(); localeMap = new HashMap<>(languages.length); for (String language : languages) { @@ -47,7 +49,7 @@ public class BookUtils { } if (languageCode.length() == 2) { - return new LanguageUtils.LanguageContainer(languageCode).getLanguageName(); + return container.findLanguageName(languageCode).getLanguageName(); } else if (languageCode.length() == 3) { try { return localeMap.get(languageCode).getDisplayLanguage(); diff --git a/app/src/main/java/org/kiwix/kiwixmobile/utils/LanguageUtils.java b/app/src/main/java/org/kiwix/kiwixmobile/utils/LanguageUtils.java index 3ad6c06cc..da40a3289 100644 --- a/app/src/main/java/org/kiwix/kiwixmobile/utils/LanguageUtils.java +++ b/app/src/main/java/org/kiwix/kiwixmobile/utils/LanguageUtils.java @@ -79,9 +79,11 @@ public class LanguageUtils { Locale locale = new Locale(language); Locale.setDefault(locale); Configuration config = new Configuration(); - config.locale = locale; if (Build.VERSION.SDK_INT >= 17) { + config.setLocale(locale); config.setLayoutDirection(locale); + } else { + config.locale = locale; } context.getResources() .updateConfiguration(config, context.getResources().getDisplayMetrics()); @@ -108,7 +110,6 @@ public class LanguageUtils { return mLocaleMap.get(iso3.toUpperCase()); } - @TargetApi(Build.VERSION_CODES.N) public static Locale getCurrentLocale(Context context){ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N){ return context.getResources().getConfiguration().getLocales().get(0); @@ -170,7 +171,7 @@ public class LanguageUtils { private void setupLanguageList() { for (String languageCode : mLocaleLanguageCodes) { - mLanguageList.add(new LanguageContainer(languageCode)); + mLanguageList.add(new LanguageContainer().findLanguageName(languageCode)); } } @@ -289,7 +290,7 @@ public class LanguageUtils { // Set the custom typeface textView.setTypeface(Typeface.createFromAsset(mContext.getAssets(), - getTypeface(Locale.getDefault().getLanguage()))); + getTypeface(Locale.getDefault().getLanguage()))); Log.d(TAG_KIWIX, "Applying custom font"); // Reduce the text size @@ -316,7 +317,7 @@ public class LanguageUtils { // This constructor will take care of creating a language name for the given ISO 639-1 language code. // The language name will always be in english to ensure user friendliness and to prevent // possible incompatibilities, since not all language names are available in all languages. - public LanguageContainer(String languageCode) { + public LanguageContainer findLanguageName(String languageCode) { mLanguageCode = languageCode; try { @@ -327,8 +328,10 @@ public class LanguageUtils { if (mLanguageName.length() == 2) { mLanguageName = new Locale(languageCode).getDisplayLanguage(new Locale("en")); } + return this; } catch (Exception e) { mLanguageName = ""; + return this; } } diff --git a/app/src/test/java/org/kiwix/kiwixmobile/utils/BookUtilsTest.java b/app/src/test/java/org/kiwix/kiwixmobile/utils/BookUtilsTest.java new file mode 100644 index 000000000..675c56fb0 --- /dev/null +++ b/app/src/test/java/org/kiwix/kiwixmobile/utils/BookUtilsTest.java @@ -0,0 +1,59 @@ +/* + * Kiwix Android + * Copyright (C) 2018 Kiwix + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package org.kiwix.kiwixmobile.utils; + +import static org.junit.Assert.assertEquals; +import static org.mockito.ArgumentMatchers.anyString; +import static org.mockito.Mockito.when; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.junit.MockitoJUnitRunner; + +@RunWith(MockitoJUnitRunner.class) +public class BookUtilsTest { + @Mock private LanguageUtils.LanguageContainer container; + + /* + * Test that the language returned for the given language code is correct + */ + @Test + public void testLanguageFromCode() { + BookUtils t = new BookUtils(container); + + //testing trivial cases + assertEquals("null is passed", "", t.getLanguage(null)); + assertEquals("empty string passed", "", t.getLanguage("")); + assertEquals("code length more than 3", "", t.getLanguage("english")); + + //testing the hashmap created inside the BookUtils class + assertEquals("code length equals 3 (English)", "English", t.getLanguage("eng")); + assertEquals("code length equals 3 (Hindi)", "Hindi", t.getLanguage("hin")); + assertEquals("code length equals 3 (French)", "French", t.getLanguage("fra")); + assertEquals("code length equals 3 (Akan)", "Akan", t.getLanguage("aka")); + assertEquals("code length equals 3 (Burmese)", "Burmese", t.getLanguage("mya")); + assertEquals("code length equals 3 (Catalan)", "Catalan", t.getLanguage("cat")); + + //this case uses the result from the container nested class inside LanguageUtils. It will be tested in LanguageUtilsTest + when(container.findLanguageName(anyString())).thenReturn(container); + when(container.getLanguageName()).thenReturn("English"); + assertEquals("code length equals 2 (dummy)", "English", t.getLanguage("en")); + } +}