mirror of
https://github.com/signalapp/Signal-Android.git
synced 2026-02-24 11:45:28 +00:00
committed by
Greyson Parrelli
parent
cf24b22de9
commit
040d05a0a6
@@ -1,87 +0,0 @@
|
||||
package org.thoughtcrime.securesms;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.SharedPreferences;
|
||||
import android.os.Handler;
|
||||
import android.os.Looper;
|
||||
import android.preference.PreferenceManager;
|
||||
import android.text.TextUtils;
|
||||
|
||||
import org.junit.Before;
|
||||
import org.junit.Rule;
|
||||
import org.mockito.Mock;
|
||||
import org.mockito.MockedConstruction;
|
||||
import org.mockito.MockedStatic;
|
||||
import org.mockito.junit.MockitoJUnit;
|
||||
import org.mockito.junit.MockitoRule;
|
||||
import org.mockito.stubbing.Answer;
|
||||
import org.signal.core.util.logging.Log;
|
||||
|
||||
import static org.mockito.ArgumentMatchers.any;
|
||||
import static org.mockito.ArgumentMatchers.anyBoolean;
|
||||
import static org.mockito.ArgumentMatchers.anyFloat;
|
||||
import static org.mockito.ArgumentMatchers.anyInt;
|
||||
import static org.mockito.ArgumentMatchers.anyLong;
|
||||
import static org.mockito.ArgumentMatchers.anyString;
|
||||
import static org.mockito.Mockito.mock;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
public abstract class BaseUnitTest {
|
||||
|
||||
@Rule
|
||||
public MockitoRule rule = MockitoJUnit.rule();
|
||||
|
||||
@Mock
|
||||
private MockedStatic<Looper> looperMockedStatic;
|
||||
|
||||
@Mock
|
||||
private MockedStatic<Log> logMockedStatic;
|
||||
|
||||
@Mock
|
||||
private MockedStatic<Handler> handlerMockedStatic;
|
||||
|
||||
@Mock
|
||||
private MockedStatic<TextUtils> textUtilsMockedStatic;
|
||||
|
||||
@Mock
|
||||
private MockedStatic<PreferenceManager> preferenceManagerMockedStatic;
|
||||
|
||||
@Mock
|
||||
private MockedConstruction<Handler> handlerMockedConstruction;
|
||||
|
||||
protected Context context = mock(Context.class);
|
||||
protected SharedPreferences sharedPreferences = mock(SharedPreferences.class);
|
||||
|
||||
@Before
|
||||
public void setUp() throws Exception {
|
||||
when(PreferenceManager.getDefaultSharedPreferences(any(Context.class))).thenReturn(sharedPreferences);
|
||||
when(Looper.getMainLooper()).thenReturn(null);
|
||||
|
||||
Answer<?> logAnswer = (Answer<Void>) invocation -> {
|
||||
final String tag = (String)invocation.getArguments()[0];
|
||||
final String msg = (String)invocation.getArguments()[1];
|
||||
System.out.println(invocation.getMethod().getName().toUpperCase() + "/[" + tag + "] " + msg);
|
||||
return null;
|
||||
};
|
||||
|
||||
logMockedStatic.when(() -> Log.d(anyString(), anyString())).thenAnswer(logAnswer);
|
||||
logMockedStatic.when(() -> Log.i(anyString(), anyString())).thenAnswer(logAnswer);
|
||||
logMockedStatic.when(() -> Log.w(anyString(), anyString())).thenAnswer(logAnswer);
|
||||
logMockedStatic.when(() -> Log.e(anyString(), anyString())).thenAnswer(logAnswer);
|
||||
|
||||
Answer<Boolean> isEmptyAnswer = invocation -> {
|
||||
final String s = (String)invocation.getArguments()[0];
|
||||
return s == null || s.length() == 0;
|
||||
};
|
||||
|
||||
textUtilsMockedStatic.when(() -> TextUtils.isEmpty(anyString())).thenAnswer(isEmptyAnswer);
|
||||
|
||||
when(sharedPreferences.getString(anyString(), anyString())).thenReturn("");
|
||||
when(sharedPreferences.getLong(anyString(), anyLong())).thenReturn(0L);
|
||||
when(sharedPreferences.getInt(anyString(), anyInt())).thenReturn(0);
|
||||
when(sharedPreferences.getBoolean(anyString(), anyBoolean())).thenReturn(false);
|
||||
when(sharedPreferences.getFloat(anyString(), anyFloat())).thenReturn(0f);
|
||||
when(context.getSharedPreferences(anyString(), anyInt())).thenReturn(sharedPreferences);
|
||||
when(context.getPackageName()).thenReturn("org.thoughtcrime.securesms");
|
||||
}
|
||||
}
|
||||
@@ -5,9 +5,9 @@
|
||||
|
||||
package org.thoughtcrime.securesms.service
|
||||
|
||||
import org.junit.Assert
|
||||
import org.junit.Assert.assertEquals
|
||||
import org.junit.Assert.assertTrue
|
||||
import org.junit.Test
|
||||
import org.thoughtcrime.securesms.BaseUnitTest
|
||||
import org.thoughtcrime.securesms.testutil.MockRandom
|
||||
import java.time.Duration
|
||||
import java.time.LocalDateTime
|
||||
@@ -15,14 +15,14 @@ import java.util.concurrent.TimeUnit
|
||||
import kotlin.time.Duration.Companion.days
|
||||
import kotlin.time.Duration.Companion.minutes
|
||||
|
||||
class BackListenerTest : BaseUnitTest() {
|
||||
class BackListenerTest {
|
||||
|
||||
@Test
|
||||
fun testBackupJitterExactlyWithinJitterWindow() {
|
||||
val jitterWindowSeconds = Math.toIntExact(TimeUnit.MINUTES.toSeconds(10))
|
||||
val now = LocalDateTime.of(2024, 6, 7, 2, 55)
|
||||
val next = MessageBackupListener.getNextDailyBackupTimeFromNowWithJitter(now, 3, 0, jitterWindowSeconds)
|
||||
Assert.assertEquals(8, next.dayOfMonth)
|
||||
assertEquals(8, next.dayOfMonth)
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -30,7 +30,7 @@ class BackListenerTest : BaseUnitTest() {
|
||||
val jitterWindowSeconds = Math.toIntExact(TimeUnit.MINUTES.toSeconds(10))
|
||||
val now = LocalDateTime.of(2024, 6, 7, 2, 58)
|
||||
val next = MessageBackupListener.getNextDailyBackupTimeFromNowWithJitter(now, 3, 0, jitterWindowSeconds)
|
||||
Assert.assertEquals(8, next.dayOfMonth)
|
||||
assertEquals(8, next.dayOfMonth)
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -38,7 +38,7 @@ class BackListenerTest : BaseUnitTest() {
|
||||
val jitterWindowSeconds = Math.toIntExact(TimeUnit.MINUTES.toSeconds(10))
|
||||
val now = LocalDateTime.of(2024, 6, 7, 2, 54, 59)
|
||||
val next = MessageBackupListener.getNextDailyBackupTimeFromNowWithJitter(now, 3, 0, jitterWindowSeconds)
|
||||
Assert.assertEquals(7, next.dayOfMonth)
|
||||
assertEquals(7, next.dayOfMonth)
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -46,7 +46,7 @@ class BackListenerTest : BaseUnitTest() {
|
||||
val jitterWindowSeconds = Math.toIntExact(TimeUnit.MINUTES.toSeconds(10))
|
||||
val now = LocalDateTime.of(2024, 6, 7, 3, 15, 0)
|
||||
val next = MessageBackupListener.getNextDailyBackupTimeFromNowWithJitter(now, 3, 0, jitterWindowSeconds)
|
||||
Assert.assertEquals(8, next.dayOfMonth)
|
||||
assertEquals(8, next.dayOfMonth)
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -56,6 +56,6 @@ class BackListenerTest : BaseUnitTest() {
|
||||
val now: LocalDateTime = LocalDateTime.of(2024, 6, 27, 23, 57, 0)
|
||||
val next: LocalDateTime = MessageBackupListener.getNextDailyBackupTimeFromNowWithJitter(now, 0, 0, jitterWindowSeconds, mockRandom)
|
||||
|
||||
Assert.assertTrue(Duration.between(now, next).toSeconds() > (1.days.inWholeSeconds - jitterWindowSeconds))
|
||||
assertTrue(Duration.between(now, next).toSeconds() > (1.days.inWholeSeconds - jitterWindowSeconds))
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,9 +5,9 @@
|
||||
|
||||
package org.thoughtcrime.securesms.service;
|
||||
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.thoughtcrime.securesms.BaseUnitTest;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.junit.runners.Parameterized;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.Collection;
|
||||
@@ -15,15 +15,22 @@ import java.util.Optional;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
import static org.mockito.ArgumentMatchers.anyBoolean;
|
||||
import static org.mockito.ArgumentMatchers.contains;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
/**
|
||||
* Tests {@link VerificationCodeParser}
|
||||
*/
|
||||
public class VerificationCodeParserTest extends BaseUnitTest {
|
||||
@RunWith(Parameterized.class)
|
||||
public class VerificationCodeParserTest {
|
||||
|
||||
private final String input;
|
||||
private final String expectedOutput;
|
||||
|
||||
public VerificationCodeParserTest(String input, String expectedOutput) {
|
||||
this.input = input;
|
||||
this.expectedOutput = expectedOutput;
|
||||
}
|
||||
|
||||
@Parameterized.Parameters(name = "{index}: test with input={0} and expectedOutput={1}")
|
||||
public static Collection<String[]> challenges() {
|
||||
return Arrays.asList(new String[][]{
|
||||
{"Your TextSecure verification code: 337-337", "337337"},
|
||||
@@ -95,19 +102,10 @@ public class VerificationCodeParserTest extends BaseUnitTest {
|
||||
});
|
||||
}
|
||||
|
||||
@Before
|
||||
@Override
|
||||
public void setUp() throws Exception {
|
||||
super.setUp();
|
||||
when(sharedPreferences.getBoolean(contains("pref_verifying"), anyBoolean())).thenReturn(true);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testChallenges() {
|
||||
for (String[] challenge : challenges()) {
|
||||
Optional<String> result = VerificationCodeParser.parse(challenge[0]);
|
||||
assertTrue(result.isPresent());
|
||||
assertEquals(challenge[1], result.get());
|
||||
}
|
||||
Optional<String> result = VerificationCodeParser.parse(input);
|
||||
assertTrue(result.isPresent());
|
||||
assertEquals(expectedOutput, result.get());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,14 +1,13 @@
|
||||
package org.thoughtcrime.securesms.util;
|
||||
|
||||
import org.junit.Test;
|
||||
import org.thoughtcrime.securesms.BaseUnitTest;
|
||||
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
|
||||
public class ListPartitionTest extends BaseUnitTest {
|
||||
public class ListPartitionTest {
|
||||
|
||||
@Test public void testPartitionEven() {
|
||||
List<Integer> list = new LinkedList<>();
|
||||
@@ -19,16 +18,16 @@ public class ListPartitionTest extends BaseUnitTest {
|
||||
|
||||
List<List<Integer>> partitions = Util.partition(list, 10);
|
||||
|
||||
assertEquals(partitions.size(), 10);
|
||||
assertEquals(10, partitions.size());
|
||||
|
||||
int counter = 0;
|
||||
|
||||
for (int i=0;i<partitions.size();i++) {
|
||||
List<Integer> partition = partitions.get(i);
|
||||
assertEquals(partition.size(), 10);
|
||||
assertEquals(10, partition.size());
|
||||
|
||||
for (int j=0;j<partition.size();j++) {
|
||||
assertEquals((int)partition.get(j), counter++);
|
||||
assertEquals(counter++, (int)partition.get(j));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -44,21 +43,21 @@ public class ListPartitionTest extends BaseUnitTest {
|
||||
|
||||
List<List<Integer>> partitions = Util.partition(list, 10);
|
||||
|
||||
assertEquals(partitions.size(), 11);
|
||||
assertEquals(11, partitions.size());
|
||||
|
||||
int counter = 0;
|
||||
|
||||
for (int i=0;i<partitions.size()-1;i++) {
|
||||
List<Integer> partition = partitions.get(i);
|
||||
assertEquals(partition.size(), 10);
|
||||
assertEquals(10, partition.size());
|
||||
|
||||
for (int j=0;j<partition.size();j++) {
|
||||
assertEquals((int)partition.get(j), counter++);
|
||||
assertEquals(counter++, (int)partition.get(j));
|
||||
}
|
||||
}
|
||||
|
||||
assertEquals(partitions.get(10).size(), 1);
|
||||
assertEquals((int)partitions.get(10).get(0), 100);
|
||||
assertEquals(1, partitions.get(10).size());
|
||||
assertEquals(100, (int)partitions.get(10).get(0));
|
||||
}
|
||||
|
||||
@Test public void testPathological() {
|
||||
@@ -70,16 +69,16 @@ public class ListPartitionTest extends BaseUnitTest {
|
||||
|
||||
List<List<Integer>> partitions = Util.partition(list, 1);
|
||||
|
||||
assertEquals(partitions.size(), 100);
|
||||
assertEquals(100, partitions.size());
|
||||
|
||||
int counter = 0;
|
||||
|
||||
for (int i=0;i<partitions.size();i++) {
|
||||
List<Integer> partition = partitions.get(i);
|
||||
assertEquals(partition.size(), 1);
|
||||
assertEquals(1, partition.size());
|
||||
|
||||
for (int j=0;j<partition.size();j++) {
|
||||
assertEquals((int)partition.get(j), counter++);
|
||||
assertEquals(counter++, (int)partition.get(j));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,22 +1,20 @@
|
||||
package org.thoughtcrime.securesms.util;
|
||||
|
||||
import org.junit.Test;
|
||||
import org.thoughtcrime.securesms.BaseUnitTest;
|
||||
import org.thoughtcrime.securesms.util.RemoteConfig.ConfigChange;
|
||||
import org.thoughtcrime.securesms.util.RemoteConfig.UpdateResult;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
import static org.junit.Assert.assertTrue;
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertFalse;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
import static org.thoughtcrime.securesms.testutil.TestHelpers.mapOf;
|
||||
import static org.thoughtcrime.securesms.testutil.TestHelpers.setOf;
|
||||
|
||||
public class RemoteConfigTest extends BaseUnitTest {
|
||||
public class RemoteConfigTest {
|
||||
|
||||
private static final String A = "A";
|
||||
private static final String B = "B";
|
||||
@@ -376,6 +374,7 @@ public class RemoteConfigTest extends BaseUnitTest {
|
||||
assertTrue(result.getMemoryChanges().isEmpty());
|
||||
}
|
||||
|
||||
/** @noinspection StringOperationCanBeSimplified*/
|
||||
@Test
|
||||
public void computeChanges_generic() {
|
||||
Map<String, Object> oldMap = new HashMap<>() {{
|
||||
@@ -412,8 +411,4 @@ public class RemoteConfigTest extends BaseUnitTest {
|
||||
assertFalse(changes.containsKey("i"));
|
||||
assertEquals(new ConfigChange("gwen", "stacy"), changes.get("j"));
|
||||
}
|
||||
|
||||
private static <V> Set<V> setOf(V... values) {
|
||||
return new HashSet<>(Arrays.asList(values));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -18,14 +18,13 @@
|
||||
package org.thoughtcrime.securesms.util;
|
||||
|
||||
import org.junit.Test;
|
||||
import org.thoughtcrime.securesms.BaseUnitTest;
|
||||
|
||||
import java.net.URISyntaxException;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertThrows;
|
||||
|
||||
public class Rfc5724UriTest extends BaseUnitTest {
|
||||
public class Rfc5724UriTest {
|
||||
|
||||
@Test public void testInvalidPath() {
|
||||
final String[] invalidSchemaUris = {
|
||||
|
||||
Reference in New Issue
Block a user