package org.vaadin.smartgwt.server;
import static org.mockito.Matchers.*;
import static org.mockito.Mockito.*;
import java.util.HashMap;
import org.junit.Before;
import org.junit.Test;
import org.vaadin.smartgwt.server.core.RegistrationEntry;
import org.vaadin.smartgwt.server.events.CloseClickHandler;
import org.vaadin.smartgwt.server.events.CloseClickEvent;
import org.vaadin.smartgwt.server.layout.MasterContainer;
import com.google.common.collect.Maps;
import com.vaadin.terminal.PaintException;
import com.vaadin.terminal.gwt.server.JsonPaintTarget;
public class WindowTest {
private Window window;
private MasterContainer container;
private RegistrationEntry registrationEntry;
@Before
public void before() {
window = new Window(container = mock(MasterContainer.class));
when(container.register(window)).thenReturn(registrationEntry = mock(RegistrationEntry.class));
when(registrationEntry.isRegistered()).thenReturn(true);
}
@Test
public void test_registersToContainerWhenShowing() {
window.show();
verify(container).register(window);
}
@Test
public void test_registersToContainerOnceWhenShowingMultipleTimes() {
window.show();
window.show();
verify(container, times(1)).register(window);
}
@Test
public void test_unregistersFromContainerOnDispose() {
window.show();
window.dispose();
verify(registrationEntry).unregister();
}
@Test
public void test_unregistersFromContainerWhenClientSideDestroys() {
final HashMap<String, Object> variables = Maps.newHashMap();
variables.put("destroyed", true);
window.show();
window.changeVariables(null, variables);
verify(registrationEntry).unregister();
}
@Test
public void test_notifiesClientWhenNoCloseClickHandlerRegistered() throws PaintException {
final JsonPaintTarget paintTarget = mock(JsonPaintTarget.class);
window.paintContent(paintTarget);
verify(paintTarget, never()).addAttribute("*hasCloseClickHandlers", true);
}
@Test
public void test_notifiesClientWhenCloseClickHandlerRegistered() throws PaintException {
final JsonPaintTarget paintTarget = mock(JsonPaintTarget.class);
window.addCloseClickHandler(mock(CloseClickHandler.class));
window.paintContent(paintTarget);
verify(paintTarget).addAttribute("*hasCloseClickHandlers", true);
}
@Test
public void test_firesEventWhenClientCloseClick() {
final CloseClickHandler handler = mock(CloseClickHandler.class);
final HashMap<String, Object> variables = Maps.<String, Object> newHashMap();
variables.put("onCloseClick", true);
window.addCloseClickHandler(handler);
window.changeVariables(null, variables);
verify(handler).onCloseClick(isA(CloseClickEvent.class));
}
@Test
public void test_unregistersClientCloseHandlerThroughRegistration() {
final CloseClickHandler handler = mock(CloseClickHandler.class);
final HashMap<String, Object> variables = Maps.<String, Object> newHashMap();
variables.put("onCloseClick", true);
window.addCloseClickHandler(handler).removeHandler();
window.changeVariables(null, variables);
verify(handler, never()).onCloseClick(isA(CloseClickEvent.class));
}
}