package github.nisrulz.sample.usingrobolectric;
import android.content.Intent;
import android.os.Build;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.robolectric.Robolectric;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.annotation.Config;
import org.robolectric.shadows.ShadowActivity;
import org.robolectric.shadows.ShadowIntent;
import static github.nisrulz.sample.usingrobolectric.support.Assert.assertViewIsVisible;
import static github.nisrulz.sample.usingrobolectric.support.ResourceLocator.getString;
import static github.nisrulz.sample.usingrobolectric.support.ViewLocator.getButton;
import static github.nisrulz.sample.usingrobolectric.support.ViewLocator.getEditText;
import static github.nisrulz.sample.usingrobolectric.support.ViewLocator.getTextView;
import static junit.framework.Assert.assertEquals;
import static org.hamcrest.CoreMatchers.equalTo;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertThat;
import static org.robolectric.Shadows.shadowOf;
import static org.robolectric.shadows.ShadowToast.getTextOfLatestToast;
@RunWith(RobolectricTestRunner.class)
@Config(constants = BuildConfig.class, sdk = Build.VERSION_CODES.LOLLIPOP)
public class MainActivityTest {
private MainActivity activity;
private Button hintbutton;
private Button loginButton;
@Before
public void setUp() {
activity = Robolectric.setupActivity(MainActivity.class);
hintbutton = getButton(activity, R.id.hintbutton);
loginButton = getButton(activity, R.id.loginbutton);
}
@Test
public void shouldNotBeNull() {
assertNotNull(activity);
}
@Test
public void shouldHaveTitle() throws Exception {
assertThat(activity.getTitle().toString(), equalTo(getString(R.string.app_name)));
}
@Test
public void shouldHaveWelcomeText() throws Exception {
TextView textView = getTextView(activity, R.id.textview);
assertViewIsVisible(textView);
assertThat(textView.getText().toString(), equalTo(getString(R.string.Welcome_text)));
}
@Test
public void shouldHaveNameEntry() throws Exception {
EditText nameEntry = getEditText(activity, R.id.nameentry);
assertViewIsVisible(nameEntry);
assertThat(nameEntry.getHint().toString(), equalTo(getString(R.string.NAME_ENTRY_HINT)));
}
@Test
public void shouldHaveLoginButton() throws Exception {
assertViewIsVisible(loginButton);
assertThat(loginButton.getText().toString(), equalTo(getString(R.string.LOGIN_BTN_TEXT)));
}
@Test
public void shouldHaveHintButton() throws Exception {
assertViewIsVisible(hintbutton);
assertThat(hintbutton.getText().toString(), equalTo(getString(R.string.HINT_BTN_TEXT)));
}
@Test
public void shouldShowHintWhenClicked() throws Exception {
hintbutton.performClick();
assertThat(getTextOfLatestToast(), equalTo(getString(R.string.HINT_TEXT)));
}
@Test
public void shouldLoginWhenClicked() throws Exception {
loginButton.performClick();
ShadowActivity shadowActivity = shadowOf(activity);
Intent intent = shadowActivity.getNextStartedActivity();
ShadowIntent shadowIntent = shadowOf(intent);
assertEquals(shadowIntent.getIntentClass().getSimpleName(),
SecondActivity.class.getSimpleName());
}
}