blob: 26c204b299fa49f065cd2bd0bb03625f2faf4d5b [file] [log] [blame]
// Copyright (c) 2011 The Chromium OS 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 <cmath>
#include <gflags/gflags.h>
#include <gtest/gtest.h>
#include "window_manager/compositor/animation.h"
#include "window_manager/test_lib.h"
#include "window_manager/util.h"
DEFINE_bool(logtostderr, false,
"Print debugging messages to stderr (suppressed otherwise)");
using base::TimeDelta;
using base::TimeTicks;
using window_manager::util::CreateTimeTicksFromMs;
namespace window_manager {
typedef BasicWindowManagerTest AnimationTest;
TEST_F(AnimationTest, Basic) {
// Animate from -10.0 at time 0 to 10.0 at time 20.
TimeTicks now = CreateTimeTicksFromMs(0);
Animation anim(-10.0f, now);
anim.AppendKeyframe(10.0f, TimeDelta::FromMilliseconds(20));
EXPECT_FALSE(anim.IsDone(now));
EXPECT_EQ(-10, static_cast<int>(roundf(anim.GetValue(now))));
now = CreateTimeTicksFromMs(5);
EXPECT_FALSE(anim.IsDone(now));
EXPECT_EQ(static_cast<int>(round(-sqrt(50.0f))),
static_cast<int>(roundf(anim.GetValue(now))));
now = CreateTimeTicksFromMs(10);
EXPECT_FALSE(anim.IsDone(now));
EXPECT_EQ(0, static_cast<int>(roundf(anim.GetValue(now))));
now = CreateTimeTicksFromMs(15);
EXPECT_FALSE(anim.IsDone(now));
EXPECT_EQ(static_cast<int>(round(sqrt(50.0f))),
static_cast<int>(roundf(anim.GetValue(now))));
now = CreateTimeTicksFromMs(20);
EXPECT_TRUE(anim.IsDone(now));
EXPECT_EQ(10, static_cast<int>(roundf(anim.GetValue(now))));
now = CreateTimeTicksFromMs(25);
EXPECT_TRUE(anim.IsDone(now));
EXPECT_EQ(10, static_cast<int>(roundf(anim.GetValue(now))));
EXPECT_EQ(10, static_cast<int>(roundf(anim.GetEndValue())));
}
TEST_F(AnimationTest, MultipleKeyframes) {
TimeTicks now = CreateTimeTicksFromMs(0);
Animation anim(0, now);
anim.AppendKeyframe(20, TimeDelta::FromMilliseconds(10));
anim.AppendKeyframe(60, TimeDelta::FromMilliseconds(20));
EXPECT_FALSE(anim.IsDone(now));
EXPECT_EQ(0, static_cast<int>(roundf(anim.GetValue(now))));
now = CreateTimeTicksFromMs(5);
EXPECT_FALSE(anim.IsDone(now));
EXPECT_EQ(10, static_cast<int>(roundf(anim.GetValue(now))));
now = CreateTimeTicksFromMs(10);
EXPECT_FALSE(anim.IsDone(now));
EXPECT_EQ(20, static_cast<int>(roundf(anim.GetValue(now))));
now = CreateTimeTicksFromMs(20);
EXPECT_FALSE(anim.IsDone(now));
EXPECT_EQ(40, static_cast<int>(roundf(anim.GetValue(now))));
now = CreateTimeTicksFromMs(30);
EXPECT_TRUE(anim.IsDone(now));
EXPECT_EQ(60, static_cast<int>(roundf(anim.GetValue(now))));
}
} // namespace window_manager
int main(int argc, char** argv) {
return window_manager::InitAndRunTests(&argc, argv, &FLAGS_logtostderr);
}