[go: nahoru, domu]

Add PointerType to PointerInputChange verifications

When testing touch input injection, verify that the PointerType is
Touch.

Bug: 200135903
Test: ./gradlew compose:ui:ui-test:cC
Change-Id: Idd04f23fe0e0e1037e2ccdc91e0f5ba3d52f366a
diff --git a/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/gesturescope/SendClickTest.kt b/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/gesturescope/SendClickTest.kt
index b03eee1..45a48df 100644
--- a/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/gesturescope/SendClickTest.kt
+++ b/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/gesturescope/SendClickTest.kt
@@ -25,14 +25,14 @@
 import androidx.compose.ui.input.pointer.PointerInputModifier
 import androidx.compose.ui.input.pointer.changedToUp
 import androidx.compose.ui.test.ActivityWithActionBar
-import androidx.test.filters.MediumTest
-import androidx.compose.ui.test.junit4.ComposeTestRule
 import androidx.compose.ui.test.click
+import androidx.compose.ui.test.junit4.ComposeTestRule
 import androidx.compose.ui.test.junit4.createAndroidComposeRule
 import androidx.compose.ui.test.onNodeWithTag
 import androidx.compose.ui.test.performGesture
 import androidx.compose.ui.test.util.ClickableTestBox
 import androidx.compose.ui.test.util.RecordingFilter
+import androidx.test.filters.MediumTest
 import com.google.common.truth.Truth.assertThat
 import org.junit.Rule
 import org.junit.Test
@@ -76,8 +76,8 @@
         private val componentIndex: Int,
         private val recordedClicks: MutableList<ClickData>
     ) : PointerInputModifier {
-        override val pointerInputFilter: PointerInputFilter = RecordingFilter { changes ->
-            changes.forEach {
+        override val pointerInputFilter: PointerInputFilter = RecordingFilter { event ->
+            event.changes.forEach {
                 if (it.changedToUp()) {
                     recordedClicks.add(ClickData(componentIndex, it.position))
                 }
diff --git a/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/gesturescope/SendSwipeTest.kt b/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/gesturescope/SendSwipeTest.kt
index a4a22a9..ec61d21 100644
--- a/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/gesturescope/SendSwipeTest.kt
+++ b/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/gesturescope/SendSwipeTest.kt
@@ -29,6 +29,10 @@
 import androidx.compose.ui.Alignment
 import androidx.compose.ui.Modifier
 import androidx.compose.ui.geometry.Offset
+import androidx.compose.ui.input.pointer.PointerEventType.Companion.Move
+import androidx.compose.ui.input.pointer.PointerEventType.Companion.Press
+import androidx.compose.ui.input.pointer.PointerEventType.Companion.Release
+import androidx.compose.ui.input.pointer.PointerType.Companion.Touch
 import androidx.compose.ui.platform.LocalDensity
 import androidx.compose.ui.platform.testTag
 import androidx.compose.ui.test.ExperimentalTestApi
@@ -262,15 +266,15 @@
                 assertThat(events.size).isEqualTo(3)
 
                 // DOWN is in top left corner (0, 0)
-                events[0].verify(null, null, true, Offset(0f, 0f))
+                events[0].verify(null, null, true, Offset(0f, 0f), Touch, Press)
 
                 val t = events[0].timestamp + 1
                 val pointerId = events[0].id
 
                 // MOVE is in bottom right corner (box is 100x100, so corner is (99, 99))
-                events[1].verify(t, pointerId, true, Offset(99f, 99f))
+                events[1].verify(t, pointerId, true, Offset(99f, 99f), Touch, Move)
                 // UP is also in bottom right corner
-                events[2].verify(t, pointerId, false, Offset(99f, 99f))
+                events[2].verify(t, pointerId, false, Offset(99f, 99f), Touch, Release)
             }
         }
     }
diff --git a/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/injectionscope/touch/ClickTest.kt b/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/injectionscope/touch/ClickTest.kt
index fe8a5a2..0bf88db 100644
--- a/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/injectionscope/touch/ClickTest.kt
+++ b/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/injectionscope/touch/ClickTest.kt
@@ -20,6 +20,9 @@
 import androidx.compose.ui.Modifier
 import androidx.compose.ui.geometry.Offset
 import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.input.pointer.PointerEventType.Companion.Press
+import androidx.compose.ui.input.pointer.PointerEventType.Companion.Release
+import androidx.compose.ui.input.pointer.PointerType.Companion.Touch
 import androidx.compose.ui.test.InputDispatcher.Companion.eventPeriodMillis
 import androidx.compose.ui.test.TouchInjectionScope
 import androidx.compose.ui.test.click
@@ -101,8 +104,8 @@
         val t0 = events[0].timestamp
         val id = events[0].id
 
-        events[0].verify(t0 + 0, id, true, position)
-        events[1].verify(t0 + eventPeriodMillis, id, false, position)
+        events[0].verify(t0 + 0, id, true, position, Touch, Press)
+        events[1].verify(t0 + eventPeriodMillis, id, false, position, Touch, Release)
     }
 
     private fun ComposeTestRule.click(tag: String) {
diff --git a/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/injectionscope/touch/DoubleClickTest.kt b/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/injectionscope/touch/DoubleClickTest.kt
index ead50a3..9aca1e3 100644
--- a/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/injectionscope/touch/DoubleClickTest.kt
+++ b/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/injectionscope/touch/DoubleClickTest.kt
@@ -21,6 +21,9 @@
 import androidx.compose.testutils.WithViewConfiguration
 import androidx.compose.ui.Modifier
 import androidx.compose.ui.geometry.Offset
+import androidx.compose.ui.input.pointer.PointerEventType.Companion.Press
+import androidx.compose.ui.input.pointer.PointerEventType.Companion.Release
+import androidx.compose.ui.input.pointer.PointerType.Companion.Touch
 import androidx.compose.ui.input.pointer.pointerInput
 import androidx.compose.ui.test.InputDispatcher.Companion.eventPeriodMillis
 import androidx.compose.ui.test.TouchInjectionScope
@@ -123,13 +126,13 @@
         val t0 = events[0].timestamp
         val id0 = events[0].id
 
-        events[0].verify(t0 + 0, id0, true, position)
-        events[1].verify(t0 + eventPeriodMillis, id0, false, position)
+        events[0].verify(t0 + 0, id0, true, position, Touch, Press)
+        events[1].verify(t0 + eventPeriodMillis, id0, false, position, Touch, Release)
 
         val t1 = events[1].timestamp + expectedDelay
         val id1 = events[2].id
 
-        events[2].verify(t1 + 0, id1, true, position)
-        events[3].verify(t1 + eventPeriodMillis, id1, false, position)
+        events[2].verify(t1 + 0, id1, true, position, Touch, Press)
+        events[3].verify(t1 + eventPeriodMillis, id1, false, position, Touch, Release)
     }
 }
diff --git a/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/injectionscope/touch/DownTest.kt b/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/injectionscope/touch/DownTest.kt
index 2acb9c6..51dbaad 100644
--- a/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/injectionscope/touch/DownTest.kt
+++ b/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/injectionscope/touch/DownTest.kt
@@ -19,6 +19,8 @@
 import android.os.SystemClock.sleep
 import androidx.compose.testutils.expectError
 import androidx.compose.ui.geometry.Offset
+import androidx.compose.ui.input.pointer.PointerEventType.Companion.Press
+import androidx.compose.ui.input.pointer.PointerType.Companion.Touch
 import androidx.compose.ui.test.TouchInjectionScope
 import androidx.compose.ui.test.injectionscope.touch.Common.performTouchInput
 import androidx.compose.ui.test.junit4.createComposeRule
@@ -66,7 +68,7 @@
                 assertTimestampsAreIncreasing()
                 assertThat(events).hasSize(1)
                 assertThat(events[0].pointerCount).isEqualTo(1)
-                events[0].getPointer(0).verify(null, null, true, position1)
+                events[0].getPointer(0).verify(null, null, true, position1, Touch, Press)
             }
         }
     }
@@ -85,14 +87,14 @@
                 assertThat(events).hasSize(2)
 
                 assertThat(events[0].pointerCount).isEqualTo(1)
-                events[0].getPointer(0).verify(null, null, true, position1)
+                events[0].getPointer(0).verify(null, null, true, position1, Touch, Press)
 
                 val t = events[0].getPointer(0).timestamp
                 val pointerId1 = events[0].getPointer(0).id
 
                 assertThat(events[1].pointerCount).isEqualTo(2)
-                events[1].getPointer(0).verify(t, pointerId1, true, position1)
-                events[1].getPointer(1).verify(t, null, true, position2)
+                events[1].getPointer(0).verify(t, pointerId1, true, position1, Touch, Press)
+                events[1].getPointer(1).verify(t, null, true, position2, Touch, Press)
 
                 val pointerId2 = events[1].getPointer(1).id
                 assertThat(pointerId2).isNotEqualTo(pointerId1)
diff --git a/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/injectionscope/touch/LongClickTest.kt b/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/injectionscope/touch/LongClickTest.kt
index 1263df9..6ba723d 100644
--- a/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/injectionscope/touch/LongClickTest.kt
+++ b/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/injectionscope/touch/LongClickTest.kt
@@ -25,6 +25,10 @@
 import androidx.compose.ui.Alignment
 import androidx.compose.ui.Modifier
 import androidx.compose.ui.geometry.Offset
+import androidx.compose.ui.input.pointer.PointerEventType.Companion.Move
+import androidx.compose.ui.input.pointer.PointerEventType.Companion.Press
+import androidx.compose.ui.input.pointer.PointerEventType.Companion.Release
+import androidx.compose.ui.input.pointer.PointerType.Companion.Touch
 import androidx.compose.ui.input.pointer.pointerInput
 import androidx.compose.ui.test.InputDispatcher.Companion.eventPeriodMillis
 import androidx.compose.ui.test.TouchInjectionScope
@@ -138,8 +142,9 @@
         events.dropLast(1).forEachIndexed { i, event ->
             // Don't check the timestamp
             val t = t0 + (expectedDuration * i / steps.toDouble()).roundToLong()
-            event.verify(t, id, true, position)
+            val type = if (i == 0) Press else Move
+            event.verify(t, id, true, position, Touch, type)
         }
-        events.last().verify(t0 + expectedDuration, id, false, position)
+        events.last().verify(t0 + expectedDuration, id, false, position, Touch, Release)
     }
 }
diff --git a/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/injectionscope/touch/MoveByTest.kt b/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/injectionscope/touch/MoveByTest.kt
index 17b77cd..c930148 100644
--- a/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/injectionscope/touch/MoveByTest.kt
+++ b/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/injectionscope/touch/MoveByTest.kt
@@ -19,6 +19,8 @@
 import android.os.SystemClock.sleep
 import androidx.compose.testutils.expectError
 import androidx.compose.ui.geometry.Offset
+import androidx.compose.ui.input.pointer.PointerEventType.Companion.Move
+import androidx.compose.ui.input.pointer.PointerType.Companion.Touch
 import androidx.compose.ui.test.InputDispatcher.Companion.eventPeriodMillis
 import androidx.compose.ui.test.TouchInjectionScope
 import androidx.compose.ui.test.injectionscope.touch.Common.performTouchInput
@@ -76,7 +78,8 @@
 
                 t += eventPeriodMillis
                 assertThat(events[1].pointerCount).isEqualTo(1)
-                events[1].getPointer(0).verify(t, pointerId, true, downPosition1 + delta1)
+                events[1].getPointer(0)
+                    .verify(t, pointerId, true, downPosition1 + delta1, Touch, Move)
             }
         }
     }
@@ -101,13 +104,17 @@
 
                 t += eventPeriodMillis
                 assertThat(events[2].pointerCount).isEqualTo(2)
-                events[2].getPointer(0).verify(t, pointerId1, true, downPosition1 + delta1)
-                events[2].getPointer(1).verify(t, pointerId2, true, downPosition2)
+                events[2].getPointer(0)
+                    .verify(t, pointerId1, true, downPosition1 + delta1, Touch, Move)
+                events[2].getPointer(1)
+                    .verify(t, pointerId2, true, downPosition2, Touch, Move)
 
                 t += eventPeriodMillis
                 assertThat(events[3].pointerCount).isEqualTo(2)
-                events[3].getPointer(0).verify(t, pointerId1, true, downPosition1 + delta1)
-                events[3].getPointer(1).verify(t, pointerId2, true, downPosition2 + delta2)
+                events[3].getPointer(0)
+                    .verify(t, pointerId1, true, downPosition1 + delta1, Touch, Move)
+                events[3].getPointer(1)
+                    .verify(t, pointerId2, true, downPosition2 + delta2, Touch, Move)
             }
         }
     }
@@ -134,8 +141,10 @@
 
                 t += eventPeriodMillis
                 assertThat(events[2].pointerCount).isEqualTo(2)
-                events[2].getPointer(0).verify(t, pointerId1, true, downPosition1 + delta1)
-                events[2].getPointer(1).verify(t, pointerId2, true, downPosition2 + delta2)
+                events[2].getPointer(0)
+                    .verify(t, pointerId1, true, downPosition1 + delta1, Touch, Move)
+                events[2].getPointer(1)
+                    .verify(t, pointerId2, true, downPosition2 + delta2, Touch, Move)
             }
         }
     }
diff --git a/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/injectionscope/touch/MoveToTest.kt b/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/injectionscope/touch/MoveToTest.kt
index cd5158d..442c435 100644
--- a/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/injectionscope/touch/MoveToTest.kt
+++ b/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/injectionscope/touch/MoveToTest.kt
@@ -19,6 +19,8 @@
 import android.os.SystemClock.sleep
 import androidx.compose.testutils.expectError
 import androidx.compose.ui.geometry.Offset
+import androidx.compose.ui.input.pointer.PointerEventType.Companion.Move
+import androidx.compose.ui.input.pointer.PointerType.Companion.Touch
 import androidx.compose.ui.test.InputDispatcher.Companion.eventPeriodMillis
 import androidx.compose.ui.test.TouchInjectionScope
 import androidx.compose.ui.test.injectionscope.touch.Common.performTouchInput
@@ -76,7 +78,7 @@
 
                 t += eventPeriodMillis
                 assertThat(events[1].pointerCount).isEqualTo(1)
-                events[1].getPointer(0).verify(t, pointerId, true, moveToPosition1)
+                events[1].getPointer(0).verify(t, pointerId, true, moveToPosition1, Touch, Move)
             }
         }
     }
@@ -101,13 +103,13 @@
 
                 t += eventPeriodMillis
                 assertThat(events[2].pointerCount).isEqualTo(2)
-                events[2].getPointer(0).verify(t, pointerId1, true, moveToPosition1)
-                events[2].getPointer(1).verify(t, pointerId2, true, downPosition2)
+                events[2].getPointer(0).verify(t, pointerId1, true, moveToPosition1, Touch, Move)
+                events[2].getPointer(1).verify(t, pointerId2, true, downPosition2, Touch, Move)
 
                 t += eventPeriodMillis
                 assertThat(events[3].pointerCount).isEqualTo(2)
-                events[3].getPointer(0).verify(t, pointerId1, true, moveToPosition1)
-                events[3].getPointer(1).verify(t, pointerId2, true, moveToPosition2)
+                events[3].getPointer(0).verify(t, pointerId1, true, moveToPosition1, Touch, Move)
+                events[3].getPointer(1).verify(t, pointerId2, true, moveToPosition2, Touch, Move)
             }
         }
     }
@@ -134,8 +136,8 @@
 
                 t += eventPeriodMillis
                 assertThat(events[2].pointerCount).isEqualTo(2)
-                events[2].getPointer(0).verify(t, pointerId1, true, moveToPosition1)
-                events[2].getPointer(1).verify(t, pointerId2, true, moveToPosition2)
+                events[2].getPointer(0).verify(t, pointerId1, true, moveToPosition1, Touch, Move)
+                events[2].getPointer(1).verify(t, pointerId2, true, moveToPosition2, Touch, Move)
             }
         }
     }
diff --git a/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/injectionscope/touch/SwipeStartEndTest.kt b/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/injectionscope/touch/SwipeStartEndTest.kt
index 6ed4d44..0f8f0b6 100644
--- a/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/injectionscope/touch/SwipeStartEndTest.kt
+++ b/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/injectionscope/touch/SwipeStartEndTest.kt
@@ -20,6 +20,9 @@
 import androidx.compose.foundation.layout.fillMaxSize
 import androidx.compose.ui.Modifier
 import androidx.compose.ui.geometry.Offset
+import androidx.compose.ui.input.pointer.PointerEventType.Companion.Press
+import androidx.compose.ui.input.pointer.PointerEventType.Companion.Release
+import androidx.compose.ui.input.pointer.PointerType.Companion.Touch
 import androidx.compose.ui.test.TouchInjectionScope
 import androidx.compose.ui.test.junit4.createComposeRule
 import androidx.compose.ui.test.onNodeWithTag
@@ -91,9 +94,9 @@
                 val id = events[0].id
 
                 // We start at `start`
-                events.first().verify(t0, id, true, start)
+                events.first().verify(t0, id, true, start, Touch, Press)
                 // We end at `end`
-                events.last().verify(t0 + config.duration, id, false, end)
+                events.last().verify(t0 + config.duration, id, false, end, Touch, Release)
                 // All events are evenly spaced in time
                 downEvents.hasSameTimeBetweenEvents()
                 // And the distance between each event is the same
diff --git a/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/injectionscope/touch/UpTest.kt b/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/injectionscope/touch/UpTest.kt
index cba8992..3d686c0 100644
--- a/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/injectionscope/touch/UpTest.kt
+++ b/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/injectionscope/touch/UpTest.kt
@@ -19,6 +19,8 @@
 import android.os.SystemClock.sleep
 import androidx.compose.testutils.expectError
 import androidx.compose.ui.geometry.Offset
+import androidx.compose.ui.input.pointer.PointerEventType.Companion.Release
+import androidx.compose.ui.input.pointer.PointerType.Companion.Touch
 import androidx.compose.ui.test.TouchInjectionScope
 import androidx.compose.ui.test.injectionscope.touch.Common.performTouchInput
 import androidx.compose.ui.test.junit4.createComposeRule
@@ -74,7 +76,7 @@
                 val pointerId = events[0].getPointer(0).id
 
                 assertThat(events[1].pointerCount).isEqualTo(1)
-                events[1].getPointer(0).verify(t, pointerId, false, downPosition1)
+                events[1].getPointer(0).verify(t, pointerId, false, downPosition1, Touch, Release)
             }
         }
 
@@ -101,11 +103,11 @@
                 val pointerId2 = events[1].getPointer(1).id
 
                 assertThat(events[2].pointerCount).isEqualTo(2)
-                events[2].getPointer(0).verify(t, pointerId1, false, downPosition1)
-                events[2].getPointer(1).verify(t, pointerId2, true, downPosition2)
+                events[2].getPointer(0).verify(t, pointerId1, false, downPosition1, Touch, Release)
+                events[2].getPointer(1).verify(t, pointerId2, true, downPosition2, Touch, Release)
 
                 assertThat(events[3].pointerCount).isEqualTo(1)
-                events[3].getPointer(0).verify(t, pointerId2, false, downPosition2)
+                events[3].getPointer(0).verify(t, pointerId2, false, downPosition2, Touch, Release)
             }
         }
 
diff --git a/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/partialgesturescope/SendDownTest.kt b/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/partialgesturescope/SendDownTest.kt
index 734957e..e370a28 100644
--- a/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/partialgesturescope/SendDownTest.kt
+++ b/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/partialgesturescope/SendDownTest.kt
@@ -19,6 +19,8 @@
 import android.os.SystemClock.sleep
 import androidx.compose.testutils.expectError
 import androidx.compose.ui.geometry.Offset
+import androidx.compose.ui.input.pointer.PointerEventType.Companion.Press
+import androidx.compose.ui.input.pointer.PointerType.Companion.Touch
 import androidx.compose.ui.test.down
 import androidx.compose.ui.test.junit4.createComposeRule
 import androidx.compose.ui.test.partialgesturescope.Common.partialGesture
@@ -67,7 +69,7 @@
                 assertTimestampsAreIncreasing()
                 assertThat(events).hasSize(1)
                 assertThat(events[0].pointerCount).isEqualTo(1)
-                events[0].getPointer(0).verify(null, null, true, position1)
+                events[0].getPointer(0).verify(null, null, true, position1, Touch, Press)
             }
         }
     }
@@ -87,14 +89,14 @@
                 assertThat(events).hasSize(2)
 
                 assertThat(events[0].pointerCount).isEqualTo(1)
-                events[0].getPointer(0).verify(null, null, true, position1)
+                events[0].getPointer(0).verify(null, null, true, position1, Touch, Press)
 
                 val t = events[0].getPointer(0).timestamp
                 val pointerId1 = events[0].getPointer(0).id
 
                 assertThat(events[1].pointerCount).isEqualTo(2)
-                events[1].getPointer(0).verify(t, pointerId1, true, position1)
-                events[1].getPointer(1).verify(t, null, true, position2)
+                events[1].getPointer(0).verify(t, pointerId1, true, position1, Touch, Press)
+                events[1].getPointer(1).verify(t, null, true, position2, Touch, Press)
 
                 val pointerId2 = events[1].getPointer(1).id
                 assertThat(pointerId2).isNotEqualTo(pointerId1)
diff --git a/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/partialgesturescope/SendMoveByTest.kt b/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/partialgesturescope/SendMoveByTest.kt
index e8b7aae..782acf1 100644
--- a/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/partialgesturescope/SendMoveByTest.kt
+++ b/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/partialgesturescope/SendMoveByTest.kt
@@ -19,6 +19,8 @@
 import android.os.SystemClock.sleep
 import androidx.compose.testutils.expectError
 import androidx.compose.ui.geometry.Offset
+import androidx.compose.ui.input.pointer.PointerEventType.Companion.Move
+import androidx.compose.ui.input.pointer.PointerType.Companion.Touch
 import androidx.compose.ui.test.InputDispatcher.Companion.eventPeriodMillis
 import androidx.compose.ui.test.cancel
 import androidx.compose.ui.test.down
@@ -82,7 +84,8 @@
 
                 t += eventPeriodMillis
                 assertThat(events[1].pointerCount).isEqualTo(1)
-                events[1].getPointer(0).verify(t, pointerId, true, downPosition1 + delta1)
+                events[1].getPointer(0)
+                    .verify(t, pointerId, true, downPosition1 + delta1, Touch, Move)
             }
         }
     }
@@ -108,13 +111,17 @@
 
                 t += eventPeriodMillis
                 assertThat(events[2].pointerCount).isEqualTo(2)
-                events[2].getPointer(0).verify(t, pointerId1, true, downPosition1 + delta1)
-                events[2].getPointer(1).verify(t, pointerId2, true, downPosition2)
+                events[2].getPointer(0)
+                    .verify(t, pointerId1, true, downPosition1 + delta1, Touch, Move)
+                events[2].getPointer(1)
+                    .verify(t, pointerId2, true, downPosition2, Touch, Move)
 
                 t += eventPeriodMillis
                 assertThat(events[3].pointerCount).isEqualTo(2)
-                events[3].getPointer(0).verify(t, pointerId1, true, downPosition1 + delta1)
-                events[3].getPointer(1).verify(t, pointerId2, true, downPosition2 + delta2)
+                events[3].getPointer(0)
+                    .verify(t, pointerId1, true, downPosition1 + delta1, Touch, Move)
+                events[3].getPointer(1)
+                    .verify(t, pointerId2, true, downPosition2 + delta2, Touch, Move)
             }
         }
     }
@@ -142,8 +149,10 @@
 
                 t += eventPeriodMillis
                 assertThat(events[2].pointerCount).isEqualTo(2)
-                events[2].getPointer(0).verify(t, pointerId1, true, downPosition1 + delta1)
-                events[2].getPointer(1).verify(t, pointerId2, true, downPosition2 + delta2)
+                events[2].getPointer(0)
+                    .verify(t, pointerId1, true, downPosition1 + delta1, Touch, Move)
+                events[2].getPointer(1)
+                    .verify(t, pointerId2, true, downPosition2 + delta2, Touch, Move)
             }
         }
     }
diff --git a/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/partialgesturescope/SendMoveToTest.kt b/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/partialgesturescope/SendMoveToTest.kt
index 726127c..0cdeec6 100644
--- a/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/partialgesturescope/SendMoveToTest.kt
+++ b/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/partialgesturescope/SendMoveToTest.kt
@@ -19,6 +19,8 @@
 import android.os.SystemClock.sleep
 import androidx.compose.testutils.expectError
 import androidx.compose.ui.geometry.Offset
+import androidx.compose.ui.input.pointer.PointerEventType.Companion.Move
+import androidx.compose.ui.input.pointer.PointerType.Companion.Touch
 import androidx.compose.ui.test.InputDispatcher.Companion.eventPeriodMillis
 import androidx.compose.ui.test.cancel
 import androidx.compose.ui.test.down
@@ -82,7 +84,7 @@
 
                 t += eventPeriodMillis
                 assertThat(events[1].pointerCount).isEqualTo(1)
-                events[1].getPointer(0).verify(t, pointerId, true, moveToPosition1)
+                events[1].getPointer(0).verify(t, pointerId, true, moveToPosition1, Touch, Move)
             }
         }
     }
@@ -108,13 +110,13 @@
 
                 t += eventPeriodMillis
                 assertThat(events[2].pointerCount).isEqualTo(2)
-                events[2].getPointer(0).verify(t, pointerId1, true, moveToPosition1)
-                events[2].getPointer(1).verify(t, pointerId2, true, downPosition2)
+                events[2].getPointer(0).verify(t, pointerId1, true, moveToPosition1, Touch, Move)
+                events[2].getPointer(1).verify(t, pointerId2, true, downPosition2, Touch, Move)
 
                 t += eventPeriodMillis
                 assertThat(events[3].pointerCount).isEqualTo(2)
-                events[3].getPointer(0).verify(t, pointerId1, true, moveToPosition1)
-                events[3].getPointer(1).verify(t, pointerId2, true, moveToPosition2)
+                events[3].getPointer(0).verify(t, pointerId1, true, moveToPosition1, Touch, Move)
+                events[3].getPointer(1).verify(t, pointerId2, true, moveToPosition2, Touch, Move)
             }
         }
     }
@@ -142,8 +144,8 @@
 
                 t += eventPeriodMillis
                 assertThat(events[2].pointerCount).isEqualTo(2)
-                events[2].getPointer(0).verify(t, pointerId1, true, moveToPosition1)
-                events[2].getPointer(1).verify(t, pointerId2, true, moveToPosition2)
+                events[2].getPointer(0).verify(t, pointerId1, true, moveToPosition1, Touch, Move)
+                events[2].getPointer(1).verify(t, pointerId2, true, moveToPosition2, Touch, Move)
             }
         }
     }
diff --git a/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/partialgesturescope/SendUpTest.kt b/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/partialgesturescope/SendUpTest.kt
index 1b3de68..8329781 100644
--- a/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/partialgesturescope/SendUpTest.kt
+++ b/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/partialgesturescope/SendUpTest.kt
@@ -19,6 +19,8 @@
 import android.os.SystemClock.sleep
 import androidx.compose.testutils.expectError
 import androidx.compose.ui.geometry.Offset
+import androidx.compose.ui.input.pointer.PointerEventType.Companion.Release
+import androidx.compose.ui.input.pointer.PointerType.Companion.Touch
 import androidx.compose.ui.test.cancel
 import androidx.compose.ui.test.down
 import androidx.compose.ui.test.junit4.createComposeRule
@@ -78,7 +80,7 @@
                 val pointerId = events[0].getPointer(0).id
 
                 assertThat(events[1].pointerCount).isEqualTo(1)
-                events[1].getPointer(0).verify(t, pointerId, false, downPosition1)
+                events[1].getPointer(0).verify(t, pointerId, false, downPosition1, Touch, Release)
             }
         }
 
@@ -105,11 +107,11 @@
                 val pointerId2 = events[1].getPointer(1).id
 
                 assertThat(events[2].pointerCount).isEqualTo(2)
-                events[2].getPointer(0).verify(t, pointerId1, false, downPosition1)
-                events[2].getPointer(1).verify(t, pointerId2, true, downPosition2)
+                events[2].getPointer(0).verify(t, pointerId1, false, downPosition1, Touch, Release)
+                events[2].getPointer(1).verify(t, pointerId2, true, downPosition2, Touch, Release)
 
                 assertThat(events[3].pointerCount).isEqualTo(1)
-                events[3].getPointer(0).verify(t, pointerId2, false, downPosition2)
+                events[3].getPointer(0).verify(t, pointerId2, false, downPosition2, Touch, Release)
             }
         }
 
diff --git a/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/util/PointerInputs.kt b/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/util/PointerInputs.kt
index 7495078..be32c31 100644
--- a/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/util/PointerInputs.kt
+++ b/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/util/PointerInputs.kt
@@ -17,13 +17,19 @@
 package androidx.compose.ui.test.util
 
 import androidx.compose.ui.geometry.Offset
-import androidx.compose.ui.input.pointer.util.VelocityTracker
+import androidx.compose.ui.input.pointer.PointerButtons
 import androidx.compose.ui.input.pointer.PointerEvent
 import androidx.compose.ui.input.pointer.PointerEventPass
+import androidx.compose.ui.input.pointer.PointerEventType
+import androidx.compose.ui.input.pointer.PointerEventType.Companion.Move
+import androidx.compose.ui.input.pointer.PointerEventType.Companion.Release
 import androidx.compose.ui.input.pointer.PointerId
 import androidx.compose.ui.input.pointer.PointerInputChange
 import androidx.compose.ui.input.pointer.PointerInputFilter
 import androidx.compose.ui.input.pointer.PointerInputModifier
+import androidx.compose.ui.input.pointer.PointerKeyboardModifiers
+import androidx.compose.ui.input.pointer.PointerType
+import androidx.compose.ui.input.pointer.util.VelocityTracker
 import androidx.compose.ui.unit.IntSize
 import com.google.common.truth.Truth.assertThat
 
@@ -31,8 +37,23 @@
     val id: PointerId,
     val timestamp: Long,
     val position: Offset,
-    val down: Boolean
+    val down: Boolean,
+    val pointerType: PointerType,
+    val eventType: PointerEventType,
+    val buttons: PointerButtons,
+    val keyboardModifiers: PointerKeyboardModifiers,
 ) {
+    constructor(change: PointerInputChange, event: PointerEvent) : this(
+        change.id,
+        change.uptimeMillis,
+        change.position,
+        change.pressed,
+        change.type,
+        event.type,
+        event.buttons,
+        event.keyboardModifiers,
+    )
+
     val x get() = position.x
     val y get() = position.y
 }
@@ -52,9 +73,9 @@
     private val velocityTracker = VelocityTracker()
     val recordedVelocity get() = velocityTracker.calculateVelocity()
 
-    override val pointerInputFilter = RecordingFilter { changes ->
-        changes.forEach {
-            _events.add(DataPoint(it.id, it.uptimeMillis, it.position, it.pressed))
+    override val pointerInputFilter = RecordingFilter { event ->
+        event.changes.forEach {
+            _events.add(DataPoint(it, event))
             velocityTracker.addPosition(it.uptimeMillis, it.position)
         }
     }
@@ -77,14 +98,8 @@
     private val _events = mutableListOf<Event>()
     val events get() = _events as List<Event>
 
-    override val pointerInputFilter = RecordingFilter { changes ->
-        _events.add(
-            Event(
-                changes.map {
-                    DataPoint(it.id, it.uptimeMillis, it.position, it.pressed)
-                }
-            )
-        )
+    override val pointerInputFilter = RecordingFilter { event ->
+        _events.add(Event(event.changes.map { DataPoint(it, event) }))
     }
 }
 
@@ -94,7 +109,7 @@
  * (but really shouldn't).
  */
 class RecordingFilter(
-    private val record: (List<PointerInputChange>) -> Unit
+    private val record: (PointerEvent) -> Unit
 ) : PointerInputFilter() {
     override fun onPointerEvent(
         pointerEvent: PointerEvent,
@@ -102,7 +117,7 @@
         bounds: IntSize
     ) {
         if (pass == PointerEventPass.Initial) {
-            record(pointerEvent.changes)
+            record(pointerEvent)
         }
     }
 
@@ -149,8 +164,9 @@
 
 fun SinglePointerInputRecorder.assertUpSameAsLastMove() {
     check(events.isNotEmpty()) { "No events recorded" }
-    events.last().also {
-        downEvents.last().verify(it.timestamp, it.id, true, it.position)
+    events.last().let {
+        assertThat(it.eventType).isEqualTo(Release)
+        downEvents.last().verify(it.timestamp, it.id, true, it.position, it.pointerType, Move)
     }
 }
 
@@ -162,7 +178,11 @@
     expectedTimestamp: Long?,
     expectedId: PointerId?,
     expectedDown: Boolean,
-    expectedPosition: Offset
+    expectedPosition: Offset,
+    expectedPointerType: PointerType,
+    expectedEventType: PointerEventType,
+    expectedButtons: PointerButtons = PointerButtons(0),
+    expectedKeyboardModifiers: PointerKeyboardModifiers = PointerKeyboardModifiers(0),
 ) {
     if (expectedTimestamp != null) {
         assertThat(timestamp).isEqualTo(expectedTimestamp)
@@ -172,6 +192,10 @@
     }
     assertThat(down).isEqualTo(expectedDown)
     assertThat(position).isEqualTo(expectedPosition)
+    assertThat(pointerType).isEqualTo(expectedPointerType)
+    assertThat(eventType).isEqualTo(expectedEventType)
+    assertThat(buttons).isEqualTo(expectedButtons)
+    assertThat(keyboardModifiers).isEqualTo(expectedKeyboardModifiers)
 }
 
 /**