/**
*
*/
package name.webdizz.clt.crx.contentscript.client.connection;
import static org.mockito.Matchers.any;
import static org.mockito.Mockito.doNothing;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import name.webdizz.clt.crx.client.chrome.ChromePort;
import name.webdizz.clt.crx.client.event.message.SelectTextMessage;
import name.webdizz.clt.crx.contentscript.client.SelectionProvider;
import name.webdizz.clt.crx.contentscript.client.connection.ContentScriptEventHandler;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.powermock.api.mockito.PowerMockito;
import org.powermock.core.classloader.annotations.PrepareOnlyThisForTest;
import org.powermock.core.classloader.annotations.SuppressStaticInitializationFor;
import org.powermock.modules.junit4.PowerMockRunner;
import com.google.gwt.dom.client.NativeEvent;
import com.google.gwt.user.client.Event.NativePreviewEvent;
/**
* @author webdizz
*
*/
@RunWith(PowerMockRunner.class)
@PrepareOnlyThisForTest({ NativeEvent.class, SelectTextMessage.class, SelectionProvider.class })
@SuppressStaticInitializationFor({ "com.google.gwt.dom.client.NativeEvent" })
public class ContentScriptEventHandlerTest {
@Mock
private ChromePort port;
private NativeEvent event = PowerMockito.mock(NativeEvent.class);
@Before
public void setUp() throws Exception {
MockitoAnnotations.initMocks(this);
PowerMockito.mockStatic(SelectionProvider.class);
PowerMockito.when(SelectionProvider.getSelection()).thenReturn("word");
PowerMockito.suppress(event.getClass().getMethod("equals", Object.class));
PowerMockito.doReturn("mouseup").when(event).getType();
PowerMockito.doReturn(true).when(event).getCtrlKey();
PowerMockito.doReturn(true).when(event).getAltKey();
}
@Test
public void shouldNotConsumeNotMouseupEvent() throws Exception {
ContentScriptEventHandler eventHandler = new ContentScriptEventHandler(port);
NativePreviewEvent previewEvent = mock(NativePreviewEvent.class);
PowerMockito.doReturn("notamouseevent").when(event).getType();
when(previewEvent.getNativeEvent()).thenReturn(event);
eventHandler.onPreviewNativeEvent(previewEvent);
verify(previewEvent, never()).consume();
}
@Test
public void shouldNotConsumeEmptySelection() throws Exception {
PowerMockito.when(SelectionProvider.getSelection()).thenReturn("");
ContentScriptEventHandler eventHandler = new ContentScriptEventHandler(port);
NativePreviewEvent previewEvent = mock(NativePreviewEvent.class);
when(previewEvent.getNativeEvent()).thenReturn(event);
eventHandler.onPreviewNativeEvent(previewEvent);
verify(previewEvent, never()).consume();
}
@Test
public void shouldConsumeSelection() throws Exception {
ContentScriptEventHandler eventHandler = new ContentScriptEventHandler(port);
NativePreviewEvent previewEvent = mock(NativePreviewEvent.class);
when(previewEvent.getNativeEvent()).thenReturn(event);
PowerMockito.mockStatic(SelectTextMessage.class);
doNothing().when(port).postMessage(any(SelectTextMessage.class));
eventHandler.onPreviewNativeEvent(previewEvent);
verify(previewEvent).consume();
}
}