Home | History | Annotate | Download | only in shadows
      1 package com.xtremelabs.robolectric.shadows;
      2 
      3 import static org.hamcrest.CoreMatchers.equalTo;
      4 import static org.junit.Assert.assertThat;
      5 import static org.junit.Assert.assertTrue;
      6 import static org.mockito.Matchers.anyInt;
      7 import static org.mockito.Matchers.eq;
      8 import static org.mockito.Mockito.mock;
      9 import static org.mockito.Mockito.when;
     10 
     11 import java.util.Random;
     12 
     13 import org.junit.Test;
     14 import org.junit.runner.RunWith;
     15 
     16 import android.util.AttributeSet;
     17 import android.widget.EditText;
     18 
     19 import com.xtremelabs.robolectric.WithTestDefaultsRunner;
     20 
     21 @RunWith(WithTestDefaultsRunner.class)
     22 public class EditTextTest {
     23 
     24     @Test
     25     public void shouldBeFocusableByDefault() throws Exception {
     26         assertTrue(new EditText(null).isFocusable());
     27         assertTrue(new EditText(null).isFocusableInTouchMode());
     28     }
     29 
     30     @Test
     31     public void givenInitializingWithAttributeSet_whenMaxLengthDefined_thenRestrictTextLengthToMaxLength() {
     32         int maxLength = anyInteger();
     33         AttributeSet attrs = attributeSetWithMaxLength(maxLength);
     34         EditText editText = new EditText(null, attrs);
     35         String excessiveInput = stringOfLength(maxLength * 2);
     36 
     37         editText.setText(excessiveInput);
     38 
     39         assertThat(editText.getText().toString(), equalTo(excessiveInput.subSequence(0, maxLength)));
     40     }
     41 
     42     @Test
     43     public void givenInitializingWithAttributeSet_whenMaxLengthNotDefined_thenTextLengthShouldHaveNoRestrictions() {
     44         AttributeSet attrs = attributeSetWithoutMaxLength();
     45         EditText editText = new EditText(null, attrs);
     46         String input = anyString();
     47 
     48         editText.setText(input);
     49 
     50         assertThat(editText.getText().toString(), equalTo(input));
     51     }
     52 
     53     @Test
     54     public void whenInitializingWithoutAttributeSet_thenTextLengthShouldHaveNoRestrictions() {
     55         EditText editText = new EditText(null);
     56         String input = anyString();
     57 
     58         editText.setText(input);
     59 
     60         assertThat(editText.getText().toString(), equalTo(input));
     61     }
     62 
     63     private String anyString() {
     64         return stringOfLength(anyInteger());
     65     }
     66 
     67     private String stringOfLength(int length) {
     68         StringBuilder stringBuilder = new StringBuilder();
     69 
     70         for (int i = 0; i < length; i++)
     71             stringBuilder.append('x');
     72 
     73         return stringBuilder.toString();
     74     }
     75 
     76     private int anyInteger() {
     77         return new Random().nextInt(1000) + 1;
     78     }
     79 
     80     private AttributeSet attributeSetWithMaxLength(int maxLength) {
     81         AttributeSet attrs = mock(AttributeSet.class);
     82         when(attrs.getAttributeIntValue(eq("android"), eq("maxLength"), anyInt())).thenReturn(maxLength);
     83         return attrs;
     84     }
     85 
     86     private AttributeSet attributeSetWithoutMaxLength() {
     87         AttributeSet attrs = mock(AttributeSet.class);
     88         when(attrs.getAttributeIntValue("android", "maxLength", Integer.MAX_VALUE)).thenReturn(Integer.MAX_VALUE);
     89         return attrs;
     90     }
     91 }
     92