@@ -142,6 +142,47 @@ describe('onLongPress', () => {
142
142
expect ( onLongPressCallback ) . toHaveBeenCalledTimes ( 1 )
143
143
}
144
144
145
+ async function triggerOnMouseUp ( isRef : boolean ) {
146
+ const onLongPressCallback = vi . fn ( )
147
+ const onMouseUpCallback = vi . fn ( )
148
+ onLongPress ( isRef ? element : element . value , onLongPressCallback , { onMouseUp : onMouseUpCallback } )
149
+
150
+ // first pointer down
151
+ pointerdownEvent = new PointerEvent ( 'pointerdown' , { cancelable : true , bubbles : true } )
152
+ element . value . dispatchEvent ( pointerdownEvent )
153
+
154
+ // wait for 250 after pointer down
155
+ await promiseTimeout ( 250 )
156
+ expect ( onLongPressCallback ) . toHaveBeenCalledTimes ( 0 )
157
+ expect ( onMouseUpCallback ) . toHaveBeenCalledTimes ( 0 )
158
+
159
+ // pointer up to cancel callback
160
+ pointerUpEvent = new PointerEvent ( 'pointerup' , { cancelable : true , bubbles : true } )
161
+ element . value . dispatchEvent ( pointerUpEvent )
162
+ expect ( onMouseUpCallback ) . toHaveBeenCalledTimes ( 1 )
163
+ expect ( onMouseUpCallback ) . toBeCalledWith ( expect . any ( Number ) , 0 , false )
164
+ expect ( onMouseUpCallback . mock . calls [ 0 ] [ 0 ] ) . toBeGreaterThanOrEqual ( 250 )
165
+
166
+ // wait for 500ms after pointer up
167
+ await promiseTimeout ( 500 )
168
+ expect ( onLongPressCallback ) . toHaveBeenCalledTimes ( 0 )
169
+
170
+ // another pointer down
171
+ pointerdownEvent = new PointerEvent ( 'pointerdown' , { cancelable : true , bubbles : true } )
172
+ element . value . dispatchEvent ( pointerdownEvent )
173
+
174
+ // wait for 500 after pointer down
175
+ await promiseTimeout ( 500 )
176
+ expect ( onLongPressCallback ) . toHaveBeenCalledTimes ( 1 )
177
+ expect ( onMouseUpCallback ) . toHaveBeenCalledTimes ( 1 )
178
+
179
+ pointerUpEvent = new PointerEvent ( 'pointerup' , { cancelable : true , bubbles : true } )
180
+ element . value . dispatchEvent ( pointerUpEvent )
181
+ expect ( onMouseUpCallback ) . toHaveBeenCalledTimes ( 2 )
182
+ expect ( onMouseUpCallback ) . toBeCalledWith ( expect . any ( Number ) , 0 , true )
183
+ expect ( onMouseUpCallback . mock . calls [ 1 ] [ 0 ] ) . toBeGreaterThanOrEqual ( 500 )
184
+ }
185
+
145
186
function suites ( isRef : boolean ) {
146
187
describe ( 'given no options' , ( ) => {
147
188
it ( 'should trigger longpress after 500ms' , ( ) => triggerCallback ( isRef ) )
@@ -154,6 +195,7 @@ describe('onLongPress', () => {
154
195
it ( 'should stop propagation' , ( ) => stopPropagation ( isRef ) )
155
196
it ( 'should remove event listeners after being stopped' , ( ) => stopEventListeners ( isRef ) )
156
197
it ( 'should trigger longpress if pointer is moved' , ( ) => triggerCallbackWithThreshold ( isRef ) )
198
+ it ( 'should trigger onMouseUp when pointer is released' , ( ) => triggerOnMouseUp ( isRef ) )
157
199
} )
158
200
}
159
201
0 commit comments