Index: ui/views/animation/ink_drop_animation_unittest.cc |
diff --git a/ui/views/animation/ink_drop_animation_unittest.cc b/ui/views/animation/ink_drop_animation_unittest.cc |
index 91f8143416a80a857972acd1a1917719b6d7f0bd..cce5acacbb6987c7ac4ae0b3aa32b798a7b2455b 100644 |
--- a/ui/views/animation/ink_drop_animation_unittest.cc |
+++ b/ui/views/animation/ink_drop_animation_unittest.cc |
@@ -11,6 +11,7 @@ |
#include "ui/gfx/geometry/size.h" |
#include "ui/gfx/geometry/size_f.h" |
#include "ui/views/animation/ink_drop_animation.h" |
+#include "ui/views/animation/ink_drop_animation_observer.h" |
#include "ui/views/animation/ink_drop_state.h" |
#include "ui/views/animation/test/ink_drop_animation_test_api.h" |
@@ -27,76 +28,264 @@ gfx::Point TransformPoint(const gfx::Transform& transform, |
return transformed_point; |
} |
+class TestInkDropAnimationObserver : public InkDropAnimationObserver { |
+ public: |
+ TestInkDropAnimationObserver(); |
+ ~TestInkDropAnimationObserver() override; |
+ |
+ // Resets all cached observation data. |
+ void ResetObservations(); |
+ |
+ bool animation_started() const { return animation_started_; } |
+ |
+ bool animation_ended() const { return animation_ended_; } |
+ |
+ InkDropState last_animation_state_started() const { |
+ return last_animation_state_started_; |
+ } |
+ |
+ InkDropState last_animation_state_ended() const { |
+ return last_animation_state_ended_; |
+ } |
+ |
+ InkDropAnimationEndedReason last_animation_ended_reason() const { |
+ return last_animation_ended_reason_; |
+ } |
+ |
+ // InkDropAnimation: |
+ void InkDropAnimationStarted(InkDropState ink_drop_state) override; |
+ void InkDropAnimationEnded(InkDropState ink_drop_state, |
+ InkDropAnimationEndedReason reason) override; |
+ |
+ private: |
+ // True if InkDropAnimationStarted() has been invoked. |
+ bool animation_started_; |
+ |
+ // True if InkDropAnimationEnded() has been invoked. |
+ bool animation_ended_; |
+ |
+ // The |ink_drop_state| parameter used for the last invocation of |
+ // InkDropAnimationStarted(). Only valid if |animation_started_| is true. |
+ InkDropState last_animation_state_started_; |
+ |
+ // The |ink_drop_state| parameter used for the last invocation of |
+ // InkDropAnimationEnded(). Only valid if |animation_ended_| is true. |
+ InkDropState last_animation_state_ended_; |
+ |
+ // The |reason| parameter used for the last invocation of |
+ // InkDropAnimationEnded(). Only valid if |animation_ended_| is true. |
+ InkDropAnimationEndedReason last_animation_ended_reason_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(TestInkDropAnimationObserver); |
+}; |
+ |
+TestInkDropAnimationObserver::TestInkDropAnimationObserver() |
+ : animation_started_(false), |
+ animation_ended_(false), |
+ last_animation_state_started_(InkDropState::HIDDEN), |
+ last_animation_state_ended_(InkDropState::HIDDEN), |
+ last_animation_ended_reason_(InkDropAnimationEndedReason::SUCCESS) { |
+ ResetObservations(); |
+} |
+ |
+TestInkDropAnimationObserver::~TestInkDropAnimationObserver() {} |
+ |
+void TestInkDropAnimationObserver::ResetObservations() { |
+ animation_started_ = false; |
+ animation_ended_ = false; |
+ last_animation_state_ended_ = InkDropState::HIDDEN; |
+ last_animation_state_started_ = InkDropState::HIDDEN; |
+ last_animation_ended_reason_ = InkDropAnimationEndedReason::SUCCESS; |
+} |
+ |
+void TestInkDropAnimationObserver::InkDropAnimationStarted( |
+ InkDropState ink_drop_state) { |
+ animation_started_ = true; |
+ last_animation_state_started_ = ink_drop_state; |
+} |
+ |
+void TestInkDropAnimationObserver::InkDropAnimationEnded( |
+ InkDropState ink_drop_state, |
+ InkDropAnimationEndedReason reason) { |
+ animation_ended_ = true; |
+ last_animation_state_ended_ = ink_drop_state; |
+ last_animation_ended_reason_ = reason; |
+} |
+ |
} // namespace |
class InkDropAnimationTest : public testing::Test { |
public: |
- InkDropAnimationTest() {} |
- ~InkDropAnimationTest() override {} |
+ InkDropAnimationTest(); |
+ ~InkDropAnimationTest() override; |
protected: |
- scoped_ptr<InkDropAnimation> CreateInkDropAnimation() const; |
+ TestInkDropAnimationObserver observer_; |
+ |
+ InkDropAnimation ink_drop_animation_; |
+ |
+ InkDropAnimationTestApi test_api_; |
private: |
DISALLOW_COPY_AND_ASSIGN(InkDropAnimationTest); |
}; |
-// Returns a new InkDropAnimation with default parameters. |
-scoped_ptr<InkDropAnimation> InkDropAnimationTest::CreateInkDropAnimation() |
- const { |
- return make_scoped_ptr( |
- new InkDropAnimation(gfx::Size(10, 10), 2, gfx::Size(8, 8), 1)); |
+InkDropAnimationTest::InkDropAnimationTest() |
+ : ink_drop_animation_(gfx::Size(10, 10), 2, gfx::Size(8, 8), 1), |
+ test_api_(&ink_drop_animation_) { |
+ ink_drop_animation_.AddObserver(&observer_); |
+ test_api_.SetDisableAnimationTimers(true); |
} |
+InkDropAnimationTest::~InkDropAnimationTest() {} |
+ |
TEST_F(InkDropAnimationTest, InitialStateAfterConstruction) { |
- scoped_ptr<InkDropAnimation> ink_drop_animation = CreateInkDropAnimation(); |
- EXPECT_EQ(views::InkDropState::HIDDEN, ink_drop_animation->ink_drop_state()); |
+ EXPECT_EQ(views::InkDropState::HIDDEN, ink_drop_animation_.ink_drop_state()); |
+} |
+ |
+TEST_F(InkDropAnimationTest, VerifyObserversAreNotified) { |
+ ink_drop_animation_.AnimateToState(InkDropState::ACTION_PENDING); |
+ |
+ ASSERT_TRUE(test_api_.HasActiveAnimations()); |
+ EXPECT_TRUE(observer_.animation_started()); |
+ EXPECT_EQ(InkDropState::ACTION_PENDING, |
+ observer_.last_animation_state_started()); |
+ EXPECT_FALSE(observer_.animation_ended()); |
+ |
+ observer_.ResetObservations(); |
+ test_api_.CompleteAnimations(); |
+ |
+ ASSERT_FALSE(test_api_.HasActiveAnimations()); |
+ EXPECT_FALSE(observer_.animation_started()); |
+ EXPECT_TRUE(observer_.animation_ended()); |
+ EXPECT_EQ(InkDropState::ACTION_PENDING, |
+ observer_.last_animation_state_ended()); |
+} |
+ |
+TEST_F(InkDropAnimationTest, VerifyObserversAreNotifiedOfSuccessfulAnimations) { |
+ ink_drop_animation_.AnimateToState(InkDropState::ACTION_PENDING); |
+ test_api_.CompleteAnimations(); |
+ |
+ ASSERT_TRUE(observer_.animation_ended()); |
+ EXPECT_EQ(InkDropAnimationObserver::InkDropAnimationEndedReason::SUCCESS, |
+ observer_.last_animation_ended_reason()); |
+} |
+ |
+TEST_F(InkDropAnimationTest, VerifyObserversAreNotifiedOfPreemptedAnimations) { |
+ ink_drop_animation_.AnimateToState(InkDropState::ACTION_PENDING); |
+ observer_.ResetObservations(); |
+ |
+ ink_drop_animation_.AnimateToState(InkDropState::SLOW_ACTION_PENDING); |
+ |
+ ASSERT_TRUE(observer_.animation_ended()); |
+ EXPECT_EQ(InkDropAnimationObserver::InkDropAnimationEndedReason::PRE_EMPTED, |
+ observer_.last_animation_ended_reason()); |
+} |
+ |
+TEST_F(InkDropAnimationTest, AnimateToHiddenFromInvisibleState) { |
+ ASSERT_EQ(InkDropState::HIDDEN, ink_drop_animation_.ink_drop_state()); |
+ |
+ ink_drop_animation_.AnimateToState(InkDropState::HIDDEN); |
+ EXPECT_TRUE(observer_.animation_started()); |
+ EXPECT_TRUE(observer_.animation_ended()); |
+} |
+ |
+TEST_F(InkDropAnimationTest, AnimateToHiddenFromVisibleState) { |
+ ink_drop_animation_.AnimateToState(InkDropState::ACTION_PENDING); |
+ test_api_.CompleteAnimations(); |
+ |
+ observer_.ResetObservations(); |
+ |
+ ASSERT_NE(InkDropState::HIDDEN, ink_drop_animation_.ink_drop_state()); |
+ |
+ ink_drop_animation_.AnimateToState(InkDropState::HIDDEN); |
+ |
+ EXPECT_TRUE(observer_.animation_started()); |
+ EXPECT_FALSE(observer_.animation_ended()); |
+ |
+ test_api_.CompleteAnimations(); |
+ |
+ EXPECT_TRUE(observer_.animation_started()); |
+ EXPECT_TRUE(observer_.animation_ended()); |
} |
TEST_F(InkDropAnimationTest, AnimateToActionPending) { |
- scoped_ptr<InkDropAnimation> ink_drop_animation = CreateInkDropAnimation(); |
- ink_drop_animation->AnimateToState(views::InkDropState::ACTION_PENDING); |
+ ink_drop_animation_.AnimateToState(views::InkDropState::ACTION_PENDING); |
+ test_api_.CompleteAnimations(); |
+ |
EXPECT_EQ(views::InkDropState::ACTION_PENDING, |
- ink_drop_animation->ink_drop_state()); |
+ ink_drop_animation_.ink_drop_state()); |
+ EXPECT_EQ(InkDropAnimation::kVisibleOpacity, test_api_.GetCurrentOpacity()); |
} |
TEST_F(InkDropAnimationTest, AnimateToQuickAction) { |
- scoped_ptr<InkDropAnimation> ink_drop_animation = CreateInkDropAnimation(); |
- ink_drop_animation->AnimateToState(views::InkDropState::QUICK_ACTION); |
+ ink_drop_animation_.AnimateToState(views::InkDropState::ACTION_PENDING); |
+ ink_drop_animation_.AnimateToState(views::InkDropState::QUICK_ACTION); |
+ test_api_.CompleteAnimations(); |
+ |
EXPECT_EQ(views::InkDropState::QUICK_ACTION, |
- ink_drop_animation->ink_drop_state()); |
+ ink_drop_animation_.ink_drop_state()); |
+ EXPECT_EQ(InkDropAnimation::kHiddenOpacity, test_api_.GetCurrentOpacity()); |
} |
TEST_F(InkDropAnimationTest, AnimateToSlowActionPending) { |
- scoped_ptr<InkDropAnimation> ink_drop_animation = CreateInkDropAnimation(); |
- ink_drop_animation->AnimateToState(views::InkDropState::SLOW_ACTION_PENDING); |
+ ink_drop_animation_.AnimateToState(views::InkDropState::ACTION_PENDING); |
+ ink_drop_animation_.AnimateToState(views::InkDropState::SLOW_ACTION_PENDING); |
+ test_api_.CompleteAnimations(); |
+ |
EXPECT_EQ(views::InkDropState::SLOW_ACTION_PENDING, |
- ink_drop_animation->ink_drop_state()); |
+ ink_drop_animation_.ink_drop_state()); |
+ EXPECT_EQ(InkDropAnimation::kVisibleOpacity, test_api_.GetCurrentOpacity()); |
} |
TEST_F(InkDropAnimationTest, AnimateToSlowAction) { |
- scoped_ptr<InkDropAnimation> ink_drop_animation = CreateInkDropAnimation(); |
- ink_drop_animation->AnimateToState(views::InkDropState::SLOW_ACTION); |
+ ink_drop_animation_.AnimateToState(views::InkDropState::ACTION_PENDING); |
+ ink_drop_animation_.AnimateToState(views::InkDropState::SLOW_ACTION_PENDING); |
+ ink_drop_animation_.AnimateToState(views::InkDropState::SLOW_ACTION); |
+ test_api_.CompleteAnimations(); |
+ |
EXPECT_EQ(views::InkDropState::SLOW_ACTION, |
- ink_drop_animation->ink_drop_state()); |
+ ink_drop_animation_.ink_drop_state()); |
+ EXPECT_EQ(InkDropAnimation::kHiddenOpacity, test_api_.GetCurrentOpacity()); |
} |
TEST_F(InkDropAnimationTest, AnimateToActivated) { |
- scoped_ptr<InkDropAnimation> ink_drop_animation = CreateInkDropAnimation(); |
- ink_drop_animation->AnimateToState(views::InkDropState::ACTIVATED); |
+ ink_drop_animation_.AnimateToState(views::InkDropState::ACTIVATED); |
+ test_api_.CompleteAnimations(); |
+ |
EXPECT_EQ(views::InkDropState::ACTIVATED, |
- ink_drop_animation->ink_drop_state()); |
+ ink_drop_animation_.ink_drop_state()); |
+ EXPECT_EQ(InkDropAnimation::kVisibleOpacity, test_api_.GetCurrentOpacity()); |
} |
TEST_F(InkDropAnimationTest, AnimateToDeactivated) { |
- scoped_ptr<InkDropAnimation> ink_drop_animation = CreateInkDropAnimation(); |
- ink_drop_animation->AnimateToState(views::InkDropState::DEACTIVATED); |
+ ink_drop_animation_.AnimateToState(views::InkDropState::ACTIVATED); |
+ ink_drop_animation_.AnimateToState(views::InkDropState::DEACTIVATED); |
+ test_api_.CompleteAnimations(); |
+ |
EXPECT_EQ(views::InkDropState::DEACTIVATED, |
- ink_drop_animation->ink_drop_state()); |
+ ink_drop_animation_.ink_drop_state()); |
+ EXPECT_EQ(InkDropAnimation::kHiddenOpacity, test_api_.GetCurrentOpacity()); |
+} |
+ |
+// Verifies all active animations are aborted and the InkDropState is set to |
+// HIDDEN after invoking HideImmediately(). |
+TEST_F(InkDropAnimationTest, HideImmediately) { |
+ ink_drop_animation_.AnimateToState(views::InkDropState::ACTION_PENDING); |
+ ASSERT_TRUE(test_api_.HasActiveAnimations()); |
+ ASSERT_NE(InkDropState::HIDDEN, ink_drop_animation_.ink_drop_state()); |
+ ASSERT_TRUE(observer_.animation_started()); |
+ |
+ observer_.ResetObservations(); |
+ ink_drop_animation_.HideImmediately(); |
+ |
+ EXPECT_FALSE(test_api_.HasActiveAnimations()); |
+ EXPECT_EQ(views::InkDropState::HIDDEN, ink_drop_animation_.ink_drop_state()); |
+ ASSERT_FALSE(observer_.animation_started()); |
} |
-TEST_F(InkDropAnimationTest, |
- TransformedPointsUsingTransformsFromCalculateCircleTransforms) { |
+TEST(InkDropAnimationTransformTest, |
+ TransformedPointsUsingTransformsFromCalculateCircleTransforms) { |
const int kHalfDrawnSize = 5; |
const int kDrawnSize = 2 * kHalfDrawnSize; |
@@ -196,8 +385,8 @@ TEST_F(InkDropAnimationTest, |
TransformPoint(kVerticalTransform, bottom_mid)); |
} |
-TEST_F(InkDropAnimationTest, |
- TransformedPointsUsingTransformsFromCalculateRectTransforms) { |
+TEST(InkDropAnimationTransformTest, |
+ TransformedPointsUsingTransformsFromCalculateRectTransforms) { |
const int kHalfDrawnSize = 5; |
const int kDrawnSize = 2 * kHalfDrawnSize; |