Index: ui/compositor/layer_animation_element_unittest.cc |
diff --git a/ui/compositor/layer_animation_element_unittest.cc b/ui/compositor/layer_animation_element_unittest.cc |
index 9964436929d7c6d4c1870807fbb0e1864961f621..1b220940a9e711240321742d2de0eb7dac79c3ac 100644 |
--- a/ui/compositor/layer_animation_element_unittest.cc |
+++ b/ui/compositor/layer_animation_element_unittest.cc |
@@ -283,6 +283,36 @@ TEST(LayerAnimationElementTest, PauseElement) { |
copy.GetGrayscaleForAnimation()); |
} |
+// Check that a threaded element updates the delegate as expected when aborted. |
+TEST(LayerAnimationElementTest, AbortOpacityElement) { |
+ TestLayerAnimationDelegate delegate; |
+ float start = 0.0; |
+ float target = 1.0; |
+ base::TimeTicks start_time; |
+ base::TimeTicks effective_start_time; |
+ base::TimeDelta delta = base::TimeDelta::FromSeconds(1); |
+ scoped_ptr<LayerAnimationElement> element( |
+ LayerAnimationElement::CreateOpacityElement(target, delta)); |
+ |
+ // Choose a non-linear Tween type. |
+ Tween::Type tween_type = Tween::EASE_IN; |
+ element->set_tween_type(tween_type); |
+ |
+ start_time += delta; |
+ element->set_requested_start_time(start_time); |
+ delegate.SetOpacityFromAnimation(start); |
+ element->Start(&delegate, 1); |
+ element->Progress(start_time, &delegate); |
+ effective_start_time = start_time + delta; |
+ element->set_effective_start_time(effective_start_time); |
+ element->Progress(effective_start_time, &delegate); |
+ element->Progress(effective_start_time + delta/2, &delegate); |
+ |
+ element->Abort(&delegate); |
+ EXPECT_FLOAT_EQ(Tween::CalculateValue(tween_type, 0.5), |
+ delegate.GetOpacityForAnimation()); |
+} |
+ |
} // namespace |
} // namespace ui |