Skip to content

Instantly share code, notes, and snippets.

@joshallenit
Last active December 1, 2021 02:01
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save joshallenit/04be926a7a31957817426d8d98d4af28 to your computer and use it in GitHub Desktop.
Save joshallenit/04be926a7a31957817426d8d98d4af28 to your computer and use it in GitHub Desktop.
Robolectric issue 5345 - code to reproduce crash - EditTextTest - NullPointerException at PopupWindow.getDecorViewLayoutParams
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.EditText
import androidx.fragment.app.Fragment
import androidx.fragment.app.testing.launchFragmentInContainer
import androidx.test.espresso.Espresso.onView
import androidx.test.espresso.action.ViewActions.typeText
import androidx.test.espresso.matcher.ViewMatchers.withClassName
import org.hamcrest.Matchers
import org.junit.Test
import org.junit.runner.RunWith
import org.robolectric.RobolectricTestRunner
/**
* Reproduces https://github.com/robolectric/robolectric/issues/5345
*/
@RunWith(RobolectricTestRunner::class)
class EditTextTest {
@Test
fun editText_whenClickedOnWithText_shouldNotCrash() {
val scenario = launchFragmentInContainer<TestFragment>()
scenario.onFragment {
val underTest = it.view!!
onView(withClassName(Matchers.equalTo(underTest::class.qualifiedName)))
.perform(typeText("Hello "))
.perform(typeText("c")) // CRASH
}
}
class TestFragment : Fragment() {
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
return EditText(requireContext())
}
}
}
/*
Error performing 'single click - At Coordinates: 179, 343 and precision: 16, 16' on view 'view.getClass().getName() matches: "android.widget.EditText"'.
androidx.test.espresso.PerformException: Error performing 'single click - At Coordinates: 179, 343 and precision: 16, 16' on view 'view.getClass().getName() matches: "android.widget.EditText"'.
at androidx.test.espresso.PerformException$Builder.build(PerformException.java:1)
at androidx.test.espresso.base.PerformExceptionHandler.handleSafely(PerformExceptionHandler.java:8)
at androidx.test.espresso.base.PerformExceptionHandler.handleSafely(PerformExceptionHandler.java:9)
at androidx.test.espresso.base.DefaultFailureHandler$TypedFailureHandler.handle(DefaultFailureHandler.java:4)
at androidx.test.espresso.base.DefaultFailureHandler.handle(DefaultFailureHandler.java:5)
at androidx.test.espresso.ViewInteraction.waitForAndHandleInteractionResults(ViewInteraction.java:8)
at androidx.test.espresso.ViewInteraction.desugaredPerform(ViewInteraction.java:11)
at androidx.test.espresso.ViewInteraction.perform(ViewInteraction.java:8)
at slack.services.slacktextview.EditTextTest.autoCompleteList_whenChannelClicked_setsText$lambda-0(SlackTextViewTest.kt:89)
at androidx.fragment.app.testing.FragmentScenario.onFragment$lambda-6(FragmentScenario.kt:397)
at androidx.test.core.app.ActivityScenario.lambda$onActivity$2$ActivityScenario(ActivityScenario.java:661)
at androidx.test.core.app.ActivityScenario$$Lambda$4.run(ActivityScenario.java:653)
at androidx.test.core.app.ActivityScenario.onActivity(ActivityScenario.java:671)
at androidx.fragment.app.testing.FragmentScenario.onFragment(FragmentScenario.kt:390)
at slack.services.slacktextview.EditTextTest.autoCompleteList_whenChannelClicked_setsText(SlackTextViewTest.kt:85)
at java.base@16.0.1/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base@16.0.1/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:78)
at java.base@16.0.1/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base@16.0.1/java.lang.reflect.Method.invoke(Method.java:567)
at app//org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:59)
at app//org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at app//org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:56)
at app//org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
at app//org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)
at app//org.robolectric.RobolectricTestRunner$HelperTestRunner$1.evaluate(RobolectricTestRunner.java:591)
at app//org.robolectric.internal.SandboxTestRunner$2.lambda$evaluate$0(SandboxTestRunner.java:274)
at app//org.robolectric.internal.bytecode.Sandbox.lambda$runOnMainThread$0(Sandbox.java:88)
at java.base@16.0.1/java.util.concurrent.FutureTask.run(FutureTask.java:264)
at java.base@16.0.1/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1130)
at java.base@16.0.1/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:630)
at java.base@16.0.1/java.lang.Thread.run(Thread.java:831)
Caused by: java.lang.NullPointerException: Cannot read field "mTextView" because "x0" is null
at android.widget.Editor.access$800(Editor.java:137)
at android.widget.Editor$InsertionHandleView.getCurrentCursorOffset(Editor.java:4696)
at android.widget.Editor$HandleView.updateDrawable(Editor.java:4215)
at android.widget.Editor$HandleView.__constructor__(Editor.java:4195)
at android.widget.Editor$HandleView.<init>(Editor.java)
at android.widget.Editor$InsertionHandleView.<init>(Editor.java)
at android.widget.Editor$InsertionPointCursorController.getHandle(Editor.java:5186)
at android.widget.Editor$InsertionPointCursorController.show(Editor.java:5161)
at android.widget.Editor.onTouchUpEvent(Editor.java:2230)
at android.widget.TextView.onTouchEvent(TextView.java:9711)
at android.view.View.dispatchTouchEvent(View.java:11721)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2983)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2650)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2983)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2650)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2983)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2650)
at com.android.internal.policy.DecorView.superDispatchTouchEvent(DecorView.java:445)
at com.android.internal.policy.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1828)
at android.app.Activity.dispatchTouchEvent(Activity.java:3292)
at com.android.internal.policy.DecorView.dispatchTouchEvent(DecorView.java:407)
at org.robolectric.android.internal.LocalUiController.injectMotionEvent(LocalUiController.java:41)
at androidx.test.espresso.base.UiControllerModule$EspressoUiControllerAdapter.injectMotionEvent(UiControllerModule.java:1)
at androidx.test.espresso.action.MotionEvents.sendUp(MotionEvents.java:7)
at androidx.test.espresso.action.MotionEvents.sendUp(MotionEvents.java:1)
at androidx.test.espresso.action.Tap.sendSingleTap(Tap.java:5)
at androidx.test.espresso.action.Tap.sendSingleTap$bridge(Tap.java)
at androidx.test.espresso.action.Tap$1.sendTap(Tap.java:3)
at androidx.test.espresso.action.GeneralClickAction.perform(GeneralClickAction.java:6)
at androidx.test.espresso.action.TypeTextAction.perform(TypeTextAction.java:7)
at androidx.test.espresso.ViewInteraction$SingleExecutionViewAction.perform(ViewInteraction.java:2)
at androidx.test.espresso.ViewInteraction.doPerform(ViewInteraction.java:25)
at androidx.test.espresso.ViewInteraction.doPerform$bridge(ViewInteraction.java)
at androidx.test.espresso.ViewInteraction$1.call(ViewInteraction.java:2)
at androidx.test.espresso.ViewInteraction$1.call(ViewInteraction.java:1)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
at android.os.Handler.handleCallback(Handler.java:789)
at android.os.Handler.dispatchMessage(Handler.java:98)
at org.robolectric.shadows.ShadowPausedLooper$IdlingRunnable.run(ShadowPausedLooper.java:332)
at org.robolectric.shadows.ShadowPausedLooper.executeOnLooper(ShadowPausedLooper.java:366)
at org.robolectric.shadows.ShadowPausedLooper.idle(ShadowPausedLooper.java:92)
at org.robolectric.android.internal.LocalControlledLooper.drainMainThreadUntilIdle(LocalControlledLooper.java:17)
at androidx.test.espresso.ViewInteraction.waitForAndHandleInteractionResults(ViewInteraction.java:1)
at androidx.test.espresso.ViewInteraction.desugaredPerform(ViewInteraction.java:11)
at androidx.test.espresso.ViewInteraction.perform(ViewInteraction.java:8)
at slack.services.slacktextview.EditTextTest.autoCompleteList_whenChannelClicked_setsText$lambda-0(SlackTextViewTest.kt:89)
at androidx.fragment.app.testing.FragmentScenario.onFragment$lambda-6(FragmentScenario.kt:397)
at androidx.test.core.app.ActivityScenario.lambda$onActivity$2$ActivityScenario(ActivityScenario.java:661)
at androidx.test.core.app.ActivityScenario$$Lambda$4.run(ActivityScenario.java:653)
at androidx.test.core.app.ActivityScenario.onActivity(ActivityScenario.java:671)
at androidx.fragment.app.testing.FragmentScenario.onFragment(FragmentScenario.kt:390)
at slack.services.slacktextview.EditTextTest.autoCompleteList_whenChannelClicked_setsText(SlackTextViewTest.kt:85)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:78)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
... 12 more
*/
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment