Merge c2d9aefa15b18f806a692ee8276ec058bac76c98 into eb165ec6641162dbcf4e4296d7cfbdd488e70b60

This commit is contained in:
Vraiment 2022-02-16 12:18:22 +01:00 committed by GitHub
commit 9a75bf9602
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 11637 additions and 71 deletions

1
.gitignore vendored
View File

@ -47,6 +47,7 @@ libSDL2pp.dylib
libSDL2pp.*.dylib
tests/live_*
tests/test_*
tests/unit_tests_catch
!tests/live_*.cc
!tests/test_*.cc

View File

@ -1,8 +1,6 @@
# simple command-line tests
SET(CLI_TESTS
test_color
test_color_constexpr
test_error
test_optional
test_pointrect
test_pointrect_constexpr
@ -60,3 +58,13 @@ FOREACH(TEST ${LIVE_TESTS})
ADD_TEST(${TEST} ${TEST})
ENDIF(SDL2PP_ENABLE_LIVE_TESTS)
ENDFOREACH(TEST ${TESTS})
# Catch based tests
SET(CATCH_CLI_TESTS
test_color
test_error
)
ADD_EXECUTABLE(unit_tests_catch catch_main.cc ${CATCH_CLI_TESTS})
TARGET_LINK_LIBRARIES(unit_tests_catch ${SDL2PP_LIBRARIES})
ADD_TEST(unit_tests_catch unit_tests_catch)

11545
tests/catch.hpp Normal file

File diff suppressed because it is too large Load Diff

2
tests/catch_main.cc Normal file
View File

@ -0,0 +1,2 @@
#define CATCH_CONFIG_MAIN
#include "catch.hpp"

View File

@ -1,88 +1,95 @@
#include <SDL_main.h>
#include "catch.hpp"
#include <SDL2pp/Color.hh>
#include "testing.h"
using namespace SDL2pp;
BEGIN_TEST(int, char*[])
{
EXPECT_TRUE(Color(1, 2, 3, 4) == Color(1, 2, 3, 4));
EXPECT_TRUE(Color(1, 2, 3, 4) != Color(0, 2, 3, 4));
EXPECT_TRUE(Color(1, 2, 3, 4) != Color(1, 0, 3, 4));
EXPECT_TRUE(Color(1, 2, 3, 4) != Color(0, 2, 3, 4));
EXPECT_TRUE(Color(1, 2, 3, 4) != Color(1, 2, 3, 0));
using Catch::Equals;
EXPECT_TRUE(SDL_Color{1, 2, 3, 4} == Color(1, 2, 3, 4));
EXPECT_TRUE(Color(1, 2, 3, 4) == SDL_Color{1, 2, 3, 4});
}
auto const TAGS = "[graphics][color]";
{
EXPECT_TRUE(Color() == Color(0, 0, 0, 0));
EXPECT_TRUE(Color(1, 2, 3) == Color(1, 2, 3, 255));
TEST_CASE("Test Color class' constructors/comparision", TAGS)
{
CHECK(Color(1, 2, 3, 4) == Color(1, 2, 3, 4));
CHECK(Color(1, 2, 3, 4) != Color(0, 2, 3, 4));
CHECK(Color(1, 2, 3, 4) != Color(1, 0, 3, 4));
CHECK(Color(1, 2, 3, 4) != Color(0, 2, 3, 4));
CHECK(Color(1, 2, 3, 4) != Color(1, 2, 3, 0));
Color c(1,2,3,4);
CHECK((SDL_Color{1, 2, 3, 4} == Color(1, 2, 3, 4)));
CHECK((Color(1, 2, 3, 4) == SDL_Color{1, 2, 3, 4}));
EXPECT_TRUE(c.r == 1 && c.g == 2 && c.b == 3 && c.a == 4);
EXPECT_TRUE(c.GetRed() == 1 && c.GetGreen() == 2 && c.GetBlue() == 3 && c.GetAlpha() == 4);
CHECK(Color() == Color(0, 0, 0, 0));
CHECK(Color(1, 2, 3) == Color(1, 2, 3, 255));
}
c = Color(4, 5, 6, 7);
TEST_CASE("Test Color class' getters/getters", TAGS)
{
Color c(1,2,3,4);
EXPECT_TRUE(c.r == 4 && c.g == 5 && c.b == 6 && c.a == 7);
EXPECT_TRUE(c.GetRed() == 4 && c.GetGreen() == 5 && c.GetBlue() == 6 && c.GetAlpha() == 7);
CHECK((c.r == 1 && c.g == 2 && c.b == 3 && c.a == 4));
CHECK((c.GetRed() == 1 && c.GetGreen() == 2 && c.GetBlue() == 3 && c.GetAlpha() == 4));
c.SetRed(8).SetGreen(9).SetBlue(10).SetAlpha(11);
c = Color(4, 5, 6, 7);
EXPECT_TRUE(c.r == 8 && c.g == 9 && c.b == 10 && c.a == 11);
CHECK((c.r == 4 && c.g == 5 && c.b == 6 && c.a == 7));
CHECK((c.GetRed() == 4 && c.GetGreen() == 5 && c.GetBlue() == 6 && c.GetAlpha() == 7));
c = SDL_Color{12, 13, 14, 15};
c.SetRed(8).SetGreen(9).SetBlue(10).SetAlpha(11);
EXPECT_TRUE(c.r == 12 && c.g == 13 && c.b == 14 && c.a == 15);
}
CHECK((c.r == 8 && c.g == 9 && c.b == 10 && c.a == 11));
{
// Self assignment
Color c(1, 2, 3, 4);
c = SDL_Color{12, 13, 14, 15};
c = c;
CHECK((c.r == 12 && c.g == 13 && c.b == 14 && c.a == 15));
}
EXPECT_TRUE(c == Color(1, 2, 3, 4));
}
TEST_CASE("Test Color class' self assignment", TAGS)
{
// Self assignment
Color c(1, 2, 3, 4);
{
// Self move-assignment
Color c(1, 2, 3, 4);
c = c;
Color& cref = c;
c = std::move(cref);
CHECK(c == Color(1, 2, 3, 4));
}
EXPECT_TRUE(c.GetRed() == 1 && c.GetGreen() == 2 && c.GetBlue() == 3 && c.GetAlpha() == 4);
}
TEST_CASE("Test Color class' self move-assignment", TAGS)
{
// Self move-assignment
Color c(1, 2, 3, 4);
{
// Hashes
EXPECT_TRUE(std::hash<Color>()(Color(1, 2, 3, 4)) == std::hash<Color>()(Color(1, 2, 3, 4)));
EXPECT_TRUE(std::hash<Color>()(Color(1, 2, 3, 4)) != std::hash<Color>()(Color(2, 1, 3, 4)));
EXPECT_TRUE(std::hash<Color>()(Color(1, 2, 3, 4)) != std::hash<Color>()(Color(1, 2, 4, 3)));
}
Color& cref = c;
c = std::move(cref);
{
// Construction from and comparison with SDL objects
SDL_Color sdlcolor = { 1, 2, 3, 4 };
CHECK((c.GetRed() == 1 && c.GetGreen() == 2 && c.GetBlue() == 3 && c.GetAlpha() == 4));
}
EXPECT_TRUE(Color(sdlcolor) == Color(1, 2, 3, 4));
TEST_CASE("Test Color class hash methods", TAGS)
{
// Hashes
CHECK(std::hash<Color>()(Color(1, 2, 3, 4)) == std::hash<Color>()(Color(1, 2, 3, 4)));
CHECK(std::hash<Color>()(Color(1, 2, 3, 4)) != std::hash<Color>()(Color(2, 1, 3, 4)));
CHECK(std::hash<Color>()(Color(1, 2, 3, 4)) != std::hash<Color>()(Color(1, 2, 4, 3)));
}
EXPECT_TRUE(Color(sdlcolor) != Color(0, 2, 3, 4));
TEST_CASE("Test Color class' operations with SDL_Color", TAGS)
{
// Construction from and comparison with SDL objects
SDL_Color sdlcolor = { 1, 2, 3, 4 };
EXPECT_TRUE(Color(1, 2, 3, 4) == sdlcolor);
EXPECT_TRUE(Color(0, 2, 3, 4) != sdlcolor);
}
CHECK(Color(sdlcolor) == Color(1, 2, 3, 4));
{
// streams
std::stringstream stream;
stream << Color(1, 2, 3, 4);
EXPECT_EQUAL(stream.str(), "[r:1,g:2,b:3,a:4]");
}
END_TEST()
CHECK(Color(sdlcolor) != Color(0, 2, 3, 4));
CHECK(Color(1, 2, 3, 4) == sdlcolor);
CHECK(Color(0, 2, 3, 4) != sdlcolor);
}
TEST_CASE("Test Color class' stream<< operator", TAGS)
{
// streams
std::stringstream stream;
stream << Color(1, 2, 3, 4);
CHECK_THAT(stream.str(), Equals("[r:1,g:2,b:3,a:4]"));
}

View File

@ -1,13 +1,16 @@
#include <SDL_main.h>
#include "catch.hpp"
#include <SDL_error.h>
#include <SDL2pp/Exception.hh>
#include "testing.h"
using namespace SDL2pp;
BEGIN_TEST(int, char*[])
using Catch::Equals;
auto const TAGS = "[general][error]";
TEST_CASE("Test throwing Exception class", TAGS) {
SDL_SetError("BarError");
try {
@ -15,8 +18,8 @@ BEGIN_TEST(int, char*[])
} catch (SDL2pp::Exception& e) {
// this SDL_SetError should not clobber Exception contents
SDL_SetError("AnotherError");
EXPECT_EQUAL(e.GetSDLFunction(), "FooFunction");
EXPECT_EQUAL(e.GetSDLError(), "BarError");
EXPECT_EQUAL((std::string)e.what(), "FooFunction failed: BarError");
CHECK_THAT(e.GetSDLFunction(), Equals("FooFunction"));
CHECK_THAT(e.GetSDLError(), Equals("BarError"));
CHECK_THAT(e.what(), Equals("FooFunction failed: BarError"));
}
END_TEST()
}