package com.tutosandroidfrance.espressosample;
import android.test.ActivityInstrumentationTestCase2;
import android.test.suitebuilder.annotation.LargeTest;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;
import org.hamcrest.Description;
import org.hamcrest.Matcher;
import org.hamcrest.TypeSafeMatcher;
import org.junit.Before;
import org.junit.Test;
import static android.support.test.espresso.Espresso.onView;
import static android.support.test.espresso.action.ViewActions.click;
import static android.support.test.espresso.action.ViewActions.typeText;
import static android.support.test.espresso.assertion.ViewAssertions.matches;
import static android.support.test.espresso.matcher.ViewMatchers.isAssignableFrom;
import static android.support.test.espresso.matcher.ViewMatchers.isDescendantOfA;
import static android.support.test.espresso.matcher.ViewMatchers.isDisplayed;
import static android.support.test.espresso.matcher.ViewMatchers.withClassName;
import static android.support.test.espresso.matcher.ViewMatchers.withId;
import static android.support.test.espresso.matcher.ViewMatchers.withText;
import static org.hamcrest.CoreMatchers.allOf;
import static org.hamcrest.CoreMatchers.isA;
import static org.hamcrest.core.IsNot.not;
/**
* Created by florentchampigny on 06/07/15.
*/
@LargeTest
public class MainActivityTest extends ActivityInstrumentationTestCase2<MainActivity> {
//on précise que l'on veux tester un MainActivity
public MainActivityTest() {
super(MainActivity.class);
}
@Before
public void setUp() throws Exception {
super.setUp();
//doit être appelé dans le setup
getActivity();
}
@Test
public void testContainsIntialViews() {
//je vais tester ici que l'EditText et le bouton LOGIN sont bien affichés
//mais que le TextView "Hello XXXX" n'est pas présent
onView(withId(R.id.editText)).check(matches(isDisplayed()));
onView(withText("LOGIN")).check(matches(isDisplayed()));
onView(withId(R.id.text)).check(matches(not(isDisplayed())));
}
//teste le comportement de l'écran si on appuie sur LOGIN sans avoir écrit de nom
@Test
public void testClickLogin_emptyText() {
//je vais cliquer sur LOGIN, mais sans avoir écrit de texte dans l'EditText
onView(withText("LOGIN")).perform(click());
//Ce qui ne devrait pas cacher le bouton LOGIN, ni afficher le "Hello XXXX"
onView(withText("LOGIN")).check(matches(isDisplayed()));
onView(withId(R.id.text)).check(matches(not(isDisplayed())));
}
@Test
public void testClickLogin_withText() {
//je vais écrire "florent" dans l'EditText
onView(withId(R.id.editText)).perform(typeText("florent"));
//puis clicker sur le bouton LOGIN
onView(withText("LOGIN")).perform(click());
//ce qui devrait faire disparaitre LOGIN et l'EditText
onView(withText("LOGIN")).check(matches(not(isDisplayed())));
onView(withId(R.id.editText)).check(matches(not(isDisplayed())));
//puis afficher "Hello florent"
onView(withId(R.id.text)).check(matches(allOf(isDisplayed(), withText("Hello florent"))));
}
}