package com.googlecode.gwt.test;
import com.google.gwt.dom.client.HeadingElement;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.user.client.ui.RadioButton;
import com.google.gwt.user.client.ui.RootPanel;
import com.googlecode.gwt.MockValueChangeHandler;
import com.googlecode.gwt.test.utils.events.Browser;
import org.junit.Test;
import static org.assertj.core.api.Assertions.assertThat;
public class RadioButtonTest extends GwtTestTest {
private boolean tested;
@Test
public void changeName() {
// Given
RadioButton rb0 = new RadioButton("myRadioGroup", "foo");
RootPanel.get().add(rb0);
MockValueChangeHandler<Boolean> rb0MockChangeHandler = new MockValueChangeHandler<Boolean>();
rb0.addValueChangeHandler(rb0MockChangeHandler);
RadioButton rb1 = new RadioButton("myRadioGroup", "bar");
RootPanel.get().add(rb1);
MockValueChangeHandler<Boolean> rb1MockChangeHandler = new MockValueChangeHandler<Boolean>();
rb1.addValueChangeHandler(rb1MockChangeHandler);
// When 1
rb0.setName("changedGroup");
Browser.click(rb0);
// Then 1
assertThat(rb0.getValue()).isTrue();
assertThat(rb0MockChangeHandler.getCallCount()).isEqualTo(1);
// When 2
rb1.setName("changedGroup");
Browser.click(rb1);
assertThat(rb0.getValue()).isFalse();
assertThat(rb0MockChangeHandler.getCallCount()).isEqualTo(2);
assertThat(rb0MockChangeHandler.getLast()).isFalse();
assertThat(rb1.getValue()).isTrue();
assertThat(rb1MockChangeHandler.getCallCount()).isEqualTo(1);
assertThat(rb1MockChangeHandler.getLast()).isTrue();
}
@Test
public void click_ClickHandler() {
// Given
tested = false;
RadioButton r = new RadioButton("myRadioGroup", "foo");
r.addClickHandler(new ClickHandler() {
public void onClick(ClickEvent event) {
tested = !tested;
}
});
// Preconditions
assertThat(tested).isEqualTo(false);
// When
Browser.click(r);
// Then
assertThat(tested).isEqualTo(true);
assertThat(r.getValue()).isEqualTo(true);
}
@Test
public void click_Twice_ClickHandler() {
// Given
tested = false;
RadioButton r1 = new RadioButton("myRadioGroup", "r1");
RadioButton r2 = new RadioButton("myRadioGroup", "r2");
r1.addClickHandler(new ClickHandler() {
public void onClick(ClickEvent event) {
tested = !tested;
}
});
r2.addClickHandler(new ClickHandler() {
public void onClick(ClickEvent event) {
tested = !tested;
}
});
// Preconditions
assertThat(tested).isEqualTo(false);
// When
Browser.click(r1);
Browser.click(r1);
// Then
assertThat(tested).isEqualTo(false);
assertThat(r1.getValue()).isEqualTo(true);
}
@Test
public void clickNotDetachedRadioButton() {
// Given
RadioButton rb0 = new RadioButton("myRadioGroup", "foo");
MockValueChangeHandler<Boolean> rb0MockChangeHandler = new MockValueChangeHandler<Boolean>();
rb0.addValueChangeHandler(rb0MockChangeHandler);
RadioButton rb1 = new RadioButton("myRadioGroup", "bar");
MockValueChangeHandler<Boolean> rb1MockChangeHandler = new MockValueChangeHandler<Boolean>();
rb1.addValueChangeHandler(rb1MockChangeHandler);
// When
Browser.click(rb0);
Browser.click(rb1);
// Then
assertThat(rb0.getValue()).isTrue();
assertThat(rb0MockChangeHandler.getCallCount()).isEqualTo(1);
assertThat(rb1.getValue()).isTrue();
assertThat(rb1MockChangeHandler.getCallCount()).isEqualTo(1);
}
@Test
public void clickOnDetachedRadionButton() {
// Given
RadioButton rb0 = new RadioButton("myRadioGroup", "foo");
rb0.setValue(true);
RootPanel.get().add(rb0);
MockValueChangeHandler<Boolean> rb0MockChangeHandler = new MockValueChangeHandler<Boolean>();
rb0.addValueChangeHandler(rb0MockChangeHandler);
RadioButton rb1 = new RadioButton("myRadioGroup", "bar");
RootPanel.get().add(rb1);
MockValueChangeHandler<Boolean> rb1MockChangeHandler = new MockValueChangeHandler<Boolean>();
rb1.addValueChangeHandler(rb1MockChangeHandler);
// Preconditions
assertThat(rb0.getValue()).isTrue();
assertThat(rb0MockChangeHandler.getCallCount()).isEqualTo(0);
assertThat(rb1.getValue()).isFalse();
assertThat(rb1MockChangeHandler.getCallCount()).isEqualTo(0);
// When
RootPanel.get().remove(rb1);
Browser.click(rb1);
// Then
assertThat(rb1.getValue()).isTrue();
assertThat(rb1MockChangeHandler.getCallCount()).isEqualTo(1);
assertThat(rb0.getValue()).isTrue();
assertThat(rb0MockChangeHandler.getCallCount()).isEqualTo(0);
}
@Test
public void html() {
// Given
RadioButton rb = new RadioButton("myRadioGroup", "<h1>foo</h1>", true);
// Preconditions
assertThat(rb.getHTML()).isEqualTo("<h1>foo</h1>");
// When
rb.setHTML("<h1>test</h1>");
// Then
assertThat(rb.getHTML()).isEqualTo("<h1>test</h1>");
assertThat(rb.getElement().getChild(1).getChildCount()).isEqualTo(1);
HeadingElement h1 = rb.getElement().getChild(1).getChild(0).cast();
assertThat(h1.getTagName()).isEqualTo("H1");
assertThat(h1.getInnerText()).isEqualTo("test");
}
@Test
public void name() {
// Given
RadioButton rb = new RadioButton("myRadioGroup", "foo");
// Preconditions
assertThat(rb.getName()).isEqualTo("myRadioGroup");
// When
rb.setName("name");
// Then
assertThat(rb.getName()).isEqualTo("name");
}
@Test
public void radioButton_Group() {
// Given
RadioButton rb0 = new RadioButton("myRadioGroup", "foo");
RootPanel.get().add(rb0);
MockValueChangeHandler<Boolean> rb0MockChangeHandler = new MockValueChangeHandler<Boolean>();
rb0.addValueChangeHandler(rb0MockChangeHandler);
RadioButton rb1 = new RadioButton("myRadioGroup", "bar");
RootPanel.get().add(rb1);
MockValueChangeHandler<Boolean> rb1MockChangeHandler = new MockValueChangeHandler<Boolean>();
rb1.addValueChangeHandler(rb1MockChangeHandler);
RadioButton rb2 = new RadioButton("myRadioGroup", "baz");
RootPanel.get().add(rb2);
MockValueChangeHandler<Boolean> rb2MockChangeHandler = new MockValueChangeHandler<Boolean>();
rb2.addValueChangeHandler(rb2MockChangeHandler);
// When 1
Browser.click(rb1);
// Then 1
assertThat(rb0.getValue()).isEqualTo(false);
assertThat(rb0MockChangeHandler.getCallCount()).isEqualTo(0);
assertThat(rb1.getValue()).isEqualTo(true);
assertThat(rb1MockChangeHandler.getCallCount()).isEqualTo(1);
assertThat(rb1MockChangeHandler.getLast()).isTrue();
assertThat(rb2.getValue()).isEqualTo(false);
assertThat(rb2MockChangeHandler.getCallCount()).isEqualTo(0);
// When 2
Browser.click(rb2);
// Then 2
assertThat(rb0.getValue()).isEqualTo(false);
assertThat(rb0MockChangeHandler.getCallCount()).isEqualTo(0);
assertThat(rb1.getValue()).isEqualTo(false);
assertThat(rb1MockChangeHandler.getCallCount()).isEqualTo(2);
assertThat(rb1MockChangeHandler.getLast()).isFalse();
assertThat(rb2.getValue()).isEqualTo(true);
assertThat(rb2MockChangeHandler.getCallCount()).isEqualTo(1);
assertThat(rb2MockChangeHandler.getLast()).isTrue();
}
@Test
public void text() {
// Given
RadioButton rb = new RadioButton("myRadioGroup", "foo");
// Preconditions
assertThat(rb.getText()).isEqualTo("foo");
// When
rb.setText("text");
// Then
assertThat(rb.getText()).isEqualTo("text");
}
@Test
public void title() {
// Given
RadioButton rb = new RadioButton("myRadioGroup", "foo");
// Preconditions
assertThat(rb.getTitle()).isEqualTo("");
// When
rb.setTitle("title");
// Then
assertThat(rb.getTitle()).isEqualTo("title");
}
@Test
public void visible() {
// Given
RadioButton rb = new RadioButton("myRadioGroup", "foo");
// Preconditions
assertThat(rb.isVisible()).isEqualTo(true);
// When
rb.setVisible(false);
// Then
assertThat(rb.isVisible()).isEqualTo(false);
}
}