blob: 1132a162fcdaa6b6f07ff6b2f25787f75e08c600 [file] [log] [blame]
// Copyright 2015 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 "third_party/blink/renderer/core/page/scrolling/scroll_state.h"
#include <memory>
#include "testing/gtest/include/gtest/gtest.h"
#include "third_party/blink/renderer/core/dom/document.h"
#include "third_party/blink/renderer/core/dom/element.h"
namespace blink {
namespace {
ScrollState* CreateScrollState(double delta_x,
double delta_y,
bool beginning,
bool ending) {
std::unique_ptr<ScrollStateData> scroll_state_data =
std::make_unique<ScrollStateData>();
scroll_state_data->delta_x = delta_x;
scroll_state_data->delta_y = delta_y;
scroll_state_data->is_beginning = beginning;
scroll_state_data->is_ending = ending;
return ScrollState::Create(std::move(scroll_state_data));
}
class ScrollStateTest : public testing::Test {};
TEST_F(ScrollStateTest, ConsumeDeltaNative) {
const float kDeltaX = 12.3;
const float kDeltaY = 3.9;
const float kDeltaXToConsume = 1.2;
const float kDeltaYToConsume = 2.3;
ScrollState* scroll_state = CreateScrollState(kDeltaX, kDeltaY, false, false);
EXPECT_FLOAT_EQ(kDeltaX, scroll_state->deltaX());
EXPECT_FLOAT_EQ(kDeltaY, scroll_state->deltaY());
EXPECT_FALSE(scroll_state->DeltaConsumedForScrollSequence());
EXPECT_FALSE(scroll_state->FullyConsumed());
scroll_state->ConsumeDeltaNative(0, 0);
EXPECT_FLOAT_EQ(kDeltaX, scroll_state->deltaX());
EXPECT_FLOAT_EQ(kDeltaY, scroll_state->deltaY());
EXPECT_FALSE(scroll_state->DeltaConsumedForScrollSequence());
EXPECT_FALSE(scroll_state->FullyConsumed());
scroll_state->ConsumeDeltaNative(kDeltaXToConsume, 0);
EXPECT_FLOAT_EQ(kDeltaX - kDeltaXToConsume, scroll_state->deltaX());
EXPECT_FLOAT_EQ(kDeltaY, scroll_state->deltaY());
EXPECT_TRUE(scroll_state->DeltaConsumedForScrollSequence());
EXPECT_FALSE(scroll_state->FullyConsumed());
scroll_state->ConsumeDeltaNative(0, kDeltaYToConsume);
EXPECT_FLOAT_EQ(kDeltaX - kDeltaXToConsume, scroll_state->deltaX());
EXPECT_FLOAT_EQ(kDeltaY - kDeltaYToConsume, scroll_state->deltaY());
EXPECT_TRUE(scroll_state->DeltaConsumedForScrollSequence());
EXPECT_FALSE(scroll_state->FullyConsumed());
scroll_state->ConsumeDeltaNative(scroll_state->deltaX(),
scroll_state->deltaY());
EXPECT_TRUE(scroll_state->DeltaConsumedForScrollSequence());
EXPECT_TRUE(scroll_state->FullyConsumed());
}
TEST_F(ScrollStateTest, CurrentNativeScrollingElement) {
ScrollState* scroll_state = CreateScrollState(0, 0, false, false);
Element* element =
Element::Create(QualifiedName::Null(), Document::CreateForTest());
scroll_state->SetCurrentNativeScrollingNode(element);
EXPECT_EQ(element, scroll_state->CurrentNativeScrollingNode());
}
TEST_F(ScrollStateTest, FullyConsumed) {
ScrollState* scroll_state_begin = CreateScrollState(0, 0, true, false);
ScrollState* scroll_state = CreateScrollState(0, 0, false, false);
ScrollState* scroll_state_end = CreateScrollState(0, 0, false, true);
EXPECT_FALSE(scroll_state_begin->FullyConsumed());
EXPECT_TRUE(scroll_state->FullyConsumed());
EXPECT_FALSE(scroll_state_end->FullyConsumed());
}
} // namespace
} // namespace blink