package br.com.concretesolutions.canarinho.test.watcher; import android.app.Activity; import android.support.design.widget.TextInputLayout; import android.widget.EditText; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.robolectric.RobolectricTestRunner; import org.robolectric.RuntimeEnvironment; import org.robolectric.annotation.Config; import org.robolectric.util.ActivityController; import br.com.concretesolutions.canarinho.sample.BuildConfig; import br.com.concretesolutions.canarinho.sample.ui.model.Watchers; import br.com.concretesolutions.canarinho.watcher.BoletoBancarioTextWatcher; import static org.hamcrest.Matchers.is; import static org.junit.Assert.assertThat; import static org.robolectric.Robolectric.buildActivity; @RunWith(RobolectricTestRunner.class) @Config(constants = BuildConfig.class, sdk = 22) public class BoletoTextWatcherTest { private BoletoBancarioTextWatcher watcher; private TextInputLayout textInputLayout; private EditText editText; @Before public void setUp() { final ActivityController<Activity> activityController = buildActivity(Activity.class); final Activity activity = activityController.create().get(); final Watchers.SampleEventoDeValidacao sampleEventoDeValidacao = new Watchers.SampleEventoDeValidacao(RuntimeEnvironment.application); activity.setContentView(textInputLayout = new TextInputLayout(activity)); textInputLayout.addView(editText = new EditText(activity)); activityController.start().resume().visible(); sampleEventoDeValidacao.setTextInputLayout(textInputLayout); editText.addTextChangedListener(watcher = new BoletoBancarioTextWatcher(sampleEventoDeValidacao)); } @Test public void typing_canValidateEmptyState() { editText.append(""); assertThat(editText.getText().toString(), is("")); assertThat(watcher.getResultadoParcial().isParcialmenteValido(), is(true)); } @Test public void typing_canValidateProperCharacters() { editText.append("1bas2nas3lamsd4"); assertThat(editText.getText().toString(), is("1234")); assertThat(watcher.getResultadoParcial().isParcialmenteValido(), is(true)); } @Test public void deleting_canEmptyEditText() { editText.append("1234"); assertThat(editText.getText().toString(), is("1234")); assertThat(watcher.getResultadoParcial().isParcialmenteValido(), is(true)); editText.getEditableText().clear(); assertThat(editText.getText().toString(), is("")); } // Teste de regressão @Test public void deleting_afterEmptyingEditTextItKeepsValidatingInput() { editText.append("1234"); assertThat(editText.getText().toString(), is("1234")); assertThat(watcher.getResultadoParcial().isParcialmenteValido(), is(true)); editText.getEditableText().clear(); assertThat(editText.getText().toString(), is("")); // menos caracteres que o tamanho inicial para saber qual máscara aplicar editText.append("$$"); assertThat(editText.getText().toString(), is("")); } }