Added unit tests for BluetoothLeDeviceStore.java
This commit is contained in:
@@ -31,6 +31,9 @@ dependencies {
|
|||||||
compile 'uk.co.alt236:easycursor-android:1.0.0'
|
compile 'uk.co.alt236:easycursor-android:1.0.0'
|
||||||
compile fileTree(include: ['*.jar'], dir: 'libs')
|
compile fileTree(include: ['*.jar'], dir: 'libs')
|
||||||
compile project(':library')
|
compile project(':library')
|
||||||
|
|
||||||
|
testCompile 'junit:junit:4.12'
|
||||||
|
testCompile 'org.mockito:mockito-all:1.9.5'
|
||||||
}
|
}
|
||||||
|
|
||||||
android {
|
android {
|
||||||
|
|||||||
+30
-10
@@ -1,5 +1,7 @@
|
|||||||
package uk.co.alt236.btlescan.containers;
|
package uk.co.alt236.btlescan.containers;
|
||||||
|
|
||||||
|
import android.support.annotation.NonNull;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.Comparator;
|
import java.util.Comparator;
|
||||||
@@ -11,14 +13,14 @@ import uk.co.alt236.bluetoothlelib.device.BluetoothLeDevice;
|
|||||||
import uk.co.alt236.easycursor.objectcursor.EasyObjectCursor;
|
import uk.co.alt236.easycursor.objectcursor.EasyObjectCursor;
|
||||||
|
|
||||||
public class BluetoothLeDeviceStore {
|
public class BluetoothLeDeviceStore {
|
||||||
|
private static final BluetoothLeDeviceComparator DEFAULT_COMPARATOR = new BluetoothLeDeviceComparator();
|
||||||
private final Map<String, BluetoothLeDevice> mDeviceMap;
|
private final Map<String, BluetoothLeDevice> mDeviceMap;
|
||||||
|
|
||||||
|
|
||||||
public BluetoothLeDeviceStore() {
|
public BluetoothLeDeviceStore() {
|
||||||
mDeviceMap = new HashMap<>();
|
mDeviceMap = new HashMap<>();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void addDevice(final BluetoothLeDevice device) {
|
public void addDevice(@NonNull final BluetoothLeDevice device) {
|
||||||
if (mDeviceMap.containsKey(device.getAddress())) {
|
if (mDeviceMap.containsKey(device.getAddress())) {
|
||||||
mDeviceMap.get(device.getAddress()).updateRssiReading(device.getTimestamp(), device.getRssi());
|
mDeviceMap.get(device.getAddress()).updateRssiReading(device.getTimestamp(), device.getRssi());
|
||||||
} else {
|
} else {
|
||||||
@@ -30,24 +32,42 @@ public class BluetoothLeDeviceStore {
|
|||||||
mDeviceMap.clear();
|
mDeviceMap.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public int getSize() {
|
||||||
|
return mDeviceMap.size();
|
||||||
|
}
|
||||||
|
|
||||||
|
@NonNull
|
||||||
public EasyObjectCursor<BluetoothLeDevice> getDeviceCursor() {
|
public EasyObjectCursor<BluetoothLeDevice> getDeviceCursor() {
|
||||||
|
return getDeviceCursor(DEFAULT_COMPARATOR);
|
||||||
|
}
|
||||||
|
|
||||||
|
@NonNull
|
||||||
|
public EasyObjectCursor<BluetoothLeDevice> getDeviceCursor(@NonNull Comparator<BluetoothLeDevice> comparator) {
|
||||||
return new EasyObjectCursor<>(
|
return new EasyObjectCursor<>(
|
||||||
BluetoothLeDevice.class,
|
BluetoothLeDevice.class,
|
||||||
getDeviceList(),
|
getDeviceList(comparator),
|
||||||
"address");
|
"address");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@NonNull
|
||||||
public List<BluetoothLeDevice> getDeviceList() {
|
public List<BluetoothLeDevice> getDeviceList() {
|
||||||
|
return getDeviceList(DEFAULT_COMPARATOR);
|
||||||
|
}
|
||||||
|
|
||||||
|
@NonNull
|
||||||
|
public List<BluetoothLeDevice> getDeviceList(@NonNull Comparator<BluetoothLeDevice> comparator) {
|
||||||
final List<BluetoothLeDevice> methodResult = new ArrayList<>(mDeviceMap.values());
|
final List<BluetoothLeDevice> methodResult = new ArrayList<>(mDeviceMap.values());
|
||||||
|
|
||||||
Collections.sort(methodResult, new Comparator<BluetoothLeDevice>() {
|
Collections.sort(methodResult, comparator);
|
||||||
|
|
||||||
@Override
|
|
||||||
public int compare(final BluetoothLeDevice arg0, final BluetoothLeDevice arg1) {
|
|
||||||
return arg0.getAddress().compareToIgnoreCase(arg1.getAddress());
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
return methodResult;
|
return methodResult;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static class BluetoothLeDeviceComparator implements Comparator<BluetoothLeDevice> {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int compare(final BluetoothLeDevice arg0, final BluetoothLeDevice arg1) {
|
||||||
|
return arg0.getAddress().compareTo(arg1.getAddress());
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+88
@@ -0,0 +1,88 @@
|
|||||||
|
package uk.co.alt236.btlescan.containers;
|
||||||
|
|
||||||
|
import org.junit.Before;
|
||||||
|
import org.junit.Test;
|
||||||
|
import org.mockito.Mockito;
|
||||||
|
|
||||||
|
import uk.co.alt236.bluetoothlelib.device.BluetoothLeDevice;
|
||||||
|
|
||||||
|
import static org.junit.Assert.assertEquals;
|
||||||
|
import static org.junit.Assert.assertSame;
|
||||||
|
|
||||||
|
public class BluetoothLeDeviceStoreTest {
|
||||||
|
private BluetoothLeDeviceStore cut;
|
||||||
|
|
||||||
|
@Before
|
||||||
|
public void setUp() {
|
||||||
|
cut = new BluetoothLeDeviceStore();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testAddOne() {
|
||||||
|
assertStoreSize(0);
|
||||||
|
|
||||||
|
cut.addDevice(createDevice("foo"));
|
||||||
|
assertStoreSize(1);
|
||||||
|
|
||||||
|
cut.clear();
|
||||||
|
assertStoreSize(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testAddTwo() {
|
||||||
|
assertStoreSize(0);
|
||||||
|
|
||||||
|
cut.addDevice(createDevice("foo"));
|
||||||
|
assertStoreSize(1);
|
||||||
|
|
||||||
|
cut.addDevice(createDevice("bar"));
|
||||||
|
assertStoreSize(2);
|
||||||
|
|
||||||
|
cut.clear();
|
||||||
|
assertStoreSize(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testUpdateOne() {
|
||||||
|
assertStoreSize(0);
|
||||||
|
|
||||||
|
cut.addDevice(createDevice("foo", 100, 101));
|
||||||
|
assertStoreSize(1);
|
||||||
|
final BluetoothLeDevice device1 = cut.getDeviceList().get(0);
|
||||||
|
assertEquals(100, device1.getTimestamp());
|
||||||
|
assertEquals(101, device1.getRssi());
|
||||||
|
|
||||||
|
cut.addDevice(createDevice("foo", 200, 201));
|
||||||
|
assertStoreSize(1);
|
||||||
|
final BluetoothLeDevice device2 = cut.getDeviceList().get(0);
|
||||||
|
assertSame(device1, device2);
|
||||||
|
Mockito
|
||||||
|
.verify(device2, Mockito.times(1))
|
||||||
|
.updateRssiReading(200, 201);
|
||||||
|
|
||||||
|
cut.clear();
|
||||||
|
assertStoreSize(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private BluetoothLeDevice createDevice(final String mac) {
|
||||||
|
final BluetoothLeDevice mock = Mockito.mock(BluetoothLeDevice.class);
|
||||||
|
return createDevice(mac, 0, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
private BluetoothLeDevice createDevice(final String mac, long rssiTime, int rssi) {
|
||||||
|
final BluetoothLeDevice mock = Mockito.mock(BluetoothLeDevice.class);
|
||||||
|
|
||||||
|
Mockito.when(mock.getAddress()).thenReturn(mac);
|
||||||
|
Mockito.when(mock.getTimestamp()).thenReturn(rssiTime);
|
||||||
|
Mockito.when(mock.getRssi()).thenReturn(rssi);
|
||||||
|
|
||||||
|
return mock;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void assertStoreSize(final int expected) {
|
||||||
|
assertEquals(expected, cut.getSize());
|
||||||
|
assertEquals(expected, cut.getDeviceCursor().getCount());
|
||||||
|
assertEquals(expected, cut.getDeviceList().size());
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user