Upstream version 7.36.149.0
[platform/framework/web/crosswalk.git] / src / cc / animation / transform_operations_unittest.cc
index 831ce71..ce7d121 100644 (file)
@@ -1258,5 +1258,252 @@ TEST(TransformOperationTest, BlendedBoundsForSequence) {
             bounds.ToString());
 }
 
+TEST(TransformOperationTest, AffectsScaleWithSingleOperation) {
+  TransformOperations empty_operations;
+  EXPECT_FALSE(empty_operations.AffectsScale());
+
+  TransformOperations identity;
+  identity.AppendIdentity();
+  EXPECT_FALSE(identity.AffectsScale());
+
+  TransformOperations translate;
+  translate.AppendTranslate(1.f, 2.f, 3.f);
+  EXPECT_FALSE(translate.AffectsScale());
+
+  TransformOperations rotate;
+  rotate.AppendRotate(1.f, 2.f, 3.f, 4.f);
+  EXPECT_FALSE(rotate.AffectsScale());
+
+  TransformOperations scale;
+  scale.AppendScale(1.f, 2.f, 3.f);
+  EXPECT_TRUE(scale.AffectsScale());
+
+  TransformOperations skew;
+  skew.AppendSkew(1.f, 2.f);
+  EXPECT_FALSE(skew.AffectsScale());
+
+  TransformOperations perspective;
+  perspective.AppendPerspective(1.f);
+  EXPECT_FALSE(perspective.AffectsScale());
+
+  TransformOperations identity_matrix;
+  identity_matrix.AppendMatrix(gfx::Transform());
+  EXPECT_FALSE(identity_matrix.AffectsScale());
+
+  TransformOperations translation_matrix;
+  gfx::Transform translation_transform;
+  translation_transform.Translate3d(1.f, 2.f, 3.f);
+  translation_matrix.AppendMatrix(translation_transform);
+  EXPECT_FALSE(translation_matrix.AffectsScale());
+
+  TransformOperations scaling_matrix;
+  gfx::Transform scaling_transform;
+  scaling_transform.Scale(2.f, 2.f);
+  scaling_matrix.AppendMatrix(scaling_transform);
+  EXPECT_TRUE(scaling_matrix.AffectsScale());
+}
+
+TEST(TransformOperationTest, AffectsScaleWithMultipleOperations) {
+  TransformOperations operations1;
+  operations1.AppendSkew(1.f, 2.f);
+  operations1.AppendTranslate(1.f, 2.f, 3.f);
+  operations1.AppendIdentity();
+  EXPECT_FALSE(operations1.AffectsScale());
+
+  TransformOperations operations2;
+  operations2.AppendPerspective(2.f);
+  operations2.AppendScale(1.f, 2.f, 3.f);
+  operations2.AppendTranslate(3.f, 2.f, 1.f);
+  EXPECT_TRUE(operations2.AffectsScale());
+}
+
+TEST(TransformOperationTest, IsTranslationWithSingleOperation) {
+  TransformOperations empty_operations;
+  EXPECT_TRUE(empty_operations.IsTranslation());
+
+  TransformOperations identity;
+  identity.AppendIdentity();
+  EXPECT_TRUE(identity.IsTranslation());
+
+  TransformOperations translate;
+  translate.AppendTranslate(1.f, 2.f, 3.f);
+  EXPECT_TRUE(translate.IsTranslation());
+
+  TransformOperations rotate;
+  rotate.AppendRotate(1.f, 2.f, 3.f, 4.f);
+  EXPECT_FALSE(rotate.IsTranslation());
+
+  TransformOperations scale;
+  scale.AppendScale(1.f, 2.f, 3.f);
+  EXPECT_FALSE(scale.IsTranslation());
+
+  TransformOperations skew;
+  skew.AppendSkew(1.f, 2.f);
+  EXPECT_FALSE(skew.IsTranslation());
+
+  TransformOperations perspective;
+  perspective.AppendPerspective(1.f);
+  EXPECT_FALSE(perspective.IsTranslation());
+
+  TransformOperations identity_matrix;
+  identity_matrix.AppendMatrix(gfx::Transform());
+  EXPECT_TRUE(identity_matrix.IsTranslation());
+
+  TransformOperations translation_matrix;
+  gfx::Transform translation_transform;
+  translation_transform.Translate3d(1.f, 2.f, 3.f);
+  translation_matrix.AppendMatrix(translation_transform);
+  EXPECT_TRUE(translation_matrix.IsTranslation());
+
+  TransformOperations scaling_matrix;
+  gfx::Transform scaling_transform;
+  scaling_transform.Scale(2.f, 2.f);
+  scaling_matrix.AppendMatrix(scaling_transform);
+  EXPECT_FALSE(scaling_matrix.IsTranslation());
+}
+
+TEST(TransformOperationTest, IsTranslationWithMultipleOperations) {
+  TransformOperations operations1;
+  operations1.AppendSkew(1.f, 2.f);
+  operations1.AppendTranslate(1.f, 2.f, 3.f);
+  operations1.AppendIdentity();
+  EXPECT_FALSE(operations1.IsTranslation());
+
+  TransformOperations operations2;
+  operations2.AppendIdentity();
+  operations2.AppendTranslate(3.f, 2.f, 1.f);
+  gfx::Transform translation_transform;
+  translation_transform.Translate3d(1.f, 2.f, 3.f);
+  operations2.AppendMatrix(translation_transform);
+  EXPECT_TRUE(operations2.IsTranslation());
+}
+
+TEST(TransformOperationTest, MaximumScale) {
+  TransformOperations operations1;
+  operations1.AppendScale(3.f, 2.f, 5.f);
+  TransformOperations operations2;
+  operations2.AppendScale(6.f, 5.f, 2.f);
+
+  float max_scale = 0.f;
+  EXPECT_TRUE(operations2.MaximumScale(operations1, 0.f, 1.f, &max_scale));
+  // x at progress 1.f
+  EXPECT_EQ(6.f, max_scale);
+
+  EXPECT_TRUE(operations2.MaximumScale(operations1, -1.f, 1.f, &max_scale));
+  // z at progress -1.f
+  EXPECT_EQ(8.f, max_scale);
+
+  EXPECT_TRUE(operations2.MaximumScale(operations1, 0.f, 2.f, &max_scale));
+  // x at progress 2.f
+  EXPECT_EQ(9.f, max_scale);
+
+  TransformOperations operations3;
+  operations3.AppendScale(1.f, 4.f, 1.f);
+  TransformOperations operations4;
+
+  EXPECT_TRUE(operations4.MaximumScale(operations3, 0.f, 1.f, &max_scale));
+  // y at progress 0.f
+  EXPECT_EQ(4.f, max_scale);
+
+  EXPECT_TRUE(operations4.MaximumScale(operations3, -1.f, 1.f, &max_scale));
+  // y at progress -1.f
+  EXPECT_EQ(7.f, max_scale);
+
+  EXPECT_TRUE(operations4.MaximumScale(operations3, 0.f, 2.f, &max_scale));
+  // y at progress 0.f
+  EXPECT_EQ(4.f, max_scale);
+
+  TransformOperations operations5;
+  operations5.AppendTranslate(1.f, 2.f, 3.f);
+  operations5.AppendScale(1.f, 1.f, 4.f);
+  gfx::Transform translation_transform;
+  translation_transform.Translate3d(1.f, 2.f, 3.f);
+  operations5.AppendMatrix(translation_transform);
+  TransformOperations operations6;
+  operations6.AppendTranslate(2.f, 3.f, 4.f);
+  operations6.AppendScale(2.f, 5.f, 1.f);
+  operations6.AppendMatrix(translation_transform);
+
+  EXPECT_TRUE(operations6.MaximumScale(operations5, 0.f, 1.f, &max_scale));
+  // y at progress 1.f
+  EXPECT_EQ(5.f, max_scale);
+
+  EXPECT_TRUE(operations6.MaximumScale(operations5, -1.f, 1.f, &max_scale));
+  // z at progress -1.f
+  EXPECT_EQ(7.f, max_scale);
+
+  EXPECT_TRUE(operations6.MaximumScale(operations5, 0.f, 2.f, &max_scale));
+  // y at progress 2.f
+  EXPECT_EQ(9.f, max_scale);
+}
+
+TEST(TransformOperationTest, MaximumScaleCannotBeComputed) {
+  TransformOperations operations1;
+  operations1.AppendScale(2.f, 2.f, 2.f);
+  TransformOperations operations2;
+  operations2.AppendTranslate(1.f, 2.f, 3.f);
+
+  float max_scale = 0.f;
+
+  // Non-matching operations.
+  EXPECT_FALSE(operations2.MaximumScale(operations1, 0.f, 1.f, &max_scale));
+
+  TransformOperations operations3;
+  operations3.AppendScale(2.f, 2.f, 2.f);
+  operations3.AppendTranslate(1.f, 2.f, 3.f);
+  operations3.AppendScale(3.f, 3.f, 3.f);
+  TransformOperations operations4;
+  operations4.AppendScale(4.f, 4.f, 4.f);
+  operations4.AppendTranslate(2.f, 3.f, 4.f);
+  operations4.AppendScale(5.f, 5.f, 5.f);
+
+  // More that one scale operation in a sequence.
+  EXPECT_FALSE(operations4.MaximumScale(operations3, 0.f, 1.f, &max_scale));
+
+  TransformOperations operations5;
+  operations5.AppendScale(2.f, 2.f, 2.f);
+  gfx::Transform scaling_transform;
+  scaling_transform.Scale(2.f, 2.f);
+  operations5.AppendMatrix(scaling_transform);
+  TransformOperations operations6;
+  operations6.AppendScale(3.f, 3.f, 3.f);
+  gfx::Transform translation_transform;
+  translation_transform.Translate3d(1.f, 2.f, 3.f);
+  operations6.AppendMatrix(translation_transform);
+
+  // Non-translation matrix operation.
+  EXPECT_FALSE(operations6.MaximumScale(operations5, 0.f, 1.f, &max_scale));
+
+  TransformOperations operations7;
+  operations7.AppendScale(2.f, 2.f, 2.f);
+  operations7.AppendRotate(1.f, 2.f, 3.f, 4.f);
+  TransformOperations operations8;
+  operations8.AppendScale(3.f, 3.f, 3.f);
+  operations8.AppendRotate(3.f, 4.f, 5.f, 6.f);
+
+  // Rotation operation.
+  EXPECT_FALSE(operations8.MaximumScale(operations7, 0.f, 1.f, &max_scale));
+
+  TransformOperations operations9;
+  operations9.AppendScale(2.f, 2.f, 2.f);
+  operations9.AppendSkew(1.f, 2.f);
+  TransformOperations operations10;
+  operations10.AppendScale(3.f, 3.f, 3.f);
+  operations10.AppendSkew(3.f, 4.f);
+
+  // Skew operation.
+  EXPECT_FALSE(operations10.MaximumScale(operations9, 0.f, 1.f, &max_scale));
+
+  TransformOperations operations11;
+  operations11.AppendScale(2.f, 2.f, 2.f);
+  operations11.AppendPerspective(1.f);
+  TransformOperations operations12;
+  operations12.AppendScale(3.f, 3.f, 3.f);
+  operations12.AppendPerspective(3.f);
+
+  // Perspective operation.
+  EXPECT_FALSE(operations12.MaximumScale(operations11, 0.f, 1.f, &max_scale));
+}
+
 }  // namespace
 }  // namespace cc