3
0

GestureRecognizerPinchTests.cpp 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178
  1. /*
  2. * Copyright (c) Contributors to the Open 3D Engine Project.
  3. * For complete copyright and license terms please see the LICENSE at the root of this distribution.
  4. *
  5. * SPDX-License-Identifier: Apache-2.0 OR MIT
  6. *
  7. */
  8. #include <AzTest/AzTest.h>
  9. #include <Gestures/GestureRecognizerPinch.h>
  10. #include "BaseGestureTest.h"
  11. namespace
  12. {
  13. Gestures::RecognizerPinch::Config defaultConfig;
  14. }
  15. class PinchTests
  16. : public BaseGestureTest
  17. {
  18. public:
  19. void SetUp() override
  20. {
  21. BaseGestureTest::SetUp();
  22. }
  23. void TearDown() override
  24. {
  25. BaseGestureTest::TearDown();
  26. }
  27. };
  28. class MockPinchRecognizer
  29. : public Gestures::RecognizerPinch
  30. {
  31. public:
  32. AZ_CLASS_ALLOCATOR(MockPinchRecognizer, AZ::SystemAllocator)
  33. MockPinchRecognizer()
  34. : m_initCount(0)
  35. , m_updateCount(0)
  36. , m_endCount(0)
  37. {
  38. }
  39. int m_initCount;
  40. int m_updateCount;
  41. int m_endCount;
  42. void OnContinuousGestureInitiated() override { ++m_initCount; }
  43. void OnContinuousGestureUpdated() override { ++m_updateCount; }
  44. void OnContinuousGestureEnded() override { ++m_endCount; }
  45. };
  46. TEST_F(PinchTests, Sanity_Pass)
  47. {
  48. // Tests that Setup/TearDown work as expected
  49. }
  50. TEST_F(PinchTests, NoInput_DefaultConfig_NotRecognized)
  51. {
  52. MockPinchRecognizer mockRecognizer;
  53. mockRecognizer.SetConfig(defaultConfig);
  54. ASSERT_EQ(0, mockRecognizer.m_initCount);
  55. }
  56. TEST_F(PinchTests, Touch_OneFinger_InitNotCalled)
  57. {
  58. MockPinchRecognizer mockRecognizer;
  59. mockRecognizer.SetConfig(defaultConfig);
  60. Press(mockRecognizer, 0, AZ::Vector2(ZERO), 0.0f);
  61. ASSERT_EQ(0, mockRecognizer.m_initCount);
  62. }
  63. TEST_F(PinchTests, Touch_TwoFingersSlightlyApartNoMovement_InitNotCalled)
  64. {
  65. MockPinchRecognizer mockRecognizer;
  66. mockRecognizer.SetConfig(defaultConfig);
  67. Press(mockRecognizer, 0, AZ::Vector2(ZERO), 0.0f);
  68. Press(mockRecognizer, 1, AZ::Vector2(0.5f), 0.0f);
  69. // both are down, but they haven't moved the "min pixels moved" distance
  70. // so the gesture has not been initialized
  71. ASSERT_EQ(0, mockRecognizer.m_initCount);
  72. }
  73. TEST_F(PinchTests, PinchOutward_GreaterThanMinDistance_InitCalled)
  74. {
  75. MockPinchRecognizer mockRecognizer;
  76. Gestures::RecognizerPinch::Config config;
  77. config.minPixelsMoved = 10.0f;
  78. mockRecognizer.SetConfig(config);
  79. Press(mockRecognizer, 0, AZ::Vector2(ZERO), 0.0f);
  80. Press(mockRecognizer, 1, AZ::Vector2(ZERO), 0.0f);
  81. Move(mockRecognizer, 0, AZ::Vector2(-5.01f, 0.0f), 1.0f);
  82. Move(mockRecognizer, 1, AZ::Vector2(5.01f, 0.0f), 1.0f);
  83. ASSERT_EQ(1, mockRecognizer.m_initCount);
  84. }
  85. TEST_F(PinchTests, PinchInward_GreaterThanMinDistance_InitCalled)
  86. {
  87. MockPinchRecognizer mockRecognizer;
  88. Gestures::RecognizerPinch::Config config;
  89. config.minPixelsMoved = 10.0f;
  90. mockRecognizer.SetConfig(config);
  91. Press(mockRecognizer, 0, AZ::Vector2(-15.01f, 0.0f), 0.0f);
  92. Press(mockRecognizer, 1, AZ::Vector2(15.01f, 0.0f), 0.0f);
  93. Move(mockRecognizer, 0, AZ::Vector2(-10.00f, 0.0f), 1.0f);
  94. Move(mockRecognizer, 1, AZ::Vector2(10.00f, 0.0f), 1.0f);
  95. ASSERT_EQ(1, mockRecognizer.m_initCount);
  96. }
  97. TEST_F(PinchTests, ReleaseBothTouches_AfterInitialized_EndedCalled)
  98. {
  99. MockPinchRecognizer mockRecognizer;
  100. Gestures::RecognizerPinch::Config config;
  101. config.minPixelsMoved = 10.0f;
  102. mockRecognizer.SetConfig(config);
  103. const AZ::Vector2 end(5.01f, 0.0f);
  104. Press(mockRecognizer, 0, AZ::Vector2(ZERO), 0.0f);
  105. Press(mockRecognizer, 1, AZ::Vector2(ZERO), 0.0f);
  106. Move(mockRecognizer, 0, -end, 1.0f);
  107. Move(mockRecognizer, 1, end, 1.0f);
  108. Release(mockRecognizer, 0, -end, 2.0f);
  109. Release(mockRecognizer, 1, end, 2.0f);
  110. ASSERT_EQ(1, mockRecognizer.m_initCount);
  111. ASSERT_EQ(1, mockRecognizer.m_endCount);
  112. }
  113. TEST_F(PinchTests, ReleaseOneTouch_AfterInitialized_EndedCalled)
  114. {
  115. MockPinchRecognizer mockRecognizer;
  116. Gestures::RecognizerPinch::Config config;
  117. config.minPixelsMoved = 10.0f;
  118. mockRecognizer.SetConfig(config);
  119. const AZ::Vector2 end(5.01f, 0.0f);
  120. Press(mockRecognizer, 0, AZ::Vector2(ZERO), 0.0f);
  121. Press(mockRecognizer, 1, AZ::Vector2(ZERO), 0.0f);
  122. Move(mockRecognizer, 0, -end, 1.0f);
  123. Move(mockRecognizer, 1, end, 1.0f);
  124. Release(mockRecognizer, 0, -end, 2.0f);
  125. //Release(mockRecognizer, 1, end, 2.0f);
  126. ASSERT_EQ(1, mockRecognizer.m_initCount);
  127. ASSERT_EQ(1, mockRecognizer.m_endCount);
  128. }
  129. TEST_F(PinchTests, ReleaseTouches_PinchNeverStarted_NoInitNoEnd)
  130. {
  131. MockPinchRecognizer mockRecognizer;
  132. Gestures::RecognizerPinch::Config config;
  133. config.minPixelsMoved = 10.0f;
  134. mockRecognizer.SetConfig(config);
  135. const AZ::Vector2 start(10.0f, 0.0f);
  136. const AZ::Vector2 end(9.0f, 0.0f); // not enough to initiate a pinch
  137. Press(mockRecognizer, 0, -start, 0.0f);
  138. Press(mockRecognizer, 1, start, 0.0f);
  139. Move(mockRecognizer, 0, -end, 1.0f);
  140. Move(mockRecognizer, 1, end, 1.0f);
  141. Release(mockRecognizer, 0, -end, 2.0f);
  142. Release(mockRecognizer, 1, end, 2.0f);
  143. ASSERT_EQ(0, mockRecognizer.m_initCount);
  144. ASSERT_EQ(0, mockRecognizer.m_endCount);
  145. }