| #ifndef _CATCH_RIVE_TESTING_ | |
| #define _CATCH_RIVE_TESTING_ | |
| #include <catch.hpp> | |
| #include <sstream> | |
| #include "rive/math/mat2d.hpp" | |
| #include "rive/text/cursor.hpp" | |
| bool aboutEqual(const rive::Mat2D& a, const rive::Mat2D& b); | |
| // StringMaker doesn't work for Vec2D. | |
| #define CHECK_VEC2D(a, b) \ | |
| CHECK(a.x == b.x); \ | |
| CHECK(a.y == b.y); | |
| #define CHECK_AABB(a, b) \ | |
| CHECK_VEC2D(a.min(), b.min()); \ | |
| CHECK_VEC2D(a.max(), b.max()); | |
| namespace Catch | |
| { | |
| template <> struct StringMaker<rive::Mat2D> | |
| { | |
| static std::string convert(rive::Mat2D const& value) | |
| { | |
| std::ostringstream os; | |
| os << value[0] << ", " << value[1] << ", " << value[2] << ", " | |
| << value[3] << ", " << value[4] << ", " << value[5]; | |
| return os.str(); | |
| } | |
| }; | |
| template <> struct StringMaker<rive::AABB> | |
| { | |
| static std::string convert(rive::AABB const& value) | |
| { | |
| std::ostringstream os; | |
| os << "min: " << value.minX << ", " << value.minY | |
| << " max: " << value.maxX << ", " << value.maxY; | |
| return os.str(); | |
| } | |
| }; | |
| #ifdef WITH_RIVE_TEXT | |
| template <> struct StringMaker<rive::CursorPosition> | |
| { | |
| static std::string convert(rive::CursorPosition const& value) | |
| { | |
| std::ostringstream os; | |
| os << "Line: " << value.lineIndex() | |
| << ", CodePointIndex: " << value.codePointIndex(); | |
| return os.str(); | |
| } | |
| }; | |
| #endif | |
| } // namespace Catch | |
| #endif |