package org.deviceconnect.android.deviceplugin.heartrate.ble;
import android.bluetooth.BluetoothDevice;
import android.content.Context;
import android.test.AndroidTestCase;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import java.util.List;
import java.util.Set;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;
public class BleDeviceDetectorTest extends AndroidTestCase {
@Before
public void setUp() {
}
@After
public void tearDown() {
}
@Test
public void testBleDeviceDetector() {
BleDeviceDetector detector = new BleDeviceDetector(getContext());
assertNotNull(detector);
}
@Test
public void testBleDeviceDetector_ContextIsNull() {
try {
new BleDeviceDetector(null);
fail("not occurred exception");
} catch (NullPointerException e) {
assertTrue(true);
} catch (Exception e) {
fail("Illegal exception");
}
}
@Test
public void testInitialize() {
BleDeviceDetector detector = new BleDeviceDetector(getContext());
detector.initialize();
assertTrue(true);
}
@Test
public void testSetListener() {
BleDeviceDetector detector = new BleDeviceDetector(getContext());
detector.setListener(new BleDeviceDetector.BleDeviceDiscoveryListener() {
@Override
public void onDiscovery(List<BluetoothDevice> devices) {
}
});
assertTrue(true);
}
@Test
public void testSetListener_ListenerIsNull() {
BleDeviceDetector detector = new BleDeviceDetector(getContext());
detector.setListener(null);
assertTrue(true);
}
@Test
public void testIsScanning() {
BleDeviceDetector detector = new BleDeviceDetector(getContext());
assertEquals(false, detector.isScanning());
}
@Test
public void testIsScanning_StartScan() {
BleDeviceDetector detector = new BleDeviceDetector(getContext());
try {
detector.startScan();
assertEquals(true, detector.isScanning());
} finally {
detector.stopScan();
}
}
@Test
public void testIsEnabled() {
BleDeviceDetector detector = new BleDeviceDetector(getContext());
assertEquals(true, detector.isEnabled());
}
@Test
public void testStartScan() {
final CountDownLatch countDownLatch = new CountDownLatch(1);
BleDeviceDetector detector = new BleDeviceDetector(getContext(),
new BleDeviceAdapterFactory() {
@Override
public BleDeviceAdapter createAdapter(Context context) {
BleDeviceAdapter adapter = new BleDeviceAdapter() {
@Override
public void startScan(BleDeviceScanCallback callback) {
// TODO make a mock.
}
@Override
public void stopScan(BleDeviceScanCallback callback) {
}
@Override
public BluetoothDevice getDevice(String address) {
return null;
}
@Override
public Set<BluetoothDevice> getBondedDevices() {
return null;
}
@Override
public boolean isEnabled() {
return true;
}
@Override
public boolean checkBluetoothAddress(String address) {
return false;
}
};
return adapter;
}
});
detector.setListener(new BleDeviceDetector.BleDeviceDiscoveryListener() {
@Override
public void onDiscovery(List<BluetoothDevice> devices) {
countDownLatch.countDown();
}
});
try {
detector.startScan();
assertEquals(true, countDownLatch.await(20, TimeUnit.SECONDS));
} catch (InterruptedException e) {
fail("no discovery");
} finally {
detector.stopScan();
}
}
@Test
public void testStartScan_ScanAlreadyStarted() {
final CountDownLatch countDownLatch = new CountDownLatch(1);
BleDeviceDetector detector = new BleDeviceDetector(getContext(),
new BleDeviceAdapterFactory() {
@Override
public BleDeviceAdapter createAdapter(Context context) {
BleDeviceAdapter adapter = new BleDeviceAdapter() {
@Override
public void startScan(BleDeviceScanCallback callback) {
// TODO make a mock.
}
@Override
public void stopScan(BleDeviceScanCallback callback) {
}
@Override
public BluetoothDevice getDevice(String address) {
return null;
}
@Override
public Set<BluetoothDevice> getBondedDevices() {
return null;
}
@Override
public boolean isEnabled() {
return true;
}
@Override
public boolean checkBluetoothAddress(String address) {
return false;
}
};
return adapter;
}
});
detector.setListener(new BleDeviceDetector.BleDeviceDiscoveryListener() {
@Override
public void onDiscovery(List<BluetoothDevice> devices) {
countDownLatch.countDown();
}
});
try {
detector.startScan();
detector.startScan();
assertEquals(true, countDownLatch.await(20, TimeUnit.SECONDS));
} catch (InterruptedException e) {
fail("no discovery");
} finally {
detector.stopScan();
}
}
@Test
public void testStopScan() {
final CountDownLatch countDownLatch = new CountDownLatch(1);
BleDeviceDetector detector = new BleDeviceDetector(getContext(),
new BleDeviceAdapterFactory() {
@Override
public BleDeviceAdapter createAdapter(Context context) {
BleDeviceAdapter adapter = new BleDeviceAdapter() {
@Override
public void startScan(BleDeviceScanCallback callback) {
// TODO make a mock.
}
@Override
public void stopScan(BleDeviceScanCallback callback) {
}
@Override
public BluetoothDevice getDevice(String address) {
return null;
}
@Override
public Set<BluetoothDevice> getBondedDevices() {
return null;
}
@Override
public boolean isEnabled() {
return true;
}
@Override
public boolean checkBluetoothAddress(String address) {
return false;
}
};
return adapter;
}
});
detector.setListener(new BleDeviceDetector.BleDeviceDiscoveryListener() {
@Override
public void onDiscovery(List<BluetoothDevice> devices) {
countDownLatch.countDown();
}
});
try {
detector.startScan();
detector.stopScan();
assertEquals(false, countDownLatch.await(20, TimeUnit.SECONDS));
} catch (InterruptedException e) {
fail("no discovery");
} finally {
}
}
@Test
public void testStopScan_NoStart() {
BleDeviceDetector detector = new BleDeviceDetector(getContext(),
new BleDeviceAdapterFactory() {
@Override
public BleDeviceAdapter createAdapter(Context context) {
BleDeviceAdapter adapter = new BleDeviceAdapter() {
@Override
public void startScan(BleDeviceScanCallback callback) {
// TODO make a mock.
}
@Override
public void stopScan(BleDeviceScanCallback callback) {
}
@Override
public BluetoothDevice getDevice(String address) {
return null;
}
@Override
public Set<BluetoothDevice> getBondedDevices() {
return null;
}
@Override
public boolean isEnabled() {
return true;
}
@Override
public boolean checkBluetoothAddress(String address) {
return false;
}
};
return adapter;
}
});
detector.setListener(new BleDeviceDetector.BleDeviceDiscoveryListener() {
@Override
public void onDiscovery(List<BluetoothDevice> devices) {
}
});
try {
detector.stopScan();
assertTrue(true);
} catch (Exception e) {
fail("no discovery");
}
}
}