Skip to content

Commit

Permalink
[SUTK] Added more unit test checks for scrollablility query functions…
Browse files Browse the repository at this point in the history
… in ScrollContainer
  • Loading branch information
ravi688 committed Jan 10, 2025
1 parent 1f6128b commit 134f531
Show file tree
Hide file tree
Showing 3 changed files with 41 additions and 0 deletions.
3 changes: 3 additions & 0 deletions sutk/include/sutk/ScrollContainer.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,9 @@ namespace SUTK
public:
ScrollContainer(UIDriver& driver, Container* parent = NULL) noexcept;

// Same as isScrollableHorziontal() || isScrollableVertical()
// But a bit more efficient than separately calling isScrollableHorziontal() and isScrollableVertical().
com::Bool isScrollable() const noexcept;
// direction: +ve means towards right, -ve means towards left
com::Bool isScrollableHorziontal(f32 direction) const noexcept;
// direction: +ve means downwards, -ve means upwards
Expand Down
6 changes: 6 additions & 0 deletions sutk/source/ScrollContainer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,12 @@ namespace SUTK
return cp;
}

com::Bool ScrollContainer::isScrollable() const noexcept
{
auto cp = getScrollableCompass();
return cp.up || cp.down || cp.left || cp.right;
}

com::Bool ScrollContainer::isScrollableHorziontal(f32 direction) const noexcept
{
auto cp = getScrollableCompass();
Expand Down
32 changes: 32 additions & 0 deletions sutk/source/tests/auto_tests/test.ScrollContainer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -28,16 +28,27 @@ namespace SUTK::AutoTests
// By default scroll margins must be zero
EXPECT_EQ(scrlbCnt->getScrollMargins(), RectMarginsf::zero());

// Since the width and height of the Scrollable ({ 5, 5 }) is smaller than { 40.0f, 10.0f }
// isScrollable() must return com::False
EXPECT_EQ(scrlCnt->isScrollable(), com::False);

// Test: Full Margin for RectEdge::Left
scrlbCnt->setFullScrollMargins(RectEdgeBits::Left);
EXPECT_EQ(scrlbCnt->getScrollMargins().left, scrlCnt->getSize().width);

EXPECT_EQ(scrlCnt->isScrollableRight(), com::True);
scrlCnt->addScrollDelta(Vec2Df::right() * 6.0f);
EXPECT_EQ(scrlbCnt->getPosition(), Vec2Df::right() * 6.0f);
EXPECT_EQ(scrlCnt->isScrollableRight(), com::True);

scrlCnt->addScrollDelta(Vec2Df::right() * 100.0f);
EXPECT_EQ(scrlbCnt->getPosition(), Vec2Df::right() * scrlCnt->getSize().width);
EXPECT_EQ(scrlCnt->isScrollableRight(), com::False);

scrlCnt->addScrollDelta(Vec2Df::left() * 100.0f);
EXPECT_EQ(scrlCnt->isScrollableLeft(), com::False);
EXPECT_EQ(scrlbCnt->getRect().getRight(), scrlCnt->getSize().width);
EXPECT_EQ(scrlCnt->isScrollableRight(), com::True);

// Test: Full Margin for RectEdge::Right
scrlbCnt->setFullScrollMargins(RectEdgeBits::Right);
Expand All @@ -46,12 +57,19 @@ namespace SUTK::AutoTests
EXPECT_EQ(scrlbCnt->getPosition(), Vec2Df::zero());
EXPECT_EQ(scrlbCnt->getScrollMargins().right, scrlCnt->getSize().width);

EXPECT_EQ(scrlCnt->isScrollableLeft(), com::True);
scrlCnt->addScrollDelta(Vec2Df::left() * 7.0f);
EXPECT_EQ(scrlbCnt->getPosition(), Vec2Df::left() * 5.0f);
EXPECT_EQ(scrlCnt->isScrollableLeft(), com::False);
EXPECT_EQ(scrlCnt->isScrollableRight(), com::True);

scrlCnt->addScrollDelta(Vec2Df::right() * 200.0f);
EXPECT_EQ(scrlbCnt->getPosition(), Vec2Df::zero());
EXPECT_EQ(scrlCnt->isScrollableRight(), com::False);

scrlCnt->addScrollDelta(Vec2Df::left() * 5.0f);
EXPECT_EQ(scrlbCnt->getRect().getLeft(), -5.0f);
EXPECT_EQ(scrlCnt->isScrollableLeft(), com::False);

// Test: Full Margin for RectEdge::Top
scrlbCnt->setFullScrollMargins(RectEdgeBits::Top);
Expand All @@ -61,12 +79,19 @@ namespace SUTK::AutoTests
EXPECT_EQ(scrlbCnt->getPosition(), Vec2Df::zero());
EXPECT_EQ(scrlbCnt->getScrollMargins().top, scrlCnt->getSize().height);

EXPECT_EQ(scrlCnt->isScrollableDown(), com::True);
scrlCnt->addScrollDelta(Vec2Df::down() * 6.0f);
EXPECT_EQ(scrlbCnt->getPosition(), Vec2Df::down() * 6.0f);
EXPECT_EQ(scrlCnt->isScrollableDown(), com::True);

scrlCnt->addScrollDelta(Vec2Df::down() * 100.0f);
EXPECT_EQ(scrlbCnt->getPosition(), Vec2Df::down() * scrlCnt->getSize().height);
EXPECT_EQ(scrlCnt->isScrollableDown(), com::False);

scrlCnt->addScrollDelta(Vec2Df::up() * 100.0f);
EXPECT_EQ(scrlbCnt->getRect().getBottom(), scrlCnt->getSize().height);
EXPECT_EQ(scrlCnt->isScrollableUp(), com::False);
EXPECT_EQ(scrlCnt->isScrollableDown(), com::True);

// Test: Full Margin for RectEdge::Bottom
scrlbCnt->setFullScrollMargins(RectEdgeBits::Bottom);
Expand All @@ -76,13 +101,20 @@ namespace SUTK::AutoTests
EXPECT_EQ(scrlbCnt->getPosition(), Vec2Df::zero());
EXPECT_EQ(scrlbCnt->getScrollMargins().bottom, scrlCnt->getSize().height);

EXPECT_EQ(scrlCnt->isScrollableUp(), com::True);
scrlCnt->addScrollDelta(Vec2Df::up() * 6.0f);
EXPECT_EQ(scrlbCnt->getPosition(), Vec2Df::up() * 5.0f);
EXPECT_EQ(scrlCnt->isScrollableUp(), com::False);

scrlCnt->addScrollDelta(Vec2Df::up() * 100.0f);
EXPECT_EQ(scrlbCnt->getPosition(), Vec2Df::up() * 5.0f);
EXPECT_EQ(scrlCnt->isScrollableUp(), com::False);

scrlCnt->addScrollDelta(Vec2Df::down() * 100.0f);
EXPECT_EQ(scrlbCnt->getRect().getBottom(), 5.0f);
EXPECT_EQ(scrlbCnt->getRect().getTop(), 0.0f);
EXPECT_EQ(scrlCnt->isScrollableUp(), com::True);
EXPECT_EQ(scrlCnt->isScrollableDown(), com::False);

driver->destroyContainer<ScrollableContainer<>>(scrlbCnt);
driver->destroyContainer<ScrollContainer>(scrlCnt);
Expand Down

0 comments on commit 134f531

Please sign in to comment.