mirror of
https://github.com/kiwix/kiwix-android.git
synced 2025-09-08 23:07:26 -04:00
#1193 fix or migrate unit tests
This commit is contained in:
parent
004c274c02
commit
9070e6a16b
@ -20,9 +20,9 @@ package org.kiwix.kiwixmobile.downloader
|
||||
|
||||
import io.mockk.every
|
||||
import io.mockk.mockkStatic
|
||||
import org.assertj.core.api.Java6Assertions.assertThat
|
||||
import org.junit.Assert.assertEquals
|
||||
import org.junit.Before
|
||||
import org.junit.Test
|
||||
import org.junit.jupiter.api.Test
|
||||
import org.kiwix.kiwixmobile.utils.StorageUtils
|
||||
|
||||
class ChunkUtilsTest {
|
||||
@ -30,8 +30,7 @@ class ChunkUtilsTest {
|
||||
private val URL =
|
||||
"http://mirror.netcologne.de/kiwix/zim/wikipedia/wikipedia_af_all_nopic_2016-05.zim"
|
||||
|
||||
@Before
|
||||
fun executeBefore() {
|
||||
init {
|
||||
mockkStatic("org.kiwix.kiwixmobile.utils.StorageUtils")
|
||||
every { StorageUtils.getFileNameFromUrl(URL) }.returns("TestFileName")
|
||||
every { StorageUtils.getFileNameFromUrl("TestURL") }.returns("TestFileName.xml")
|
||||
@ -59,7 +58,7 @@ class ChunkUtilsTest {
|
||||
)
|
||||
assertEquals(
|
||||
"verify that the file name is correctly assigned in case of a single file",
|
||||
"TestFileName.part", listReturned[0].fileName
|
||||
"TestFileName.part.part", listReturned[0].fileName
|
||||
)
|
||||
assertEquals(
|
||||
"verify that the same URL is passed on to the chunk", URL,
|
||||
@ -103,19 +102,14 @@ class ChunkUtilsTest {
|
||||
)
|
||||
|
||||
// test assignment of file names
|
||||
var test = true
|
||||
val ALPHABET = "abcdefghijklmnopqrstuvwxyz"
|
||||
for (i in listReturned.indices) {
|
||||
if (listReturned[i]
|
||||
.fileName
|
||||
.substring(
|
||||
listReturned[i].fileName.length - 11
|
||||
) != ".zim" + ALPHABET[i / 26] + ALPHABET[i % 26] + ".part"
|
||||
) {
|
||||
test = false
|
||||
}
|
||||
val extension = listReturned[i]
|
||||
.fileName
|
||||
.substringAfter('.')
|
||||
val expectedExtension = "zim" + ALPHABET[i / 26] + ALPHABET[i % 26] + ".part.part"
|
||||
assertThat(extension).isEqualTo(expectedExtension)
|
||||
}
|
||||
assertEquals("verify that the file name endings are correctly assigned", true, test)
|
||||
|
||||
// When the file size is less than CHUNK_SIZE
|
||||
size = ChunkUtils.CHUNK_SIZE - (1024 * 1024).toLong()
|
||||
@ -134,7 +128,7 @@ class ChunkUtilsTest {
|
||||
)
|
||||
assertEquals(
|
||||
"verify that the file name is correctly assigned in case of a single file",
|
||||
"TestFileName.part", listReturned[0].fileName
|
||||
"TestFileName.part.part", listReturned[0].fileName
|
||||
)
|
||||
assertEquals(
|
||||
"verify that the same URL is passed on to the chunk", URL,
|
||||
@ -146,18 +140,18 @@ class ChunkUtilsTest {
|
||||
listReturned = ChunkUtils.getChunks("TestURL", size, 0)
|
||||
assertEquals(
|
||||
"verify that previous extension in the filename (if any) is removed in case of files having 1 chunk",
|
||||
"TestFileName.xml.part", listReturned[0].fileName
|
||||
"TestFileName.xml.part.part", listReturned[0].fileName
|
||||
)
|
||||
|
||||
size = ChunkUtils.CHUNK_SIZE * 2.toLong()
|
||||
listReturned = ChunkUtils.getChunks("TestURL", size, 0)
|
||||
assertEquals(
|
||||
"verify that previous extension in the filename (if any) is removed in case of files having more than 1 chunk",
|
||||
"TestFileName.zimaa.part", listReturned[0].fileName
|
||||
"TestFileName.zimaa.part.part", listReturned[0].fileName
|
||||
)
|
||||
assertEquals(
|
||||
"verify that previous extension in the filename (if any) is removed in case of files having more than 1 chunk",
|
||||
"TestFileName.zimab.part", listReturned[1].fileName
|
||||
"TestFileName.zimab.part.part", listReturned[1].fileName
|
||||
)
|
||||
}
|
||||
}
|
||||
|
@ -22,7 +22,7 @@ import org.hamcrest.Description;
|
||||
import org.hamcrest.Matcher;
|
||||
import org.hamcrest.TypeSafeMatcher;
|
||||
import org.junit.Assert;
|
||||
import org.junit.Test;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.simpleframework.xml.Serializer;
|
||||
import org.simpleframework.xml.core.Persister;
|
||||
|
||||
|
@ -16,42 +16,37 @@
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
package org.kiwix.kiwixmobile.utils;
|
||||
package org.kiwix.kiwixmobile.utils
|
||||
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.mockito.Mock;
|
||||
import org.mockito.junit.MockitoJUnitRunner;
|
||||
import io.mockk.every
|
||||
import io.mockk.mockk
|
||||
import org.junit.Assert.assertEquals
|
||||
import org.junit.jupiter.api.Test
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.mockito.ArgumentMatchers.anyString;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
@RunWith(MockitoJUnitRunner.class)
|
||||
public class BookUtilsTest {
|
||||
@Mock private LanguageUtils.LanguageContainer container;
|
||||
class BookUtilsTest {
|
||||
private val container: LanguageUtils.LanguageContainer = mockk()
|
||||
|
||||
//Test that the language returned for the given language code is correct
|
||||
@Test
|
||||
public void testLanguageFromCode() {
|
||||
BookUtils t = new BookUtils(container);
|
||||
fun testLanguageFromCode() {
|
||||
val t = 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"));
|
||||
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"));
|
||||
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"));
|
||||
every { container.findLanguageName(any()) } returns container
|
||||
every { container.languageName} returns "English"
|
||||
assertEquals("code length equals 2 (dummy)", "English", t.getLanguage("en"))
|
||||
}
|
||||
}
|
@ -1,207 +0,0 @@
|
||||
/*
|
||||
* Kiwix Android
|
||||
* Copyright (C) 2018 Kiwix <android.kiwix.org>
|
||||
*
|
||||
* 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 <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
package org.kiwix.kiwixmobile.utils;
|
||||
|
||||
import android.content.Context;
|
||||
import android.net.ConnectivityManager;
|
||||
import android.net.NetworkInfo;
|
||||
import android.os.Build;
|
||||
import android.util.Log;
|
||||
import java.lang.reflect.Field;
|
||||
import java.lang.reflect.Modifier;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.kiwix.kiwixmobile.R;
|
||||
import org.mockito.Mock;
|
||||
import org.mockito.junit.MockitoJUnitRunner;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertFalse;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
import static org.mockito.Mockito.never;
|
||||
import static org.mockito.Mockito.times;
|
||||
import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
@RunWith(MockitoJUnitRunner.class)
|
||||
public class NetworkUtilsTest {
|
||||
|
||||
@Mock private Context context;
|
||||
@Mock private ConnectivityManager connectivity;
|
||||
@Mock private NetworkInfo networkInfo;
|
||||
@Mock private NetworkInfo networkInfo1;
|
||||
@Mock private NetworkInfo networkInfo2;
|
||||
|
||||
@Test
|
||||
public void testNetworkAvailability() {
|
||||
NetworkInfo[] networkInfos = { networkInfo1, networkInfo2 };
|
||||
when(context.getSystemService(Context.CONNECTIVITY_SERVICE)).thenReturn(connectivity);
|
||||
when(connectivity.getAllNetworkInfo()).thenReturn(networkInfos);
|
||||
|
||||
//one network is connected
|
||||
when(networkInfo1.getState()).thenReturn(NetworkInfo.State.CONNECTED);
|
||||
when(networkInfo2.getState()).thenReturn(NetworkInfo.State.DISCONNECTING);
|
||||
assertEquals(true, NetworkUtils.isNetworkAvailable(context));
|
||||
|
||||
when(networkInfo1.getState()).thenReturn(NetworkInfo.State.DISCONNECTING);
|
||||
when(networkInfo2.getState()).thenReturn(NetworkInfo.State.CONNECTING);
|
||||
assertEquals(false, NetworkUtils.isNetworkAvailable(context));
|
||||
|
||||
//no network is available
|
||||
when(networkInfo1.getState()).thenReturn(NetworkInfo.State.DISCONNECTED);
|
||||
when(networkInfo2.getState()).thenReturn(NetworkInfo.State.DISCONNECTED);
|
||||
assertEquals(false, NetworkUtils.isNetworkAvailable(context));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void test_isNetworkConnectionOK() {
|
||||
when(networkInfo2.getState()).thenReturn(NetworkInfo.State.CONNECTING);
|
||||
assertFalse(NetworkUtils.isNetworkConnectionOK(networkInfo2));
|
||||
|
||||
when(networkInfo2.getState()).thenReturn(NetworkInfo.State.CONNECTED);
|
||||
assertTrue(NetworkUtils.isNetworkConnectionOK(networkInfo2));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testWifiAvailability() {
|
||||
when(context.getSystemService(Context.CONNECTIVITY_SERVICE)).thenReturn(connectivity);
|
||||
when(connectivity.getActiveNetworkInfo()).thenReturn(networkInfo);
|
||||
|
||||
//SDK >= 23
|
||||
try {
|
||||
SetSDKVersion(Build.VERSION.class.getField("SDK_INT"), 23);
|
||||
} catch (Exception e) {
|
||||
Log.d("NetworkUtilsTest", "Unable to set Build SDK Version");
|
||||
}
|
||||
|
||||
//on Mobile Data
|
||||
when(networkInfo.getType()).thenReturn(ConnectivityManager.TYPE_MOBILE);
|
||||
assertEquals(false, NetworkUtils.isWiFi(context));
|
||||
//verify that the correct methods are used according to the build SDK version
|
||||
verify(connectivity).getActiveNetworkInfo();
|
||||
verify(networkInfo).getType();
|
||||
verify(connectivity, never()).getNetworkInfo(ConnectivityManager.TYPE_WIFI);
|
||||
|
||||
//on WIFI connected
|
||||
when(networkInfo.getType()).thenReturn(ConnectivityManager.TYPE_WIFI);
|
||||
when(networkInfo.isConnected()).thenReturn(Boolean.TRUE);
|
||||
assertEquals(true, NetworkUtils.isWiFi(context));
|
||||
verify(connectivity, times(2)).getActiveNetworkInfo();
|
||||
verify(connectivity, never()).getNetworkInfo(ConnectivityManager.TYPE_WIFI);
|
||||
|
||||
//on WIFI disconnected
|
||||
when(networkInfo.getType()).thenReturn(ConnectivityManager.TYPE_WIFI);
|
||||
when(networkInfo.isConnected()).thenReturn(Boolean.FALSE);
|
||||
assertEquals(false, NetworkUtils.isWiFi(context));
|
||||
verify(connectivity, times(3)).getActiveNetworkInfo();
|
||||
verify(connectivity, never()).getNetworkInfo(ConnectivityManager.TYPE_WIFI);
|
||||
|
||||
//SDK < 23
|
||||
try {
|
||||
SetSDKVersion(Build.VERSION.class.getField("SDK_INT"), 22);
|
||||
} catch (Exception e) {
|
||||
Log.d("NetworkUtilsTest", "Unable to set Build SDK Version");
|
||||
}
|
||||
|
||||
//WIFI connected
|
||||
when(connectivity.getNetworkInfo(ConnectivityManager.TYPE_WIFI)).thenReturn(networkInfo);
|
||||
when(networkInfo.isConnected()).thenReturn(true);
|
||||
assertEquals(true, NetworkUtils.isWiFi(context));
|
||||
verify(connectivity, times(1)).getNetworkInfo(ConnectivityManager.TYPE_WIFI);
|
||||
|
||||
//WIFI disconnected
|
||||
when(connectivity.getNetworkInfo(ConnectivityManager.TYPE_WIFI)).thenReturn(networkInfo);
|
||||
when(networkInfo.isConnected()).thenReturn(false);
|
||||
assertEquals(false, NetworkUtils.isWiFi(context));
|
||||
verify(connectivity, times(2)).getNetworkInfo(ConnectivityManager.TYPE_WIFI);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testFilenameFromUrl() {
|
||||
// TODO: find a way to assert regex matching via JUnit and rewrite the test
|
||||
|
||||
String defaultUUIDRegex = "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$";
|
||||
Pattern pattern = Pattern.compile(defaultUUIDRegex);
|
||||
|
||||
// URL is an Empty String
|
||||
Matcher matcher = pattern.matcher(NetworkUtils.getFileNameFromUrl(""));
|
||||
if (!matcher.matches()) {
|
||||
assertEquals("filename doesn't match UUID regex (for empty string URL)", 0, 1);
|
||||
}
|
||||
|
||||
// URL contains no '?' character but has '/' characters
|
||||
assertEquals("File Name from URL (no '?' character)", "q=kiwix+android",
|
||||
NetworkUtils.getFileNameFromUrl("https://github.com/search/q=kiwix+android"));
|
||||
// and ends with a '/' character
|
||||
matcher = pattern.matcher(
|
||||
NetworkUtils.getFileNameFromUrl("https://github.com/search/q=kiwix+android/"));
|
||||
if (!matcher.matches()) {
|
||||
assertEquals("filename doesn't match UUID regex (for no '?' and '/' in end)", 0, 1);
|
||||
}
|
||||
|
||||
// Empty string between last '?' and preceding '/'
|
||||
matcher = pattern.matcher(
|
||||
NetworkUtils.getFileNameFromUrl("https://github.com/search/?q=kiwix+android"));
|
||||
if (!matcher.matches()) {
|
||||
assertEquals("filename doesn't match UUID regex (for consecutive '/?')", 0, 1);
|
||||
}
|
||||
|
||||
// Standard case
|
||||
// Here the Method should return the substring between the first '?' character and the nearest '/' character preceeding it
|
||||
assertEquals("File Name from URL standard case", "search", NetworkUtils.getFileNameFromUrl(
|
||||
"https://www.google.com/search?source=hp&ei=zs4LW6W1E5n6rQH65Z-wDQ&q=kiwix+android&oq=kiwix+android&gs_l=psy-ab.3...2590.6259.0.6504.14.12.0.0.0.0.263.485.2-2.2.0....0...1c.1.64.psy-ab..12.2.485.0..0j35i39k1.0.WSlGY7hWzTo"));
|
||||
assertEquals("File Name from URL standard case", "Special:Search",
|
||||
NetworkUtils.getFileNameFromUrl(
|
||||
"https://en.wikipedia.org/wiki/Special:Search?search=kiwix+android&go=Go&searchToken=3zrcxw8fltdcij99zvoh5c6wy"));
|
||||
assertEquals("File Name from URL standard case", "search",
|
||||
NetworkUtils.getFileNameFromUrl("https://github.com/search?q=kiwix+android"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testParsedURL() {
|
||||
when(context.getString(R.string.zim_nopic)).thenReturn("No Pictures");
|
||||
when(context.getString(R.string.zim_novid)).thenReturn("No Videos");
|
||||
when(context.getString(R.string.zim_simple)).thenReturn("Simple");
|
||||
|
||||
assertEquals("URL Parsing on empty string", "", NetworkUtils.parseURL(context, ""));
|
||||
|
||||
//Using the standard Kiwix Download URLs
|
||||
assertEquals("URL Parsing", "No Pictures", NetworkUtils.parseURL(context,
|
||||
"http://ftpmirror.your.org/pub/kiwix/zim/wikipedia/wikipedia_af_all_nopic_2016-05.zim"));
|
||||
assertEquals("URL Parsing", "No Videos", NetworkUtils.parseURL(context,
|
||||
"http://www.mirrorservice.org/sites/download.kiwix.org/zim/wikipedia/wikipedia_af_all_novid_2016-05.zim"));
|
||||
assertEquals("URL Parsing", "Simple", NetworkUtils.parseURL(context,
|
||||
"http://download.wikimedia.org/kiwix/zim/wikipedia/wikipedia_af_all_simple_2016-05.zim"));
|
||||
assertEquals("URL Parsing", "No Pictures", NetworkUtils.parseURL(context,
|
||||
"http://mirror.netcologne.de/kiwix/zim/wikipedia/wikipedia_af_all_nopic_2016-05.zim"));
|
||||
assertEquals("URL Parsing", "Simple", NetworkUtils.parseURL(context,
|
||||
"http://mirror3.kiwix.org/zim/wikipedia/wikipedia_af_all_simple_2016-05.zim"));
|
||||
}
|
||||
|
||||
//Sets the Build SDK version
|
||||
private static void SetSDKVersion(Field field, Object newValue) throws Exception {
|
||||
field.setAccessible(true);
|
||||
Field modifiersField = Field.class.getDeclaredField("modifiers");
|
||||
modifiersField.setAccessible(true);
|
||||
modifiersField.setInt(field, field.getModifiers() & ~Modifier.FINAL);
|
||||
field.set(null, newValue);
|
||||
}
|
||||
}
|
@ -0,0 +1,239 @@
|
||||
/*
|
||||
* Kiwix Android
|
||||
* Copyright (C) 2018 Kiwix <android.kiwix.org>
|
||||
*
|
||||
* 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 <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
package org.kiwix.kiwixmobile.utils
|
||||
|
||||
import android.content.Context
|
||||
import android.net.ConnectivityManager
|
||||
import android.net.NetworkInfo
|
||||
import android.os.Build
|
||||
import android.util.Log
|
||||
import io.mockk.every
|
||||
import io.mockk.mockk
|
||||
import io.mockk.verify
|
||||
import org.junit.Assert.assertEquals
|
||||
import org.junit.Assert.assertFalse
|
||||
import org.junit.Assert.assertTrue
|
||||
import org.junit.jupiter.api.Test
|
||||
import org.kiwix.kiwixmobile.R
|
||||
import java.lang.reflect.Field
|
||||
import java.lang.reflect.Modifier
|
||||
import java.util.regex.Pattern
|
||||
|
||||
class NetworkUtilsTest {
|
||||
|
||||
private val context: Context = mockk()
|
||||
private val connectivity: ConnectivityManager = mockk()
|
||||
private val networkInfo: NetworkInfo = mockk()
|
||||
private val networkInfo1: NetworkInfo = mockk()
|
||||
private val networkInfo2: NetworkInfo = mockk()
|
||||
|
||||
@Test
|
||||
fun testNetworkAvailability() {
|
||||
val networkInfos = arrayOf<NetworkInfo>(networkInfo1, networkInfo2)
|
||||
every { context.getSystemService(Context.CONNECTIVITY_SERVICE) } returns connectivity
|
||||
every { connectivity.allNetworkInfo } returns networkInfos
|
||||
|
||||
//one network is connected
|
||||
every { (networkInfo1.state) } returns NetworkInfo.State.CONNECTED
|
||||
every { (networkInfo2.state) } returns NetworkInfo.State.DISCONNECTING
|
||||
assertEquals(true, NetworkUtils.isNetworkAvailable(context))
|
||||
|
||||
every { (networkInfo1.state) } returns NetworkInfo.State.DISCONNECTING
|
||||
every { (networkInfo2.state) } returns NetworkInfo.State.CONNECTING
|
||||
assertEquals(false, NetworkUtils.isNetworkAvailable(context))
|
||||
|
||||
//no network is available
|
||||
every { (networkInfo1.state) } returns NetworkInfo.State.DISCONNECTED
|
||||
every { (networkInfo2.state) } returns NetworkInfo.State.DISCONNECTED
|
||||
assertEquals(false, NetworkUtils.isNetworkAvailable(context))
|
||||
}
|
||||
|
||||
@Test
|
||||
fun test_isNetworkConnectionOK() {
|
||||
every { (networkInfo2.state) } returns NetworkInfo.State.CONNECTING
|
||||
assertFalse(NetworkUtils.isNetworkConnectionOK(networkInfo2))
|
||||
|
||||
every { (networkInfo2.state) } returns NetworkInfo.State.CONNECTED
|
||||
assertTrue(NetworkUtils.isNetworkConnectionOK(networkInfo2))
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testWifiAvailability() {
|
||||
every { (context.getSystemService(Context.CONNECTIVITY_SERVICE)) } returns connectivity
|
||||
every { (connectivity.activeNetworkInfo) } returns networkInfo
|
||||
|
||||
//SDK >= 23
|
||||
try {
|
||||
SetSDKVersion(Build.VERSION::class.java.getField("SDK_INT"), 23)
|
||||
} catch (e: Exception) {
|
||||
Log.d("NetworkUtilsTest", "Unable to set Build SDK Version")
|
||||
}
|
||||
|
||||
//on Mobile Data
|
||||
every { (networkInfo.type) } returns ConnectivityManager.TYPE_MOBILE
|
||||
assertEquals(false, NetworkUtils.isWiFi(context))
|
||||
//verify that the correct methods are used according to the build SDK version
|
||||
verify {
|
||||
connectivity.activeNetworkInfo
|
||||
networkInfo.type
|
||||
}
|
||||
verify(exactly = 0) { connectivity.getNetworkInfo(ConnectivityManager.TYPE_WIFI) }
|
||||
|
||||
//on WIFI connected
|
||||
every { (networkInfo.type) } returns ConnectivityManager.TYPE_WIFI
|
||||
every { (networkInfo.isConnected) } returns java.lang.Boolean.TRUE
|
||||
assertEquals(true, NetworkUtils.isWiFi(context))
|
||||
verify(exactly = 2) { connectivity.activeNetworkInfo }
|
||||
verify(exactly = 0) { connectivity.getNetworkInfo(ConnectivityManager.TYPE_WIFI) }
|
||||
|
||||
//on WIFI disconnected
|
||||
every { (networkInfo.type) } returns ConnectivityManager.TYPE_WIFI
|
||||
every { (networkInfo.isConnected) } returns java.lang.Boolean.FALSE
|
||||
assertEquals(false, NetworkUtils.isWiFi(context))
|
||||
verify(exactly = 3) { connectivity.activeNetworkInfo }
|
||||
verify(exactly = 0) { connectivity.getNetworkInfo(ConnectivityManager.TYPE_WIFI) }
|
||||
|
||||
//SDK < 23
|
||||
try {
|
||||
SetSDKVersion(Build.VERSION::class.java.getField("SDK_INT"), 22)
|
||||
} catch (e: Exception) {
|
||||
Log.d("NetworkUtilsTest", "Unable to set Build SDK Version")
|
||||
}
|
||||
|
||||
//WIFI connected
|
||||
every { (connectivity.getNetworkInfo(ConnectivityManager.TYPE_WIFI)) } returns networkInfo
|
||||
every { (networkInfo.isConnected) } returns true
|
||||
assertEquals(true, NetworkUtils.isWiFi(context))
|
||||
verify { connectivity.getNetworkInfo(ConnectivityManager.TYPE_WIFI) }
|
||||
|
||||
//WIFI disconnected
|
||||
every { (connectivity.getNetworkInfo(ConnectivityManager.TYPE_WIFI)) } returns networkInfo
|
||||
every { (networkInfo.isConnected) } returns false
|
||||
assertEquals(false, NetworkUtils.isWiFi(context))
|
||||
verify(exactly = 2) { connectivity.getNetworkInfo(ConnectivityManager.TYPE_WIFI) }
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testFilenameFromUrl() {
|
||||
// TODO: find a way to assert regex matching via JUnit and rewrite the test
|
||||
|
||||
val defaultUUIDRegex = "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$"
|
||||
val pattern = Pattern.compile(defaultUUIDRegex)
|
||||
|
||||
// URL is an Empty String
|
||||
var matcher = pattern.matcher(NetworkUtils.getFileNameFromUrl(""))
|
||||
if (!matcher.matches()) {
|
||||
assertEquals("filename doesn't match UUID regex (for empty string URL)", 0, 1)
|
||||
}
|
||||
|
||||
// URL contains no '?' character but has '/' characters
|
||||
assertEquals(
|
||||
"File Name from URL (no '?' character)", "q=kiwix+android",
|
||||
NetworkUtils.getFileNameFromUrl("https://github.com/search/q=kiwix+android")
|
||||
)
|
||||
// and ends with a '/' character
|
||||
matcher = pattern.matcher(
|
||||
NetworkUtils.getFileNameFromUrl("https://github.com/search/q=kiwix+android/")
|
||||
)
|
||||
if (!matcher.matches()) {
|
||||
assertEquals("filename doesn't match UUID regex (for no '?' and '/' in end)", 0, 1)
|
||||
}
|
||||
|
||||
// Empty string between last '?' and preceding '/'
|
||||
matcher = pattern.matcher(
|
||||
NetworkUtils.getFileNameFromUrl("https://github.com/search/?q=kiwix+android")
|
||||
)
|
||||
if (!matcher.matches()) {
|
||||
assertEquals("filename doesn't match UUID regex (for consecutive '/?')", 0, 1)
|
||||
}
|
||||
|
||||
// Standard case
|
||||
// Here the Method should return the substring between the first '?' character and the nearest '/' character preceeding it
|
||||
assertEquals(
|
||||
"File Name from URL standard case", "search", NetworkUtils.getFileNameFromUrl(
|
||||
"https://www.google.com/search?source=hp&ei=zs4LW6W1E5n6rQH65Z-wDQ&q=kiwix+android&oq=kiwix+android&gs_l=psy-ab.3...2590.6259.0.6504.14.12.0.0.0.0.263.485.2-2.2.0....0...1c.1.64.psy-ab..12.2.485.0..0j35i39k1.0.WSlGY7hWzTo"
|
||||
)
|
||||
)
|
||||
assertEquals(
|
||||
"File Name from URL standard case", "Special:Search",
|
||||
NetworkUtils.getFileNameFromUrl(
|
||||
"https://en.wikipedia.org/wiki/Special:Search?search=kiwix+android&go=Go&searchToken=3zrcxw8fltdcij99zvoh5c6wy"
|
||||
)
|
||||
)
|
||||
assertEquals(
|
||||
"File Name from URL standard case", "search",
|
||||
NetworkUtils.getFileNameFromUrl("https://github.com/search?q=kiwix+android")
|
||||
)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testParsedURL() {
|
||||
every { (context.getString(R.string.zim_nopic)) } returns "No Pictures"
|
||||
every { (context.getString(R.string.zim_novid)) } returns "No Videos"
|
||||
every { (context.getString(R.string.zim_simple)) } returns "Simple"
|
||||
|
||||
assertEquals("URL Parsing on empty string", "", NetworkUtils.parseURL(context, ""))
|
||||
|
||||
//Using the standard Kiwix Download URLs
|
||||
assertEquals(
|
||||
"URL Parsing", "No Pictures", NetworkUtils.parseURL(
|
||||
context,
|
||||
"http://ftpmirror.your.org/pub/kiwix/zim/wikipedia/wikipedia_af_all_nopic_2016-05.zim"
|
||||
)
|
||||
)
|
||||
assertEquals(
|
||||
"URL Parsing", "No Videos", NetworkUtils.parseURL(
|
||||
context,
|
||||
"http://www.mirrorservice.org/sites/download.kiwix.org/zim/wikipedia/wikipedia_af_all_novid_2016-05.zim"
|
||||
)
|
||||
)
|
||||
assertEquals(
|
||||
"URL Parsing", "Simple", NetworkUtils.parseURL(
|
||||
context,
|
||||
"http://download.wikimedia.org/kiwix/zim/wikipedia/wikipedia_af_all_simple_2016-05.zim"
|
||||
)
|
||||
)
|
||||
assertEquals(
|
||||
"URL Parsing", "No Pictures", NetworkUtils.parseURL(
|
||||
context,
|
||||
"http://mirror.netcologne.de/kiwix/zim/wikipedia/wikipedia_af_all_nopic_2016-05.zim"
|
||||
)
|
||||
)
|
||||
assertEquals(
|
||||
"URL Parsing", "Simple", NetworkUtils.parseURL(
|
||||
context,
|
||||
"http://mirror3.kiwix.org/zim/wikipedia/wikipedia_af_all_simple_2016-05.zim"
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
//Sets the Build SDK version
|
||||
@Throws(Exception::class)
|
||||
private fun SetSDKVersion(
|
||||
field: Field,
|
||||
newValue: Any
|
||||
) {
|
||||
field.isAccessible = true
|
||||
val modifiersField = Field::class.java.getDeclaredField("modifiers")
|
||||
modifiersField.isAccessible = true
|
||||
modifiersField.setInt(field, field.modifiers and Modifier.FINAL.inv())
|
||||
field.set(null, newValue)
|
||||
}
|
||||
}
|
||||
|
@ -75,7 +75,7 @@ class FileUtilsTest {
|
||||
assertThat(files.size).isEqualTo(1)
|
||||
.withFailMessage("Only a single book is returned in case the file has extension $extension")
|
||||
if (fileExists) {
|
||||
assertThat(testBook.file.toString()).isEqualTo(files[0].path)
|
||||
assertThat(testBook.file).isEqualTo(files[0])
|
||||
.withFailMessage("The filename retained as such")
|
||||
} else {
|
||||
assertThat(testBook.file.toString() + ".part").isEqualTo(files[0].path)
|
||||
|
@ -18,7 +18,8 @@
|
||||
|
||||
package org.kiwix.kiwixmobile.zim_manager.library_view;
|
||||
|
||||
import org.junit.Test;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user