package com.googlecode.gwt.test;
import com.google.gwt.user.client.History;
import com.google.gwt.user.client.HistoryListener;
import com.googlecode.gwt.MockValueChangeHandler;
import org.junit.Test;
import java.util.LinkedList;
import static org.assertj.core.api.Assertions.assertThat;
@SuppressWarnings("deprecation")
public class HistoryTest extends GwtTestTest {
@Test
public void back_forward_AfterNewItem() {
// Given
History.newItem("init");
History.newItem("myToken");
History.back();
History.newItem("newToken");
MockValueChangeHandler<String> changeListener = new MockValueChangeHandler<String>();
History.addValueChangeHandler(changeListener);
// When 1
History.back();
// Then 2
assertThat(changeListener.getCallCount()).isEqualTo(1);
assertThat(changeListener.getLast()).isEqualTo("init");
// When 2
History.forward();
// Then 2
assertThat(changeListener.getCallCount()).isEqualTo(2);
assertThat(changeListener.getLast()).isEqualTo("newToken");
// When 3 : can't forward anymore
History.forward();
// Then 3
assertThat(changeListener.getCallCount()).isEqualTo(2);
assertThat(changeListener.getLast()).isEqualTo("newToken");
// When 4
History.back();
// Then 4
assertThat(changeListener.getCallCount()).isEqualTo(3);
assertThat(changeListener.getLast()).isEqualTo("init");
}
@Test
public void back_forward_HistoryListener() {
// Given
History.newItem("init");
History.newItem("myToken");
MockHistoryListener listener = new MockHistoryListener();
History.addHistoryListener(listener);
// When : first back
History.back();
// Then
assertThat(listener.getCallCount()).isEqualTo(1);
assertThat(listener.getLast()).isEqualTo("init");
// When 2 : second back : no more token
History.back();
// Then 2
assertThat(listener.getCallCount()).isEqualTo(2);
assertThat(listener.getLast()).isEqualTo("");
// When 3 : third back : no ValueChangeEvent
History.back();
// Then 3
assertThat(listener.getCallCount()).isEqualTo(2);
assertThat(listener.getLast()).isEqualTo("");
// When 4
History.forward();
// Then 4
assertThat(listener.getCallCount()).isEqualTo(3);
assertThat(listener.getLast()).isEqualTo("init");
// When 5
History.forward();
// Then 5
assertThat(listener.getCallCount()).isEqualTo(4);
assertThat(listener.getLast()).isEqualTo("myToken");
// When 6 : can't go forward
History.forward();
// Then 5
assertThat(listener.getCallCount()).isEqualTo(4);
assertThat(listener.getLast()).isEqualTo("myToken");
}
@Test
public void back_forward_ValueChangeHandler() {
// Given
History.newItem("init");
History.newItem("myToken");
MockValueChangeHandler<String> changeHandler = new MockValueChangeHandler<String>();
History.addValueChangeHandler(changeHandler);
// When : first back
History.back();
// Then
assertThat(changeHandler.getCallCount()).isEqualTo(1);
assertThat(changeHandler.getLast()).isEqualTo("init");
// When 2 : second back : no more token
History.back();
// Then 2
assertThat(changeHandler.getCallCount()).isEqualTo(2);
assertThat(changeHandler.getLast()).isEqualTo("");
// When 3 : third back : no ValueChangeEvent
History.back();
// Then 3
assertThat(changeHandler.getCallCount()).isEqualTo(2);
assertThat(changeHandler.getLast()).isEqualTo("");
// When 4
History.forward();
// Then 4
assertThat(changeHandler.getCallCount()).isEqualTo(3);
assertThat(changeHandler.getLast()).isEqualTo("init");
// When 5
History.forward();
// Then 5
assertThat(changeHandler.getCallCount()).isEqualTo(4);
assertThat(changeHandler.getLast()).isEqualTo("myToken");
// When 6 : can't go forward
History.forward();
// Then 5
assertThat(changeHandler.getCallCount()).isEqualTo(4);
assertThat(changeHandler.getLast()).isEqualTo("myToken");
}
@Test
public void newItem_HistoryListener() {
// Given
MockHistoryListener history = new MockHistoryListener();
History.addHistoryListener(history);
// When
History.newItem("init");
// Then
assertThat(history.getCallCount()).isEqualTo(1);
assertThat(history.getLast()).isEqualTo("init");
// When 2
History.newItem("myToken");
// Then 2
assertThat(history.getCallCount()).isEqualTo(2);
assertThat(history.getLast()).isEqualTo("myToken");
}
@Test
public void newItem_ValueChangeHandler() {
// Given
MockValueChangeHandler<String> changeHandler = new MockValueChangeHandler<String>();
History.addValueChangeHandler(changeHandler);
// When
History.newItem("init");
// Then
assertThat(changeHandler.getCallCount()).isEqualTo(1);
assertThat(changeHandler.getLast()).isEqualTo("init");
// When 2
History.newItem("myToken");
// Then 2
assertThat(changeHandler.getCallCount()).isEqualTo(2);
assertThat(changeHandler.getLast()).isEqualTo("myToken");
}
@Override
protected String getHostPagePath(String moduleFullQualifiedName) {
return "test.html";
}
private static class MockHistoryListener implements HistoryListener {
LinkedList<String> reccorded = new LinkedList<String>();
public int getCallCount() {
return reccorded.size();
}
public String getLast() {
return reccorded.getLast();
}
public void onHistoryChanged(String historyToken) {
reccorded.add(historyToken);
}
}
}