package com.googlecode.gwt.test;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.event.dom.client.DomEvent;
import com.google.gwt.user.client.Event;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.RootPanel;
import com.googlecode.gwt.test.utils.events.Browser;
import com.googlecode.gwt.test.utils.events.EventBuilder;
import org.junit.Before;
import org.junit.Test;
import static org.assertj.core.api.Assertions.assertThat;
public class CompositeTest extends GwtTestTest {
private Composite composite;
private int compositeCount;
private Label label;
private int labelCount;
@Before
public void beforeCompositeTest() {
label = new Label("wrapped label");
composite = new MyComposite(label);
RootPanel.get().add(composite);
labelCount = 0;
compositeCount = 0;
}
@Test
public void click_Wrapped() {
// Given
label.addClickHandler(new ClickHandler() {
public void onClick(ClickEvent event) {
labelCount++;
assertThat(event.getSource()).isEqualTo(label);
assertThat(event.getRelativeElement()).isEqualTo(label.getElement());
// composite handler should be trigger first
assertThat(compositeCount).isEqualTo(labelCount);
}
});
composite.addDomHandler(new ClickHandler() {
public void onClick(ClickEvent event) {
compositeCount++;
assertThat(event.getSource()).isEqualTo(composite);
assertThat(event.getRelativeElement()).isEqualTo(label.getElement());
}
}, ClickEvent.getType());
// When
Browser.click(label);
// Then
assertThat(labelCount).isEqualTo(1);
assertThat(compositeCount).isEqualTo(1);
}
@Test
public void click_Wrapper() {
// Given
label.addClickHandler(new ClickHandler() {
public void onClick(ClickEvent event) {
labelCount++;
assertThat(event.getSource()).isEqualTo(label);
assertThat(event.getRelativeElement()).isEqualTo(label.getElement());
}
});
composite.addDomHandler(new ClickHandler() {
public void onClick(ClickEvent event) {
compositeCount++;
assertThat(event.getSource()).isEqualTo(composite);
assertThat(event.getRelativeElement()).isEqualTo(label.getElement());
// composite handler should be trigger first
assertThat(compositeCount).isEqualTo(labelCount + 1);
}
}, ClickEvent.getType());
// When
Browser.click(composite);
// Then
assertThat(labelCount).isEqualTo(1);
assertThat(compositeCount).isEqualTo(1);
}
@Test
public void fireNativeEvent_Wrapped() {
// Given
label.addClickHandler(new ClickHandler() {
public void onClick(ClickEvent event) {
labelCount++;
assertThat(event.getSource()).isEqualTo(label);
assertThat(event.getRelativeElement()).isEqualTo(label.getElement());
}
});
composite.addDomHandler(new ClickHandler() {
public void onClick(ClickEvent event) {
compositeCount++;
assertThat(event.getSource()).isEqualTo(composite);
assertThat(event.getRelativeElement()).isEqualTo(label.getElement());
}
}, ClickEvent.getType());
Event clickEvent = EventBuilder.create(Event.ONCLICK).build();
// When
DomEvent.fireNativeEvent(clickEvent, label, label.getElement());
// Then
assertThat(labelCount).isEqualTo(1);
assertThat(compositeCount).isEqualTo(0);
}
@Test
public void fireNativeEvent_Wrapper() {
// Given
label.addClickHandler(new ClickHandler() {
public void onClick(ClickEvent event) {
labelCount++;
assertThat(event.getSource()).isEqualTo(label);
assertThat(event.getRelativeElement()).isEqualTo(label.getElement());
}
});
composite.addDomHandler(new ClickHandler() {
public void onClick(ClickEvent event) {
compositeCount++;
assertThat(event.getSource()).isEqualTo(composite);
assertThat(event.getRelativeElement()).isEqualTo(label.getElement());
}
}, ClickEvent.getType());
Event clickEvent = EventBuilder.create(Event.ONCLICK).build();
// When
DomEvent.fireNativeEvent(clickEvent, composite, composite.getElement());
// Then
assertThat(labelCount).isEqualTo(0);
assertThat(compositeCount).isEqualTo(1);
}
private class MyComposite extends Composite {
MyComposite(Label label) {
initWidget(label);
}
}
}