re-introduce unit tests

Closes #4057
// FREEBIE
This commit is contained in:
Jake McGinty 2015-09-03 16:31:26 -07:00 committed by Moxie Marlinspike
parent 2d65464c04
commit fbc527145c
5 changed files with 80 additions and 66 deletions

View File

@ -81,9 +81,16 @@ dependencies {
compile 'org.whispersystems:textsecure-android:1.6.2'
compile 'com.h6ah4i.android.compat:mulsellistprefcompat:1.0.0'
testCompile 'junit:junit:4.12'
testCompile 'org.assertj:assertj-core:1.7.1'
testCompile 'org.mockito:mockito-core:1.9.5'
testCompile 'org.powermock:powermock-api-mockito:1.6.1'
testCompile 'org.powermock:powermock-module-junit4:1.6.1'
testCompile 'org.powermock:powermock-module-junit4-rule:1.6.1'
testCompile 'org.powermock:powermock-classloading-xstream:1.6.1'
androidTestCompile 'com.google.dexmaker:dexmaker:1.2'
androidTestCompile 'com.google.dexmaker:dexmaker-mockito:1.2'
androidTestCompile ('org.assertj:assertj-core:1.7.1') {
exclude group: 'org.hamcrest', module: 'hamcrest-core'
}
@ -91,13 +98,6 @@ dependencies {
exclude group: 'org.hamcrest', module: 'hamcrest-core'
exclude group: 'com.android.support', module: 'support-annotations'
}
androidTestCompile ('com.android.support.test:runner:0.2') {
exclude group: 'com.android.support', module: 'support-annotations'
}
androidTestCompile ('com.android.support.test.espresso:espresso-core:2.1') {
exclude group: 'com.android.support', module: 'support-annotations'
exclude group: 'javax.inject'
}
}
dependencyVerification {
@ -162,7 +162,6 @@ android {
minSdkVersion 9
targetSdkVersion 22
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
buildConfigField "long", "BUILD_TIMESTAMP", System.currentTimeMillis() + "L"
buildConfigField "String", "PUSH_URL", "\"https://textsecure-service.whispersystems.org\""
buildConfigField "boolean", "DEV_BUILD", "false"
@ -227,6 +226,9 @@ android {
androidTest {
java.srcDirs = ['test/androidTest/java']
}
test {
java.srcDirs = ['test/unitTest/java']
}
}
lintOptions {
@ -265,27 +267,3 @@ if (propFile.canRead()){
android.buildTypes.release.signingConfig = null
}
if (project.hasProperty('espresso') && System.console() != null) {
println "______________________WARNING_______________________"
println "ALL YOUR CONTACTS WILL BE DELETED IN THE PROCESS"
println "OF RUNNING THESE TESTS, TYPE 'delete all my contacts'"
println "TO CONTINUE"
println "----------------------------------------------------"
def input = System.console().readLine(':')
if (input == 'delete all my contacts') {
android.productFlavors {
base {}
espresso {
testInstrumentationRunner "org.thoughtcrime.securesms.TextSecureWakingTestRunner"
}
}
android.sourceSets.espresso {
manifest.srcFile 'test/espresso/AndroidManifest.xml'
}
android.sourceSets.androidTestEspresso {
java.srcDirs = ['test/androidTestEspresso/java']
res.srcDirs = ['test/androidTestEspresso/res']
}
}
}

View File

@ -0,0 +1,44 @@
package org.thoughtcrime.securesms;
import android.os.Handler;
import android.os.Looper;
import android.util.Log;
import org.junit.Before;
import org.junit.runner.RunWith;
import org.mockito.invocation.InvocationOnMock;
import org.mockito.stubbing.Answer;
import org.powermock.api.mockito.PowerMockito;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;
import static org.mockito.Matchers.anyString;
import static org.powermock.api.mockito.PowerMockito.mockStatic;
@RunWith(PowerMockRunner.class)
@PrepareForTest( { Log.class, Handler.class, Looper.class })
public abstract class BaseUnitTest {
@Before
public void setUp() throws Exception {
mockStatic(Looper.class);
mockStatic(Log.class);
mockStatic(Handler.class);
PowerMockito.when(Looper.getMainLooper()).thenReturn(null);
PowerMockito.whenNew(Handler.class).withAnyArguments().thenReturn(null);
Answer<?> logAnswer = new Answer<Void>() {
@Override public Void answer(InvocationOnMock invocation) throws Throwable {
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;
}
};
PowerMockito.doAnswer(logAnswer).when(Log.class, "d", anyString(), anyString());
PowerMockito.doAnswer(logAnswer).when(Log.class, "i", anyString(), anyString());
PowerMockito.doAnswer(logAnswer).when(Log.class, "w", anyString(), anyString());
PowerMockito.doAnswer(logAnswer).when(Log.class, "e", anyString(), anyString());
PowerMockito.doAnswer(logAnswer).when(Log.class, "wtf", anyString(), anyString());
}
}

View File

@ -1,15 +1,16 @@
package org.thoughtcrime.securesms.util;
import org.thoughtcrime.securesms.TextSecureTestCase;
import org.junit.Test;
import org.thoughtcrime.securesms.BaseUnitTest;
import java.util.LinkedList;
import java.util.List;
import static junit.framework.Assert.assertEquals;
import static org.junit.Assert.assertEquals;
public class ListPartitionTest extends TextSecureTestCase {
public class ListPartitionTest extends BaseUnitTest {
public void testPartitionEven() {
@Test public void testPartitionEven() {
List<Integer> list = new LinkedList<>();
for (int i=0;i<100;i++) {
@ -32,7 +33,7 @@ public class ListPartitionTest extends TextSecureTestCase {
}
}
public void testPartitionOdd() {
@Test public void testPartitionOdd() {
List<Integer> list = new LinkedList<>();
for (int i=0;i<100;i++) {
@ -60,7 +61,7 @@ public class ListPartitionTest extends TextSecureTestCase {
assertEquals((int)partitions.get(10).get(0), 100);
}
public void testPathological() {
@Test public void testPathological() {
List<Integer> list = new LinkedList<>();
for (int i=0;i<100;i++) {

View File

@ -1,25 +1,23 @@
package org.thoughtcrime.securesms.util;
import android.test.AndroidTestCase;
import junit.framework.AssertionFailedError;
import org.thoughtcrime.securesms.TextSecureTestCase;
import org.junit.Test;
import org.whispersystems.textsecure.api.util.InvalidNumberException;
import org.whispersystems.textsecure.api.util.PhoneNumberFormatter;
import static org.assertj.core.api.Assertions.assertThat;
public class PhoneNumberFormatterTest extends TextSecureTestCase {
public class PhoneNumberFormatterTest {
private static final String LOCAL_NUMBER = "+15555555555";
public void testFormatNumberE164() throws Exception, InvalidNumberException {
@Test public void testFormatNumberE164() throws Exception, InvalidNumberException {
assertThat(PhoneNumberFormatter.formatNumber("(555) 555-5555", LOCAL_NUMBER)).isEqualTo(LOCAL_NUMBER);
assertThat(PhoneNumberFormatter.formatNumber("555-5555", LOCAL_NUMBER)).isEqualTo(LOCAL_NUMBER);
assertThat(PhoneNumberFormatter.formatNumber("(123) 555-5555", LOCAL_NUMBER)).isNotEqualTo(LOCAL_NUMBER);
}
public void testFormatNumberEmail() throws Exception {
@Test public void testFormatNumberEmail() throws Exception {
try {
PhoneNumberFormatter.formatNumber("person@domain.com", LOCAL_NUMBER);
throw new AssertionFailedError("should have thrown on email");
@ -27,9 +25,4 @@ public class PhoneNumberFormatterTest extends TextSecureTestCase {
// success
}
}
@Override
public void setUp() throws Exception {
super.setUp();
}
}

View File

@ -17,17 +17,18 @@
package org.thoughtcrime.securesms.util;
import android.util.Log;
import junit.framework.AssertionFailedError;
import org.thoughtcrime.securesms.TextSecureTestCase;
import org.junit.Test;
import org.thoughtcrime.securesms.BaseUnitTest;
import java.net.URISyntaxException;
public class Rfc5724UriTest extends TextSecureTestCase {
import static org.junit.Assert.assertTrue;
private static final String TAG = Rfc5724UriTest.class.getSimpleName();
public class Rfc5724UriTest extends BaseUnitTest {
public void testInvalidPath() throws Exception {
@Test public void testInvalidPath() throws Exception {
final String[] invalidSchemaUris = {
"",
":",
@ -40,13 +41,14 @@ public class Rfc5724UriTest extends TextSecureTestCase {
for (String uri : invalidSchemaUris) {
try {
new Rfc5724Uri(uri);
Log.e(TAG, "uri " + uri + " should have failed path check");
assertTrue(false);
} catch (URISyntaxException e) { }
throw new AssertionFailedError("URISyntaxException should be thrown");
} catch (URISyntaxException e) {
// success
}
}
}
public void testGetSchema() throws Exception {
@Test public void testGetSchema() throws Exception {
final String[][] uriTestPairs = {
{"sms:+15555555555", "sms"},
{"sMs:+15555555555", "sMs"},
@ -57,15 +59,14 @@ public class Rfc5724UriTest extends TextSecureTestCase {
for (String[] uriTestPair : uriTestPairs) {
final Rfc5724Uri testUri = new Rfc5724Uri(uriTestPair[0]);
Log.d(TAG, testUri.getSchema() + " ?= " + uriTestPair[1]);
assertTrue(testUri.getSchema().equals(uriTestPair[1]));
}
}
public void testGetPath() throws Exception {
@Test public void testGetPath() throws Exception {
final String[][] uriTestPairs = {
{"sms:+15555555555", "+15555555555"},
{"sms:%2B49555555555", "%2B555555555"},
{"sms:%2B555555555", "%2B555555555"},
{"smsto:+15555555555?", "+15555555555"},
{"mms:+15555555555?a=b", "+15555555555"},
{"mmsto:+15555555555?a=b&c=d", "+15555555555"},
@ -77,12 +78,11 @@ public class Rfc5724UriTest extends TextSecureTestCase {
for (String[] uriTestPair : uriTestPairs) {
final Rfc5724Uri testUri = new Rfc5724Uri(uriTestPair[0]);
Log.d(TAG, testUri.getPath() + " ?= " + uriTestPair[1]);
assertTrue(testUri.getPath().equals(uriTestPair[1]));
}
}
public void testGetQueryParams() throws Exception {
@Test public void testGetQueryParams() throws Exception {
final String[][] uriTestPairs = {
{"sms:+15555555555", "a", null},
{"mms:+15555555555?b=", "a", null},
@ -98,10 +98,8 @@ public class Rfc5724UriTest extends TextSecureTestCase {
final Rfc5724Uri testUri = new Rfc5724Uri(uriTestPair[0]);
final String paramResult = testUri.getQueryParams().get(uriTestPair[1]);
Log.d(TAG, paramResult + " ?= " + uriTestPair[2]);
if (paramResult == null) assertTrue(uriTestPair[2] == null);
else assertTrue(paramResult.equals(uriTestPair[2]));
}
}
}