package org.robobinding.widget.edittext;
import static org.hamcrest.Matchers.equalTo;
import static org.junit.Assert.assertThat;
import static org.robobinding.util.RandomValues.either;
import static org.robobinding.widget.edittext.TwoWayTextAttributeGroup.TEXT;
import org.junit.Test;
import org.robobinding.attribute.MalformedAttributeException;
import org.robobinding.attribute.MissingRequiredAttributesException;
import org.robobinding.widget.AbstractGroupedViewAttributeTest;
import org.robolectric.annotation.Config;
import android.widget.EditText;
/**
*
* @since 1.0
* @version $Revision: 1.0 $
* @author Robert Taylor
*/
@Config(manifest = Config.NONE)
public class TwoWayTextAttributeGroupTest extends AbstractGroupedViewAttributeTest<EditText, TwoWayTextAttributeGroup> {
private final Attribute oneWayBindingText = attribute("text={name}");
private final Attribute twoWayBindingText = attribute("text=${name}");
private final Attribute valueCommitMode = attribute("valueCommitMode=onChange");
@Test
public void givenATextAttribute_thenCreateInstance() {
givenAttribute(either(oneWayBindingText, twoWayBindingText));
performInitialization();
assertThatAttributeWasCreated(TwoWayTextAttribute.class);
}
@Test
public void givenATextAttribute_thenValueCommitModeShouldDefaultToOnChange() {
givenAttribute(either(oneWayBindingText, twoWayBindingText));
performInitialization();
assertThat(currentValueCommitMode(), equalTo(ValueCommitMode.ON_CHANGE));
}
private ValueCommitMode currentValueCommitMode() {
return ((TwoWayTextAttribute) childViewAttribute(TEXT)).valueCommitMode;
}
@Test
public void givenTwoWayBindingTextAndValueCommitModeAttributes_thenCreateTextAttribute() {
givenAttributes(twoWayBindingText, valueCommitMode);
performInitialization();
assertThatAttributeWasCreated(TwoWayTextAttribute.class);
}
@Test
public void givenValueCommitModeAttribute_thenSetValueCommitModeAccordingly() {
String valueCommitModeValue = either("onChange", "onFocusLost");
Attribute valueCommitMode = attribute("valueCommitMode=" + valueCommitModeValue);
givenAttributes(twoWayBindingText, valueCommitMode);
performInitialization();
assertThat(currentValueCommitMode(), equalTo(ValueCommitMode.from(valueCommitModeValue)));
}
@Test(expected = MissingRequiredAttributesException.class)
public void givenValueCommitModeAttributeOnly_thenReject() {
givenAttribute(valueCommitMode);
performInitialization();
}
@Test(expected = MalformedAttributeException.class)
public void givenOneWayBindingTextAndValueCommitModeAttributes_thenReject() {
givenAttributes(oneWayBindingText, valueCommitMode);
performInitialization();
}
}