blob: 6c29072c050c0eb2b42f2d3c488d1a9bc4e847ed [file] [log] [blame]
// Copyright 2017 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/browser/vr/elements/throbber.h"
#include <memory>
#include "cc/animation/transform_operation.h"
#include "cc/animation/transform_operations.h"
#include "chrome/browser/vr/elements/ui_element.h"
#include "chrome/browser/vr/target_property.h"
#include "chrome/browser/vr/test/animation_utils.h"
#include "chrome/browser/vr/test/constants.h"
#include "chrome/browser/vr/ui_scene.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace vr {
namespace {
constexpr float kTestSize = 2.0;
constexpr float kInitialScale = 2.0;
constexpr float kInitialOpacity = 0.8;
} // namespace
TEST(Throbber, CircleGrowAnimation) {
UiScene scene;
scene.RunFirstFrameForTest();
auto element = std::make_unique<Throbber>();
element->SetSize(kTestSize, kTestSize);
element->set_corner_radius(kTestSize / 2);
element->SetScale(kInitialScale, kInitialScale, kInitialScale);
element->SetOpacity(kInitialOpacity);
Throbber* throbber = element.get();
scene.AddUiElement(kRoot, std::move(element));
throbber->SetCircleGrowAnimationEnabled(true);
scene.OnBeginFrame(MsToTicks(1), kStartHeadPose);
EXPECT_TRUE(throbber->IsAnimatingProperty(CIRCLE_GROW));
// Half way through animation.
scene.OnBeginFrame(MsToTicks(501), kStartHeadPose);
EXPECT_FLOAT_EQ(throbber->opacity(), kInitialOpacity / 2);
EXPECT_FLOAT_EQ(
throbber->GetTargetTransform().at(UiElement::kScaleIndex).scale.x,
kInitialScale * 1.5);
EXPECT_FLOAT_EQ(
throbber->GetTargetTransform().at(UiElement::kScaleIndex).scale.y,
kInitialScale * 1.5);
EXPECT_FLOAT_EQ(
throbber->GetTargetTransform().at(UiElement::kScaleIndex).scale.z,
kInitialScale);
// Reset to initial value.
throbber->SetCircleGrowAnimationEnabled(false);
EXPECT_FLOAT_EQ(throbber->opacity(), kInitialOpacity);
EXPECT_FLOAT_EQ(
throbber->GetTargetTransform().at(UiElement::kScaleIndex).scale.x,
kInitialScale);
EXPECT_FLOAT_EQ(
throbber->GetTargetTransform().at(UiElement::kScaleIndex).scale.y,
kInitialScale);
EXPECT_FLOAT_EQ(
throbber->GetTargetTransform().at(UiElement::kScaleIndex).scale.z,
kInitialScale);
}
} // namespace vr