1
0
Fork 0
mirror of https://github.com/syncthing/syncthing-android.git synced 2024-12-03 17:51:17 +00:00

Added unit tests for BroadcastReceivers.

This commit is contained in:
Felix Ableitner 2014-08-22 14:38:11 +02:00
parent b1749ce7cb
commit 2e83305b93
7 changed files with 194 additions and 0 deletions

View file

@ -33,6 +33,10 @@ android {
defaultConfig { defaultConfig {
versionCode getVersionCodeFromManifest() versionCode getVersionCodeFromManifest()
testApplicationId 'com.nutomic.syncthingandroid.test'
testInstrumentationRunner 'android.test.InstrumentationTestRunner'
testHandleProfiling true
testFunctionalTest true
} }
sourceSets { sourceSets {

View file

@ -0,0 +1,53 @@
package com.nutomic.syncthingandroid.test;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.test.mock.MockContext;
import junit.framework.Test;
import java.util.ArrayList;
import java.util.List;
/**
* Context that saves all received intents, which can be retrieved later by test classes.
*/
public class TestContext extends MockContext {
private Context mContext;
private ArrayList<Intent> mReceivedIntents = new ArrayList<>();
/**
* Use the actual context for calls that aren't easily mocked. May be null if those
* calls aren't needed.
*/
public TestContext(Context context) {
mContext = context;
}
@Override
public String getPackageName() {
return null;
}
@Override
public Object getSystemService(String name) {
return mContext.getSystemService(name);
}
@Override
public ComponentName startService(Intent intent) {
mReceivedIntents.add(intent);
return null;
}
public List<Intent> getReceivedIntents() {
return mReceivedIntents;
}
public void clearReceivedIntents() {
mReceivedIntents.clear();
}
}

View file

@ -0,0 +1,49 @@
package com.nutomic.syncthingandroid.test.syncthing;
import android.content.Intent;
import android.test.AndroidTestCase;
import android.test.suitebuilder.annotation.MediumTest;
import com.nutomic.syncthingandroid.syncthing.BatteryReceiver;
import com.nutomic.syncthingandroid.syncthing.DeviceStateHolder;
import com.nutomic.syncthingandroid.syncthing.SyncthingService;
import com.nutomic.syncthingandroid.test.TestContext;
public class BatteryReceiverTest extends AndroidTestCase {
private BatteryReceiver mReceiver;
private TestContext mContext;
@Override
protected void setUp() throws Exception {
super.setUp();
mReceiver = new BatteryReceiver();
mContext = new TestContext(null);
}
@MediumTest
public void testOnReceiveCharging() {
Intent intent = new Intent(Intent.ACTION_POWER_CONNECTED);
mReceiver.onReceive(mContext, intent);
assertEquals(1, mContext.getReceivedIntents().size());
Intent receivedIntent = mContext.getReceivedIntents().get(0);
assertTrue(receivedIntent.getBooleanExtra(DeviceStateHolder.EXTRA_IS_CHARGING, false));
mContext.clearReceivedIntents();
}
@MediumTest
public void testOnReceiveNotCharging() {
Intent intent = new Intent(Intent.ACTION_POWER_DISCONNECTED);
mReceiver.onReceive(mContext, intent);
assertEquals(1, mContext.getReceivedIntents().size());
Intent receivedIntent = mContext.getReceivedIntents().get(0);
assertEquals(receivedIntent.getComponent().getClassName(), SyncthingService.class.getName());
assertFalse(receivedIntent.getBooleanExtra(DeviceStateHolder.EXTRA_IS_CHARGING, true));
mContext.clearReceivedIntents();
}
}

View file

@ -0,0 +1,36 @@
package com.nutomic.syncthingandroid.test.syncthing;
import android.content.Intent;
import android.test.AndroidTestCase;
import android.test.suitebuilder.annotation.MediumTest;
import com.nutomic.syncthingandroid.syncthing.BootReceiver;
import com.nutomic.syncthingandroid.syncthing.SyncthingService;
import com.nutomic.syncthingandroid.test.TestContext;
/**
* Tests that {@link com.nutomic.syncthingandroid.syncthing.BootReceiver} starts the right service
* ({@link com.nutomic.syncthingandroid.syncthing.SyncthingService}.
*/
public class BootReceiverTest extends AndroidTestCase {
private BootReceiver mReceiver;
private TestContext mContext;
@Override
protected void setUp() throws Exception {
super.setUp();
mReceiver = new BootReceiver();
mContext = new TestContext(null);
}
@MediumTest
public void testOnReceiveCharging() {
mReceiver.onReceive(mContext, null);
assertEquals(1, mContext.getReceivedIntents().size());
Intent receivedIntent = mContext.getReceivedIntents().get(0);
assertEquals(receivedIntent.getComponent().getClassName(), SyncthingService.class.getName());
mContext.clearReceivedIntents();
}
}

View file

@ -0,0 +1,43 @@
package com.nutomic.syncthingandroid.test.syncthing;
import android.content.Intent;
import android.test.AndroidTestCase;
import android.test.suitebuilder.annotation.MediumTest;
import com.nutomic.syncthingandroid.syncthing.NetworkReceiver;
import com.nutomic.syncthingandroid.syncthing.DeviceStateHolder;
import com.nutomic.syncthingandroid.syncthing.SyncthingService;
import com.nutomic.syncthingandroid.test.TestContext;
/**
* Tests for correct extras on the Intent sent by
* {@link com.nutomic.syncthingandroid.syncthing.NetworkReceiver}.
*
* Does not test for correct result value, as that would require mocking
* {@link android.net.ConnectivityManager} (or replacing it with an interface).
*/
public class NetworkReceiverTest extends AndroidTestCase {
private NetworkReceiver mReceiver;
private TestContext mContext;
@Override
protected void setUp() throws Exception {
super.setUp();
mReceiver = new NetworkReceiver();
mContext = new TestContext(getContext());
}
@MediumTest
public void testOnReceive() {
mReceiver.onReceive(mContext, null);
assertEquals(1, mContext.getReceivedIntents().size());
Intent receivedIntent = mContext.getReceivedIntents().get(0);
assertEquals(receivedIntent.getComponent().getClassName(), SyncthingService.class.getName());
assertNull(receivedIntent.getAction());
assertTrue(receivedIntent.hasExtra(DeviceStateHolder.EXTRA_HAS_WIFI));
mContext.clearReceivedIntents();
}
}

View file

@ -0,0 +1,7 @@
package com.nutomic.syncthingandroid.test.syncthing;
/**
* Created by felix on 22.08.14.
*/
public class SyncthingServiceBinderTest {
}

View file

@ -5,8 +5,10 @@ import android.content.Context;
import android.content.Intent; import android.content.Intent;
public class BootReceiver extends BroadcastReceiver { public class BootReceiver extends BroadcastReceiver {
@Override @Override
public void onReceive(Context context, Intent intent) { public void onReceive(Context context, Intent intent) {
context.startService(new Intent(context, SyncthingService.class)); context.startService(new Intent(context, SyncthingService.class));
} }
} }