9#include "gtest/gtest.h"
24 HRESULT(REFIID,
void**));
27 ActivateConfiguration,
28 HRESULT(DIRECTMANIPULATION_CONFIGURATION));
31 HRESULT(DIRECTMANIPULATION_CONFIGURATION));
34 HRESULT(IDirectManipulationContent*));
38 IDirectManipulationViewportEventHandler*,
44 HRESULT(REFIID,
void**));
47 HRESULT(DIRECTMANIPULATION_STATUS*));
50 HRESULT(REFIID,
void**, UINT32*));
60 HRESULT(DIRECTMANIPULATION_CONFIGURATION));
63 HRESULT(IDirectManipulationContent*));
69 HRESULT(DIRECTMANIPULATION_MOTION_TYPES));
73 HRESULT(DIRECTMANIPULATION_INPUT_MODE));
76 HRESULT(DIRECTMANIPULATION_GESTURE_CONFIGURATION));
79 HRESULT(IUnknown*, UINT32));
82 HRESULT(DIRECTMANIPULATION_INPUT_MODE));
85 HRESULT(DIRECTMANIPULATION_VIEWPORT_OPTIONS));
88 HRESULT(
const RECT*));
91 HRESULT(
const float*,
DWORD));
95 HRESULT(
const float*,
DWORD));
99 HRESULT(
const float,
const float,
const float,
const float,
BOOL));
113 HRESULT(REFIID,
void**));
117 HRESULT(
float*,
DWORD));
120 HRESULT(
float*,
DWORD));
123 HRESULT(REFIID,
void**, UINT32*));
126 HRESULT(REFIID,
void**));
129 HRESULT(
const RECT*));
132 HRESULT(IUnknown*, UINT32));
134 SyncContentTransform,
135 HRESULT(
const float*,
DWORD));
141TEST(DirectManipulationTest, TestGesture) {
145 const float scale = 1.5;
146 const float pan_x = 32.0;
147 const float pan_y = 16.0;
148 const int DISPLAY_WIDTH = 800;
149 const int DISPLAY_HEIGHT = 600;
150 auto owner = std::make_unique<DirectManipulationOwner>(
nullptr);
151 owner->SetBindingHandlerDelegate(&delegate);
153 fml::MakeRefCounted<DirectManipulationEventHandler>(owner.get());
154 int32_t device_id = (int32_t)
reinterpret_cast<int64_t
>(
handler.get());
155 EXPECT_CALL(viewport, GetPrimaryContent(_, _))
156 .WillOnce([&
content](REFIID in,
void** out) {
160 .RetiresOnSaturation();
161 EXPECT_CALL(
content, GetContentTransform(_, 6))
168 .RetiresOnSaturation();
169 EXPECT_CALL(delegate, OnPointerPanZoomStart(device_id));
170 handler->OnViewportStatusChanged((IDirectManipulationViewport*)&viewport,
171 DIRECTMANIPULATION_RUNNING,
172 DIRECTMANIPULATION_READY);
173 EXPECT_CALL(
content, GetContentTransform(_, 6))
180 EXPECT_CALL(delegate,
181 OnPointerPanZoomUpdate(device_id, pan_x, pan_y, scale, 0));
182 handler->OnContentUpdated((IDirectManipulationViewport*)&viewport,
183 (IDirectManipulationContent*)&
content);
184 EXPECT_CALL(delegate, OnPointerPanZoomEnd(device_id));
185 EXPECT_CALL(viewport, GetViewportRect(_))
186 .WillOnce([DISPLAY_WIDTH, DISPLAY_HEIGHT](RECT* rect) {
189 rect->right = DISPLAY_WIDTH;
190 rect->bottom = DISPLAY_HEIGHT;
193 EXPECT_CALL(viewport, ZoomToRect(0, 0, DISPLAY_WIDTH, DISPLAY_HEIGHT,
false))
194 .WillOnce(::testing::Return(S_OK));
195 handler->OnViewportStatusChanged((IDirectManipulationViewport*)&viewport,
196 DIRECTMANIPULATION_INERTIA,
197 DIRECTMANIPULATION_RUNNING);
198 handler->OnViewportStatusChanged((IDirectManipulationViewport*)&viewport,
199 DIRECTMANIPULATION_READY,
200 DIRECTMANIPULATION_INERTIA);
204TEST(DirectManipulationTest, TestRounding) {
208 const float scale = 1.5;
209 const int DISPLAY_WIDTH = 800;
210 const int DISPLAY_HEIGHT = 600;
211 auto owner = std::make_unique<DirectManipulationOwner>(
nullptr);
212 owner->SetBindingHandlerDelegate(&delegate);
214 fml::MakeRefCounted<DirectManipulationEventHandler>(owner.get());
215 int32_t device_id = (int32_t)
reinterpret_cast<int64_t
>(
handler.get());
216 EXPECT_CALL(viewport, GetPrimaryContent(_, _))
217 .WillOnce([&
content](REFIID in,
void** out) {
221 .RetiresOnSaturation();
222 EXPECT_CALL(
content, GetContentTransform(_, 6))
229 .RetiresOnSaturation();
230 EXPECT_CALL(delegate, OnPointerPanZoomStart(device_id));
231 handler->OnViewportStatusChanged((IDirectManipulationViewport*)&viewport,
232 DIRECTMANIPULATION_RUNNING,
233 DIRECTMANIPULATION_READY);
234 EXPECT_CALL(
content, GetContentTransform(_, 6))
241 .RetiresOnSaturation();
242 EXPECT_CALL(delegate,
243 OnPointerPanZoomUpdate(device_id, 4.0, 0, 1.5000001f, 0))
245 EXPECT_CALL(delegate, OnPointerPanZoomUpdate(device_id, 4.0, 0, 1.5f, 0))
247 .RetiresOnSaturation();
248 EXPECT_CALL(
content, GetContentTransform(_, 6))
255 .RetiresOnSaturation();
256 EXPECT_CALL(delegate,
257 OnPointerPanZoomUpdate(device_id, 2.0, 0, 1.50000065f, 0))
259 EXPECT_CALL(delegate,
260 OnPointerPanZoomUpdate(device_id, 2.0, 0, 1.50000047f, 0))
262 .RetiresOnSaturation();
263 EXPECT_CALL(delegate, OnPointerPanZoomEnd(device_id));
264 EXPECT_CALL(viewport, GetViewportRect(_))
265 .WillOnce([DISPLAY_WIDTH, DISPLAY_HEIGHT](RECT* rect) {
268 rect->right = DISPLAY_WIDTH;
269 rect->bottom = DISPLAY_HEIGHT;
272 EXPECT_CALL(viewport, ZoomToRect(0, 0, DISPLAY_WIDTH, DISPLAY_HEIGHT,
false))
273 .WillOnce(::testing::Return(S_OK));
274 handler->OnContentUpdated((IDirectManipulationViewport*)&viewport,
275 (IDirectManipulationContent*)&
content);
276 handler->OnContentUpdated((IDirectManipulationViewport*)&viewport,
277 (IDirectManipulationContent*)&
content);
278 handler->OnViewportStatusChanged((IDirectManipulationViewport*)&viewport,
279 DIRECTMANIPULATION_INERTIA,
280 DIRECTMANIPULATION_RUNNING);
281 handler->OnViewportStatusChanged((IDirectManipulationViewport*)&viewport,
282 DIRECTMANIPULATION_READY,
283 DIRECTMANIPULATION_INERTIA);
286TEST(DirectManipulationTest, TestInertiaCancelSentForUserCancel) {
290 const int DISPLAY_WIDTH = 800;
291 const int DISPLAY_HEIGHT = 600;
292 auto owner = std::make_unique<DirectManipulationOwner>(
nullptr);
293 owner->SetBindingHandlerDelegate(&delegate);
295 fml::MakeRefCounted<DirectManipulationEventHandler>(owner.get());
296 int32_t device_id = (int32_t)
reinterpret_cast<int64_t
>(
handler.get());
298 EXPECT_CALL(viewport, GetViewportRect(_))
299 .WillOnce([DISPLAY_WIDTH, DISPLAY_HEIGHT](RECT* rect) {
302 rect->right = DISPLAY_WIDTH;
303 rect->bottom = DISPLAY_HEIGHT;
306 EXPECT_CALL(viewport, ZoomToRect(0, 0, DISPLAY_WIDTH, DISPLAY_HEIGHT,
false))
307 .WillOnce(::testing::Return(S_OK));
308 EXPECT_CALL(delegate, OnPointerPanZoomEnd(device_id));
309 handler->OnViewportStatusChanged((IDirectManipulationViewport*)&viewport,
310 DIRECTMANIPULATION_INERTIA,
311 DIRECTMANIPULATION_RUNNING);
313 EXPECT_CALL(
content, GetContentTransform(_, 6))
320 handler->OnContentUpdated((IDirectManipulationViewport*)&viewport,
321 (IDirectManipulationContent*)&
content);
322 EXPECT_CALL(
content, GetContentTransform(_, 6))
329 handler->OnContentUpdated((IDirectManipulationViewport*)&viewport,
330 (IDirectManipulationContent*)&
content);
333 EXPECT_CALL(delegate, OnScrollInertiaCancel(device_id));
334 handler->OnViewportStatusChanged((IDirectManipulationViewport*)&viewport,
335 DIRECTMANIPULATION_READY,
336 DIRECTMANIPULATION_INERTIA);
339TEST(DirectManipulationTest, TestInertiaCamcelNotSentAtInertiaEnd) {
343 const int DISPLAY_WIDTH = 800;
344 const int DISPLAY_HEIGHT = 600;
345 auto owner = std::make_unique<DirectManipulationOwner>(
nullptr);
346 owner->SetBindingHandlerDelegate(&delegate);
348 fml::MakeRefCounted<DirectManipulationEventHandler>(owner.get());
349 int32_t device_id = (int32_t)
reinterpret_cast<int64_t
>(
handler.get());
351 EXPECT_CALL(viewport, GetViewportRect(_))
352 .WillOnce([DISPLAY_WIDTH, DISPLAY_HEIGHT](RECT* rect) {
355 rect->right = DISPLAY_WIDTH;
356 rect->bottom = DISPLAY_HEIGHT;
359 EXPECT_CALL(viewport, ZoomToRect(0, 0, DISPLAY_WIDTH, DISPLAY_HEIGHT,
false))
360 .WillOnce(::testing::Return(S_OK));
361 EXPECT_CALL(delegate, OnPointerPanZoomEnd(device_id));
362 handler->OnViewportStatusChanged((IDirectManipulationViewport*)&viewport,
363 DIRECTMANIPULATION_INERTIA,
364 DIRECTMANIPULATION_RUNNING);
366 EXPECT_CALL(
content, GetContentTransform(_, 6))
373 handler->OnContentUpdated((IDirectManipulationViewport*)&viewport,
374 (IDirectManipulationContent*)&
content);
375 EXPECT_CALL(
content, GetContentTransform(_, 6))
382 handler->OnContentUpdated((IDirectManipulationViewport*)&viewport,
383 (IDirectManipulationContent*)&
content);
385 EXPECT_CALL(delegate, OnScrollInertiaCancel(device_id)).Times(0);
386 handler->OnViewportStatusChanged((IDirectManipulationViewport*)&viewport,
387 DIRECTMANIPULATION_READY,
388 DIRECTMANIPULATION_INERTIA);
393TEST(DirectManipulationTest, TestGestureWithInitialData) {
397 const float scale = 1.5;
398 const float pan_x = 32.0;
399 const float pan_y = 16.0;
400 const int DISPLAY_WIDTH = 800;
401 const int DISPLAY_HEIGHT = 600;
402 auto owner = std::make_unique<DirectManipulationOwner>(
nullptr);
403 owner->SetBindingHandlerDelegate(&delegate);
405 fml::MakeRefCounted<DirectManipulationEventHandler>(owner.get());
406 int32_t device_id = (int32_t)
reinterpret_cast<int64_t
>(
handler.get());
407 EXPECT_CALL(viewport, GetPrimaryContent(_, _))
408 .WillOnce([&
content](REFIID in,
void** out) {
412 .RetiresOnSaturation();
413 EXPECT_CALL(
content, GetContentTransform(_, 6))
420 .RetiresOnSaturation();
421 EXPECT_CALL(delegate, OnPointerPanZoomStart(device_id));
422 handler->OnViewportStatusChanged((IDirectManipulationViewport*)&viewport,
423 DIRECTMANIPULATION_RUNNING,
424 DIRECTMANIPULATION_READY);
425 EXPECT_CALL(
content, GetContentTransform(_, 6))
432 EXPECT_CALL(delegate,
433 OnPointerPanZoomUpdate(device_id, pan_x, pan_y, scale, 0));
434 handler->OnContentUpdated((IDirectManipulationViewport*)&viewport,
435 (IDirectManipulationContent*)&
content);
436 EXPECT_CALL(delegate, OnPointerPanZoomEnd(device_id));
437 EXPECT_CALL(viewport, GetViewportRect(_))
438 .WillOnce([DISPLAY_WIDTH, DISPLAY_HEIGHT](RECT* rect) {
441 rect->right = DISPLAY_WIDTH;
442 rect->bottom = DISPLAY_HEIGHT;
445 EXPECT_CALL(viewport, ZoomToRect(0, 0, DISPLAY_WIDTH, DISPLAY_HEIGHT,
false))
446 .WillOnce(::testing::Return(S_OK));
447 handler->OnViewportStatusChanged((IDirectManipulationViewport*)&viewport,
448 DIRECTMANIPULATION_INERTIA,
449 DIRECTMANIPULATION_RUNNING);
450 handler->OnViewportStatusChanged((IDirectManipulationViewport*)&viewport,
451 DIRECTMANIPULATION_READY,
452 DIRECTMANIPULATION_INERTIA);
MOCK_METHOD2_WITH_CALLTYPE(STDMETHODCALLTYPE, QueryInterface, HRESULT(REFIID, void **))
MOCK_METHOD2_WITH_CALLTYPE(STDMETHODCALLTYPE, GetContentTransform, HRESULT(float *, DWORD))
MOCK_METHOD2_WITH_CALLTYPE(STDMETHODCALLTYPE, GetOutputTransform, HRESULT(float *, DWORD))
MOCK_METHOD0_WITH_CALLTYPE(STDMETHODCALLTYPE, Release, ULONG())
MOCK_METHOD3_WITH_CALLTYPE(STDMETHODCALLTYPE, GetTag, HRESULT(REFIID, void **, UINT32 *))
MOCK_METHOD2_WITH_CALLTYPE(STDMETHODCALLTYPE, SyncContentTransform, HRESULT(const float *, DWORD))
MockIDirectManipulationContent()
MOCK_METHOD1_WITH_CALLTYPE(STDMETHODCALLTYPE, GetContentRect, HRESULT(RECT *))
MOCK_METHOD0_WITH_CALLTYPE(STDMETHODCALLTYPE, AddRef, ULONG())
MOCK_METHOD2_WITH_CALLTYPE(STDMETHODCALLTYPE, SetTag, HRESULT(IUnknown *, UINT32))
MOCK_METHOD1_WITH_CALLTYPE(STDMETHODCALLTYPE, SetContentRect, HRESULT(const RECT *))
MOCK_METHOD2_WITH_CALLTYPE(STDMETHODCALLTYPE, GetViewport, HRESULT(REFIID, void **))
MOCK_METHOD2_WITH_CALLTYPE(STDMETHODCALLTYPE, QueryInterface, HRESULT(REFIID, void **))
MOCK_METHOD0_WITH_CALLTYPE(STDMETHODCALLTYPE, Abandon, HRESULT())
MOCK_METHOD0_WITH_CALLTYPE(STDMETHODCALLTYPE, AddRef, ULONG())
MOCK_METHOD1_WITH_CALLTYPE(STDMETHODCALLTYPE, SetViewportRect, HRESULT(const RECT *))
MOCK_METHOD2_WITH_CALLTYPE(STDMETHODCALLTYPE, SyncDisplayTransform, HRESULT(const float *, DWORD))
MOCK_METHOD5_WITH_CALLTYPE(STDMETHODCALLTYPE, ZoomToRect, HRESULT(const float, const float, const float, const float, BOOL))
MOCK_METHOD0_WITH_CALLTYPE(STDMETHODCALLTYPE, Enable, HRESULT())
MOCK_METHOD0_WITH_CALLTYPE(STDMETHODCALLTYPE, Disable, HRESULT())
MOCK_METHOD1_WITH_CALLTYPE(STDMETHODCALLTYPE, RemoveEventHandler, HRESULT(DWORD))
MOCK_METHOD1_WITH_CALLTYPE(STDMETHODCALLTYPE, AddConfiguration, HRESULT(DIRECTMANIPULATION_CONFIGURATION))
MOCK_METHOD1_WITH_CALLTYPE(STDMETHODCALLTYPE, SetViewportOptions, HRESULT(DIRECTMANIPULATION_VIEWPORT_OPTIONS))
MOCK_METHOD1_WITH_CALLTYPE(STDMETHODCALLTYPE, RemoveContent, HRESULT(IDirectManipulationContent *))
MOCK_METHOD2_WITH_CALLTYPE(STDMETHODCALLTYPE, SetTag, HRESULT(IUnknown *, UINT32))
MOCK_METHOD3_WITH_CALLTYPE(STDMETHODCALLTYPE, GetTag, HRESULT(REFIID, void **, UINT32 *))
MOCK_METHOD1_WITH_CALLTYPE(STDMETHODCALLTYPE, SetInputMode, HRESULT(DIRECTMANIPULATION_INPUT_MODE))
MOCK_METHOD0_WITH_CALLTYPE(STDMETHODCALLTYPE, Stop, HRESULT())
MOCK_METHOD2_WITH_CALLTYPE(STDMETHODCALLTYPE, SetViewportTransform, HRESULT(const float *, DWORD))
MOCK_METHOD0_WITH_CALLTYPE(STDMETHODCALLTYPE, ReleaseAllContacts, HRESULT())
MOCK_METHOD1_WITH_CALLTYPE(STDMETHODCALLTYPE, SetUpdateMode, HRESULT(DIRECTMANIPULATION_INPUT_MODE))
MOCK_METHOD0_WITH_CALLTYPE(STDMETHODCALLTYPE, Release, ULONG())
MOCK_METHOD1_WITH_CALLTYPE(STDMETHODCALLTYPE, ActivateConfiguration, HRESULT(DIRECTMANIPULATION_CONFIGURATION))
MOCK_METHOD1_WITH_CALLTYPE(STDMETHODCALLTYPE, RemoveConfiguration, HRESULT(DIRECTMANIPULATION_CONFIGURATION))
MOCK_METHOD1_WITH_CALLTYPE(STDMETHODCALLTYPE, AddContent, HRESULT(IDirectManipulationContent *))
MOCK_METHOD3_WITH_CALLTYPE(STDMETHODCALLTYPE, AddEventHandler, HRESULT(HWND, IDirectManipulationViewportEventHandler *, DWORD *))
MOCK_METHOD1_WITH_CALLTYPE(STDMETHODCALLTYPE, SetChaining, HRESULT(DIRECTMANIPULATION_MOTION_TYPES))
MOCK_METHOD1_WITH_CALLTYPE(STDMETHODCALLTYPE, GetStatus, HRESULT(DIRECTMANIPULATION_STATUS *))
MOCK_METHOD2_WITH_CALLTYPE(STDMETHODCALLTYPE, GetPrimaryContent, HRESULT(REFIID, void **))
MockIDirectManipulationViewport()
MOCK_METHOD1_WITH_CALLTYPE(STDMETHODCALLTYPE, ReleaseContact, HRESULT(UINT32))
MOCK_METHOD1_WITH_CALLTYPE(STDMETHODCALLTYPE, GetViewportRect, HRESULT(RECT *))
MOCK_METHOD1_WITH_CALLTYPE(STDMETHODCALLTYPE, SetContact, HRESULT(UINT32))
MOCK_METHOD1_WITH_CALLTYPE(STDMETHODCALLTYPE, SetManualGesture, HRESULT(DIRECTMANIPULATION_GESTURE_CONFIGURATION))
const gchar FlBinaryMessengerMessageHandler handler
#define FML_DISALLOW_COPY_AND_ASSIGN(TypeName)
union flutter::testing::@2883::KeyboardChange::@77 content
TEST(NativeAssetsManagerTest, NoAvailableAssets)
it will be possible to load the file into Perfetto s trace viewer use test Running tests that layout and measure text will not yield consistent results across various platforms Enabling this option will make font resolution default to the Ahem test font on all disable asset Prevents usage of any non test fonts unless they were explicitly Loaded via prefetched default font Indicates whether the embedding started a prefetch of the default font manager before creating the engine run In non interactive keep the shell running after the Dart script has completed enable serial On low power devices with low core running concurrent GC tasks on threads can cause them to contend with the UI thread which could potentially lead to jank This option turns off all concurrent GC activities domain network JSON encoded network policy per domain This overrides the DisallowInsecureConnections switch Embedder can specify whether to allow or disallow insecure connections at a domain level old gen heap size