package com.connectsdk.device;
import com.connectsdk.discovery.DiscoveryManager;
import com.connectsdk.service.AirPlayService;
import com.connectsdk.service.DIALService;
import com.connectsdk.service.DLNAService;
import com.connectsdk.service.DeviceService;
import com.connectsdk.service.NetcastTVService;
import com.connectsdk.service.RokuService;
import com.connectsdk.service.WebOSTVService;
import com.connectsdk.service.capability.Launcher;
import com.connectsdk.service.capability.MediaPlayer;
import com.connectsdk.service.config.ServiceConfig;
import com.connectsdk.service.config.ServiceDescription;
import junit.framework.Assert;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mockito;
import org.robolectric.Robolectric;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.annotation.Config;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
@RunWith(RobolectricTestRunner.class)
@Config(manifest = Config.NONE)
public class ConnectableDeviceTest {
private ConnectableDevice device;
@Before
public void setUp() {
DiscoveryManager.init(Robolectric.application);
device = new ConnectableDevice();
}
@Test
public void testHasCapabilityWithEmptyServices() {
Assert.assertFalse(device.hasCapability(MediaPlayer.Display_Image));
}
@Test
public void testHasCapabilityWithServices() {
DeviceService service = Mockito.mock(DeviceService.class);
Mockito.when(service.hasCapability(MediaPlayer.Display_Image)).thenReturn(Boolean.TRUE);
device.services.put("service", service);
Assert.assertTrue(device.hasCapability(MediaPlayer.Display_Image));
}
@Test
public void testHasAnyCapabilities() {
DeviceService service = Mockito.mock(DeviceService.class);
String[] capabilities = {Launcher.Browser, Launcher.YouTube};
Mockito.when(service.hasAnyCapability(capabilities)).thenReturn(Boolean.TRUE);
device.services.put("service", service);
Assert.assertTrue(device.hasAnyCapability(capabilities));
}
@Test
public void testHasAnyCapabilitiesWithoutServices() {
DeviceService service = Mockito.mock(DeviceService.class);
String[] capabilities = {Launcher.Browser, Launcher.YouTube};
Mockito.when(service.hasAnyCapability(capabilities)).thenReturn(Boolean.FALSE);
device.services.put("service", service);
Assert.assertFalse(device.hasAnyCapability(capabilities));
}
@Test
public void testHasCapabilities() {
DeviceService service = Mockito.mock(DeviceService.class);
Mockito.when(service.hasCapability(Launcher.Browser)).thenReturn(Boolean.TRUE);
Mockito.when(service.hasCapability(Launcher.YouTube)).thenReturn(Boolean.TRUE);
device.services.put("service", service);
List<String> capabilities = new ArrayList<String>();
capabilities.add(Launcher.Browser);
capabilities.add(Launcher.YouTube);
Assert.assertTrue(device.hasCapabilities(capabilities));
}
@Test
public void testSetPromptPairingType() throws IOException {
// given
addAllCoreServicesToDevice();
// when
device.setPairingType(DeviceService.PairingType.FIRST_SCREEN);
// then
Assert.assertEquals(DeviceService.PairingType.FIRST_SCREEN, device.getServiceByName(WebOSTVService.ID).getPairingType());
Assert.assertEquals(DeviceService.PairingType.PIN_CODE, device.getServiceByName(NetcastTVService.ID).getPairingType());
Assert.assertEquals(DeviceService.PairingType.NONE, device.getServiceByName(DLNAService.ID).getPairingType());
Assert.assertEquals(DeviceService.PairingType.NONE, device.getServiceByName(DIALService.ID).getPairingType());
Assert.assertEquals(DeviceService.PairingType.NONE, device.getServiceByName(RokuService.ID).getPairingType());
Assert.assertEquals(DeviceService.PairingType.PIN_CODE, device.getServiceByName(AirPlayService.ID).getPairingType());
}
@Test
public void testSetPinPairingType() throws IOException {
// given
addAllCoreServicesToDevice();
// when
device.setPairingType(DeviceService.PairingType.PIN_CODE);
// then
Assert.assertEquals(DeviceService.PairingType.PIN_CODE, device.getServiceByName(WebOSTVService.ID).getPairingType());
Assert.assertEquals(DeviceService.PairingType.PIN_CODE, device.getServiceByName(NetcastTVService.ID).getPairingType());
Assert.assertEquals(DeviceService.PairingType.NONE, device.getServiceByName(DLNAService.ID).getPairingType());
Assert.assertEquals(DeviceService.PairingType.NONE, device.getServiceByName(DIALService.ID).getPairingType());
Assert.assertEquals(DeviceService.PairingType.NONE, device.getServiceByName(RokuService.ID).getPairingType());
Assert.assertEquals(DeviceService.PairingType.PIN_CODE, device.getServiceByName(AirPlayService.ID).getPairingType());
}
@Test
public void testNonePairingType() throws IOException {
// given
addAllCoreServicesToDevice();
// when
device.setPairingType(DeviceService.PairingType.NONE);
// then
Assert.assertEquals(DeviceService.PairingType.NONE, device.getServiceByName(WebOSTVService.ID).getPairingType());
Assert.assertEquals(DeviceService.PairingType.PIN_CODE, device.getServiceByName(NetcastTVService.ID).getPairingType());
Assert.assertEquals(DeviceService.PairingType.NONE, device.getServiceByName(DLNAService.ID).getPairingType());
Assert.assertEquals(DeviceService.PairingType.NONE, device.getServiceByName(DIALService.ID).getPairingType());
Assert.assertEquals(DeviceService.PairingType.NONE, device.getServiceByName(RokuService.ID).getPairingType());
Assert.assertEquals(DeviceService.PairingType.PIN_CODE, device.getServiceByName(AirPlayService.ID).getPairingType());
}
private void addAllCoreServicesToDevice() throws IOException {
DeviceService webOSService = new WebOSTVService(createServiceDescription(WebOSTVService.ID), Mockito.mock(ServiceConfig.class));
DeviceService netCastService = new NetcastTVService(createServiceDescription(NetcastTVService.ID), Mockito.mock(ServiceConfig.class));
DeviceService dialService = new DIALService(createServiceDescription(DIALService.ID), Mockito.mock(ServiceConfig.class));
DeviceService dlnaSrevice = new DLNAService(createServiceDescription(DLNAService.ID), Mockito.mock(ServiceConfig.class));
DeviceService rokuService = new RokuService(createServiceDescription(RokuService.ID), Mockito.mock(ServiceConfig.class));
DeviceService airPlayService = new AirPlayService(createServiceDescription(AirPlayService.ID), Mockito.mock(ServiceConfig.class));
device.services.put(WebOSTVService.ID, webOSService);
device.services.put(NetcastTVService.ID, netCastService);
device.services.put(DIALService.ID, dialService);
device.services.put(DLNAService.ID, dlnaSrevice);
device.services.put(RokuService.ID, rokuService);
device.services.put(AirPlayService.ID, airPlayService);
}
private ServiceDescription createServiceDescription(String serviceId) {
ServiceDescription description = new ServiceDescription();
description.setFriendlyName("");
description.setManufacturer("");
description.setUUID("");
description.setModelDescription("");
description.setModelName("");
description.setModelNumber("");
description.setServiceID(serviceId);
return description;
}
}