@@ -177,6 +177,47 @@ void main() {
177177 expect (events[4 ], isA <PointerHoverEvent >());
178178 });
179179
180+ test ('Can handle malformed scrolling event.' , () {
181+ ui.PointerDataPacket packet = const ui.PointerDataPacket (
182+ data: < ui.PointerData > [
183+ ui.PointerData (change: ui.PointerChange .add, device: 24 ),
184+ ],
185+ );
186+ List <PointerEvent > events = PointerEventConverter .expand (packet.data, GestureBinding .instance.window.devicePixelRatio).toList ();
187+
188+ expect (events.length, 1 );
189+ expect (events[0 ], isA <PointerAddedEvent >());
190+
191+ // Send packet contains malformed scroll events.
192+ packet = const ui.PointerDataPacket (
193+ data: < ui.PointerData > [
194+ ui.PointerData (signalKind: ui.PointerSignalKind .scroll, device: 24 , scrollDeltaX: double .infinity, scrollDeltaY: 10 ),
195+ ui.PointerData (signalKind: ui.PointerSignalKind .scroll, device: 24 , scrollDeltaX: double .nan, scrollDeltaY: 10 ),
196+ ui.PointerData (signalKind: ui.PointerSignalKind .scroll, device: 24 , scrollDeltaX: double .negativeInfinity, scrollDeltaY: 10 ),
197+ ui.PointerData (signalKind: ui.PointerSignalKind .scroll, device: 24 , scrollDeltaY: double .infinity, scrollDeltaX: 10 ),
198+ ui.PointerData (signalKind: ui.PointerSignalKind .scroll, device: 24 , scrollDeltaY: double .nan, scrollDeltaX: 10 ),
199+ ui.PointerData (signalKind: ui.PointerSignalKind .scroll, device: 24 , scrollDeltaY: double .negativeInfinity, scrollDeltaX: 10 ),
200+ ],
201+ );
202+ events = PointerEventConverter .expand (packet.data, GestureBinding .instance.window.devicePixelRatio).toList ();
203+ expect (events.length, 0 );
204+
205+ // Send packet with a valid scroll event.
206+ packet = const ui.PointerDataPacket (
207+ data: < ui.PointerData > [
208+ ui.PointerData (signalKind: ui.PointerSignalKind .scroll, device: 24 , scrollDeltaX: 10 , scrollDeltaY: 10 ),
209+ ],
210+ );
211+ // Make sure PointerEventConverter can expand when device pixel ratio is valid.
212+ events = PointerEventConverter .expand (packet.data, GestureBinding .instance.window.devicePixelRatio).toList ();
213+ expect (events.length, 1 );
214+ expect (events[0 ], isA <PointerScrollEvent >());
215+
216+ // Make sure PointerEventConverter returns none when device pixel ratio is invalid.
217+ events = PointerEventConverter .expand (packet.data, 0 ).toList ();
218+ expect (events.length, 0 );
219+ });
220+
180221 test ('Can expand pointer scroll events' , () {
181222 const ui.PointerDataPacket packet = ui.PointerDataPacket (
182223 data: < ui.PointerData > [
0 commit comments