2022-03-17 00:05:48 +08:00
|
|
|
#include <SFML/Graphics/Shape.hpp>
|
|
|
|
|
2023-01-18 12:51:08 +08:00
|
|
|
#include <catch2/catch_test_macros.hpp>
|
2022-03-17 00:05:48 +08:00
|
|
|
|
2022-07-05 00:20:58 +08:00
|
|
|
#include <GraphicsUtil.hpp>
|
2022-07-25 14:36:05 +08:00
|
|
|
#include <type_traits>
|
|
|
|
|
2022-03-17 00:05:48 +08:00
|
|
|
class TriangleShape : public sf::Shape
|
|
|
|
{
|
|
|
|
public:
|
2022-07-05 00:20:58 +08:00
|
|
|
explicit TriangleShape(const sf::Vector2f& size) : m_size(size)
|
2022-03-17 00:05:48 +08:00
|
|
|
{
|
|
|
|
update();
|
|
|
|
}
|
|
|
|
|
|
|
|
std::size_t getPointCount() const override
|
|
|
|
{
|
|
|
|
return 3;
|
|
|
|
}
|
|
|
|
|
|
|
|
sf::Vector2f getPoint(std::size_t index) const override
|
|
|
|
{
|
|
|
|
switch (index)
|
|
|
|
{
|
|
|
|
default:
|
2022-07-05 00:20:58 +08:00
|
|
|
case 0:
|
|
|
|
return sf::Vector2f(m_size.x / 2, 0);
|
|
|
|
case 1:
|
|
|
|
return sf::Vector2f(0, m_size.y);
|
|
|
|
case 2:
|
|
|
|
return sf::Vector2f(m_size.x, m_size.y);
|
2022-03-17 00:05:48 +08:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
private:
|
|
|
|
sf::Vector2f m_size;
|
|
|
|
};
|
|
|
|
|
2022-07-05 13:51:18 +08:00
|
|
|
TEST_CASE("[Graphics] sf::Shape")
|
2022-03-17 00:05:48 +08:00
|
|
|
{
|
2023-01-18 12:51:08 +08:00
|
|
|
SECTION("Type traits")
|
|
|
|
{
|
|
|
|
STATIC_CHECK(!std::is_constructible_v<sf::Shape>);
|
|
|
|
STATIC_CHECK(!std::is_copy_constructible_v<sf::Shape>);
|
|
|
|
STATIC_CHECK(std::is_copy_assignable_v<sf::Shape>);
|
|
|
|
STATIC_CHECK(!std::is_move_constructible_v<sf::Shape>);
|
|
|
|
STATIC_CHECK(std::is_nothrow_move_assignable_v<sf::Shape>);
|
|
|
|
STATIC_CHECK(std::has_virtual_destructor_v<sf::Shape>);
|
|
|
|
}
|
|
|
|
|
|
|
|
SECTION("Default constructor")
|
2022-03-17 00:05:48 +08:00
|
|
|
{
|
|
|
|
const TriangleShape triangleShape({0, 0});
|
|
|
|
CHECK(triangleShape.getTexture() == nullptr);
|
|
|
|
CHECK(triangleShape.getTextureRect() == sf::IntRect());
|
|
|
|
CHECK(triangleShape.getFillColor() == sf::Color::White);
|
|
|
|
CHECK(triangleShape.getOutlineColor() == sf::Color::White);
|
|
|
|
CHECK(triangleShape.getOutlineThickness() == 0.0f);
|
|
|
|
CHECK(triangleShape.getLocalBounds() == sf::FloatRect());
|
|
|
|
CHECK(triangleShape.getGlobalBounds() == sf::FloatRect());
|
|
|
|
}
|
|
|
|
|
2023-01-18 12:51:08 +08:00
|
|
|
SECTION("Set/get texture rect")
|
2022-03-17 00:05:48 +08:00
|
|
|
{
|
|
|
|
TriangleShape triangleShape({});
|
|
|
|
triangleShape.setTextureRect({{4, 5}, {6, 7}});
|
|
|
|
CHECK(triangleShape.getTextureRect() == sf::IntRect({4, 5}, {6, 7}));
|
|
|
|
}
|
|
|
|
|
2023-01-18 12:51:08 +08:00
|
|
|
SECTION("Set/get fill color")
|
2022-03-17 00:05:48 +08:00
|
|
|
{
|
|
|
|
TriangleShape triangleShape({});
|
|
|
|
triangleShape.setFillColor(sf::Color::Cyan);
|
|
|
|
CHECK(triangleShape.getFillColor() == sf::Color::Cyan);
|
|
|
|
}
|
|
|
|
|
2023-01-18 12:51:08 +08:00
|
|
|
SECTION("Set/get outline color")
|
2022-03-17 00:05:48 +08:00
|
|
|
{
|
|
|
|
TriangleShape triangleShape({});
|
|
|
|
triangleShape.setOutlineColor(sf::Color::Magenta);
|
|
|
|
CHECK(triangleShape.getOutlineColor() == sf::Color::Magenta);
|
|
|
|
}
|
|
|
|
|
2023-01-18 12:51:08 +08:00
|
|
|
SECTION("Set/get outline thickness")
|
2022-03-17 00:05:48 +08:00
|
|
|
{
|
|
|
|
TriangleShape triangleShape({});
|
|
|
|
triangleShape.setOutlineThickness(3.14f);
|
|
|
|
CHECK(triangleShape.getOutlineThickness() == 3.14f);
|
|
|
|
}
|
|
|
|
|
2023-04-24 15:25:44 +08:00
|
|
|
SECTION("Virtual functions: getPoint, getPointCount, getGeometricCenter")
|
2022-03-17 00:05:48 +08:00
|
|
|
{
|
|
|
|
const TriangleShape triangleShape({2, 2});
|
|
|
|
CHECK(triangleShape.getPointCount() == 3);
|
|
|
|
CHECK(triangleShape.getPoint(0) == sf::Vector2f(1, 0));
|
|
|
|
CHECK(triangleShape.getPoint(1) == sf::Vector2f(0, 2));
|
|
|
|
CHECK(triangleShape.getPoint(2) == sf::Vector2f(2, 2));
|
2023-04-24 15:25:44 +08:00
|
|
|
CHECK(triangleShape.getGeometricCenter() == sf::Vector2f(1.f, 4.f / 3.f));
|
2022-03-17 00:05:48 +08:00
|
|
|
}
|
|
|
|
|
2023-01-18 12:51:08 +08:00
|
|
|
SECTION("Get bounds")
|
2022-03-17 00:05:48 +08:00
|
|
|
{
|
|
|
|
TriangleShape triangleShape({2, 3});
|
|
|
|
CHECK(triangleShape.getLocalBounds() == sf::FloatRect({0, 0}, {2, 3}));
|
|
|
|
CHECK(triangleShape.getGlobalBounds() == sf::FloatRect({0, 0}, {2, 3}));
|
|
|
|
triangleShape.move({1, 1});
|
|
|
|
triangleShape.rotate(sf::degrees(90));
|
|
|
|
CHECK(triangleShape.getLocalBounds() == sf::FloatRect({0, 0}, {2, 3}));
|
2022-05-03 06:38:33 +08:00
|
|
|
CHECK(triangleShape.getGlobalBounds().left == Approx(-2.f));
|
|
|
|
CHECK(triangleShape.getGlobalBounds().top == Approx(1.f));
|
|
|
|
CHECK(triangleShape.getGlobalBounds().width == Approx(3.f));
|
|
|
|
CHECK(triangleShape.getGlobalBounds().height == Approx(2.f));
|
2022-03-17 00:05:48 +08:00
|
|
|
}
|
|
|
|
}
|