blob: fb883616c3035166e8cd36ce4911ae6d4c5aef3f [file] [log] [blame]
// Copyright 2020 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/animation/scroll_timeline_offset.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "third_party/blink/renderer/core/animation/animation_test_helpers.h"
#include "third_party/blink/renderer/core/animation/scroll_timeline_offset.h"
#include "third_party/blink/renderer/core/css/parser/css_parser_context.h"
#include "third_party/blink/renderer/core/dom/document.h"
#include "third_party/blink/renderer/core/html/html_element.h"
#include "third_party/blink/renderer/core/testing/page_test_base.h"
namespace blink {
class ScrollTimelineOffsetTest : public PageTestBase {
public:
ScrollTimelineOffset* ScrollBasedOffsetFrom(String string) {
return ScrollTimelineOffset::Create(
animation_test_helpers::OffsetFromString(GetDocument(), string));
}
ScrollTimelineOffset* ElementBasedOffsetFrom(Element* target,
String edge,
double threshold) {
auto* inner = CreateElementBasedOffset(target, edge, threshold);
if (!inner)
return nullptr;
ScrollTimelineOffsetValue param;
param.SetScrollTimelineElementBasedOffset(inner);
return ScrollTimelineOffset::Create(param);
}
private:
ScrollTimelineElementBasedOffset* CreateElementBasedOffset(Element* target,
String edge,
double threshold) {
auto* value = ScrollTimelineElementBasedOffset::Create();
value->setTarget(target);
value->setEdge(edge);
value->setThreshold(threshold);
return value;
}
};
TEST_F(ScrollTimelineOffsetTest, Equality) {
GetDocument().body()->setInnerHTML("<i id=e1></i><i id=e2></i>");
UpdateAllLifecyclePhasesForTest();
Element* e1 = GetDocument().getElementById("e1");
Element* e2 = GetDocument().getElementById("e2");
ASSERT_TRUE(e1);
ASSERT_TRUE(e2);
EXPECT_EQ(*ScrollBasedOffsetFrom("10px"), *ScrollBasedOffsetFrom("10px"));
EXPECT_EQ(*ScrollBasedOffsetFrom("10%"), *ScrollBasedOffsetFrom("10%"));
EXPECT_EQ(*ElementBasedOffsetFrom(e1, "start", 0),
*ElementBasedOffsetFrom(e1, "start", 0));
// Different types of offset:
EXPECT_NE(*ScrollBasedOffsetFrom("10px"),
*ElementBasedOffsetFrom(e1, "start", 0));
EXPECT_NE(*ElementBasedOffsetFrom(e1, "start", 0),
*ScrollBasedOffsetFrom("10px"));
// Different unit:
EXPECT_NE(*ScrollBasedOffsetFrom("10px"), *ScrollBasedOffsetFrom("10%"));
EXPECT_NE(*ScrollBasedOffsetFrom("10em"), *ScrollBasedOffsetFrom("10px"));
// Different value:
EXPECT_NE(*ScrollBasedOffsetFrom("10em"), *ScrollBasedOffsetFrom("50em"));
EXPECT_NE(*ScrollBasedOffsetFrom("10px"), *ScrollBasedOffsetFrom("10.5px"));
// Different target:
EXPECT_NE(*ElementBasedOffsetFrom(e1, "start", 0),
*ElementBasedOffsetFrom(e2, "start", 0));
// Different edge:
EXPECT_NE(*ElementBasedOffsetFrom(e1, "start", 0),
*ElementBasedOffsetFrom(e1, "end", 0));
// Different threshold:
EXPECT_NE(*ElementBasedOffsetFrom(e1, "start", 0),
*ElementBasedOffsetFrom(e1, "start", 1));
}
} // namespace blink