Last active
July 25, 2020 00:53
-
-
Save catehstn/1781f98865125ab4e8c2bcfd30322243 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package co.ortatech.showandhide.ui.activity; | |
import android.app.Activity; | |
import android.app.Instrumentation; | |
import android.content.Intent; | |
import android.net.Uri; | |
import android.support.test.InstrumentationRegistry; | |
import android.support.test.espresso.intent.Intents; | |
import android.support.test.espresso.intent.rule.IntentsTestRule; | |
import android.support.test.runner.AndroidJUnit4; | |
import android.test.suitebuilder.annotation.SmallTest; | |
import org.junit.Before; | |
import org.junit.Rule; | |
import org.junit.Test; | |
import org.junit.runner.RunWith; | |
import javax.inject.Inject; | |
import co.ortatech.showandhide.R; | |
import co.ortatech.showandhide.application.ShowAndHideApplication; | |
import co.ortatech.showandhide.dagger.DaggerShowAndHideTestComponent; | |
import co.ortatech.showandhide.dagger.MockFileUtilitiesModule; | |
import co.ortatech.showandhide.dagger.MockImageProcessorModule; | |
import co.ortatech.showandhide.dagger.ShowAndHideTestComponent; | |
import co.ortatech.showandhide.model.imageprocessor.ImageProcessor; | |
import co.ortatech.showandhide.utilities.FileUtilities; | |
import static android.support.test.espresso.Espresso.onView; | |
import static android.support.test.espresso.action.ViewActions.click; | |
import static android.support.test.espresso.assertion.ViewAssertions.matches; | |
import static android.support.test.espresso.intent.Intents.intended; | |
import static android.support.test.espresso.intent.Intents.intending; | |
import static android.support.test.espresso.intent.matcher.IntentMatchers.hasComponent; | |
import static android.support.test.espresso.intent.matcher.IntentMatchers.toPackage; | |
import static android.support.test.espresso.matcher.ViewMatchers.withId; | |
import static android.support.test.espresso.matcher.ViewMatchers.withText; | |
import static org.mockito.Mockito.never; | |
import static org.mockito.Mockito.stub; | |
import static org.mockito.Mockito.verify; | |
@RunWith(AndroidJUnit4.class) | |
@SmallTest | |
public class HomeActivityTest { | |
@Inject FileUtilities fileUtilities; | |
@Inject ImageProcessor imageProcessor; | |
private static class HomeActivityTestRule extends IntentsTestRule { | |
private HomeActivityTestRule() { | |
super(HomeActivity.class); | |
} | |
@Override public void beforeActivityLaunched() { | |
Instrumentation instrumentation = InstrumentationRegistry.getInstrumentation(); | |
ShowAndHideApplication app = | |
(ShowAndHideApplication) instrumentation.getTargetContext().getApplicationContext(); | |
ShowAndHideTestComponent component = DaggerShowAndHideTestComponent.builder() | |
.mockFileUtilitiesModule(new MockFileUtilitiesModule()) | |
.mockImageProcessorModule(new MockImageProcessorModule()) | |
.build(); | |
app.setComponent(component); | |
} | |
} | |
@Rule | |
public IntentsTestRule<HomeActivity> intentRule = new HomeActivityTestRule(); | |
@Before | |
public void setUp() { | |
// TODO(cate): This is kind of hideous. | |
ShowAndHideApplication application = | |
(ShowAndHideApplication) intentRule.getActivity().getApplication(); | |
ShowAndHideTestComponent component = (ShowAndHideTestComponent) application.component(); | |
component.inject(this); | |
} | |
@Test | |
public void testLaunchActivity() { | |
onView(withId(R.id.home_camera_button)).check(matches(withText("Camera"))); | |
onView(withId(R.id.home_gallery_button)).check(matches(withText("Gallery"))); | |
onView(withId(R.id.home_inspire_button)).check(matches(withText("Inspire"))); | |
} | |
@Test | |
public void testTapCameraButtonAndReturnOK() { | |
// Uri needed to launch the Camera intent. | |
Uri uri = Uri.parse("uri_string"); | |
stub(fileUtilities.getOutputMediaFileUri()).toReturn(uri); | |
// Build a result to return when the activity is launched. | |
Intent resultData = new Intent(); | |
Instrumentation.ActivityResult result = | |
new Instrumentation.ActivityResult(Activity.RESULT_OK, resultData); | |
// Stub result for camera intent. | |
intending(toPackage("com.android.camera")).respondWith(result); | |
onView(withId(R.id.home_camera_button)).check(matches(withText("Camera"))); | |
onView(withId(R.id.home_camera_button)).perform(click()); | |
// Check image processor is reset. | |
verify(imageProcessor).resetOriginalImage(); | |
// New activity should be launched | |
intended(hasComponent(ImageEditingActivity.class.getName())); | |
intended(toPackage("com.android.camera")); | |
Intents.assertNoUnverifiedIntents(); | |
} | |
@Test | |
public void testTapCameraButtonAndCancel() { | |
// Uri needed to launch the Camera intent. | |
Uri uri = Uri.parse("uri_string"); | |
stub(fileUtilities.getOutputMediaFileUri()).toReturn(uri); | |
// Build a result to return when the activity is launched. | |
Intent resultData = new Intent(); | |
Instrumentation.ActivityResult result = | |
new Instrumentation.ActivityResult(Activity.RESULT_CANCELED, resultData); | |
// Stub result for camera intent. | |
intending(toPackage("com.android.camera")).respondWith(result); | |
onView(withId(R.id.home_camera_button)).check(matches(withText("Camera"))); | |
onView(withId(R.id.home_camera_button)).perform(click()); | |
// Check image processor is not reset. | |
verify(imageProcessor, never()).resetOriginalImage(); | |
intended(toPackage("com.android.camera")); | |
Intents.assertNoUnverifiedIntents(); | |
} | |
@Test | |
public void testTapGalleryButtonAndReturnOK() { | |
// Stub the Uri returned by the gallery intent. | |
Uri uri = Uri.parse("uri_string"); | |
// Build a result to return when the activity is launched. | |
Intent resultData = new Intent(); | |
resultData.setData(uri); | |
Instrumentation.ActivityResult result = | |
new Instrumentation.ActivityResult(Activity.RESULT_OK, resultData); | |
// Set up result stubbing when an intent sent to "choose photo" is seen. | |
intending(toPackage("com.android.gallery")).respondWith(result); | |
onView(withId(R.id.home_gallery_button)).check(matches(withText("Gallery"))); | |
onView(withId(R.id.home_gallery_button)).perform(click()); | |
// Check image processor is reset. | |
verify(imageProcessor).resetOriginalImage(); | |
// New activity should be launched | |
intended(hasComponent(ImageEditingActivity.class.getName())); | |
intended(toPackage("com.android.gallery")); | |
Intents.assertNoUnverifiedIntents(); | |
} | |
@Test | |
public void testTapGalleryButtonAndReturnCancel() { | |
// Build a result to return when the activity is launched. | |
Intent resultData = new Intent(); | |
Instrumentation.ActivityResult result = | |
new Instrumentation.ActivityResult(Activity.RESULT_CANCELED, resultData); | |
// Set up result stubbing when an intent sent to "choose photo" is seen. | |
intending(toPackage("com.android.gallery")).respondWith(result); | |
onView(withId(R.id.home_gallery_button)).check(matches(withText("Gallery"))); | |
onView(withId(R.id.home_gallery_button)).perform(click()); | |
// Check image processor is not reset. | |
verify(imageProcessor, never()).resetOriginalImage(); | |
intended(toPackage("com.android.gallery")); | |
Intents.assertNoUnverifiedIntents(); | |
} | |
@Test | |
public void testTapInspireButton() { | |
onView(withId(R.id.home_inspire_button)).check(matches(withText("Inspire"))); | |
onView(withId(R.id.home_inspire_button)).perform(click()); | |
// Capture web browser intent. | |
intended(toPackage("com.android.browser")); | |
Intents.assertNoUnverifiedIntents(); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment