package com.connectsdk.service;
import com.connectsdk.discovery.DiscoveryManager;
import com.connectsdk.service.capability.CapabilityMethods;
import com.connectsdk.service.capability.MediaControl;
import com.connectsdk.service.capability.MediaPlayer;
import com.connectsdk.service.capability.listeners.ResponseListener;
import com.connectsdk.service.command.NotSupportedServiceCommandError;
import com.connectsdk.service.command.ServiceCommand;
import com.connectsdk.service.command.ServiceCommandError;
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.ArgumentCaptor;
import org.mockito.Mockito;
import org.robolectric.Robolectric;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.annotation.Config;
@RunWith(RobolectricTestRunner.class)
@Config(manifest = Config.NONE)
public class NetCastTVServiceTest {
private NetcastTVService service;
private ServiceDescription serviceDescription;
private ServiceConfig serviceConfig;
@Before
public void setUp() {
serviceDescription = Mockito.mock(ServiceDescription.class);
Mockito.when(serviceDescription.getModelNumber()).thenReturn("4.0");
serviceConfig = Mockito.mock(ServiceConfig.class);
service = new NetcastTVService(serviceDescription, serviceConfig);
}
@Test
public void testDecToHex() {
Assert.assertEquals("0000000000000010", service.decToHex("16"));
}
@Test
public void testDecToHexWithNullArgument() {
Assert.assertEquals(null, service.decToHex(null));
}
@Test
public void testDecToHexWithEmptyArgument() {
Assert.assertEquals(null, service.decToHex(""));
}
@Test
public void testDecToHexWithWrongArgument() {
Assert.assertEquals(null, service.decToHex("Not a number"));
}
@Test
public void testDecToHexWithWrongCharactersArgument() {
Assert.assertEquals("0000000000000010", service.decToHex(" 16\r\n"));
}
@Test
public void testServiceShouldHasSubtitleCapabilityWhenPairingLevelOn() {
setPairingLevel(DiscoveryManager.PairingLevel.OFF);
Assert.assertTrue(service.hasCapability(MediaPlayer.Subtitle_SRT));
}
@Test
public void testServiceShouldHasSubtitleCapabilityWhenPairingLevelOff() {
setPairingLevel(DiscoveryManager.PairingLevel.ON);
Assert.assertTrue(service.hasCapability(MediaPlayer.Subtitle_SRT));
}
@Test
public void testShouldNotContainRewindCapabilityWhenPairingLevelOff() {
setPairingLevel(DiscoveryManager.PairingLevel.OFF);
Assert.assertFalse(service.hasCapability(MediaControl.Rewind));
}
@Test
public void testShouldNotContainRewindCapabilityWhenPairingLevelOn() {
setPairingLevel(DiscoveryManager.PairingLevel.ON);
Assert.assertFalse(service.hasCapability(MediaControl.Rewind));
}
@Test
public void testShouldNotContainFastForwardCapabilityWhenPairingLevelOff() {
setPairingLevel(DiscoveryManager.PairingLevel.OFF);
Assert.assertFalse(service.hasCapability(MediaControl.FastForward));
}
@Test
public void testShouldNotContainFastForwardCapabilityWhenPairingLevelOn() {
setPairingLevel(DiscoveryManager.PairingLevel.ON);
Assert.assertFalse(service.hasCapability(MediaControl.FastForward));
}
@Test
public void testRewindShouldSendNotSupportedError() {
ResponseListener<Object> listener = Mockito.mock(ResponseListener.class);
service.rewind(listener);
verifyNotImplemented(listener);
}
@Test
public void testFastForwardShouldSendNotSupportedError() {
ResponseListener<Object> listener = Mockito.mock(ResponseListener.class);
service.fastForward(listener);
verifyNotImplemented(listener);
}
@Test
public void testMediaPlayerPriorityShouldBeHigh() {
Assert.assertEquals(CapabilityMethods.CapabilityPriorityLevel.HIGH,
service.getMediaPlayerCapabilityLevel());
}
@Test
public void testMediaControlPriorityShouldBeHigh() {
Assert.assertEquals(CapabilityMethods.CapabilityPriorityLevel.HIGH,
service.getMediaControlCapabilityLevel());
}
private void verifyNotImplemented(ResponseListener<Object> listener) {
ArgumentCaptor<ServiceCommandError> argError
= ArgumentCaptor.forClass(ServiceCommandError.class);
Mockito.verify(listener).onError(argError.capture());
Assert.assertTrue(argError.getValue() instanceof NotSupportedServiceCommandError);
}
private void setPairingLevel(DiscoveryManager.PairingLevel level) {
DiscoveryManager.init(Robolectric.application);
DiscoveryManager.getInstance().setPairingLevel(level);
}
}