Now off catch2 and on my own testing fuc2.

This commit is contained in:
Zed A. Shaw 2026-06-16 01:34:03 -04:00
parent 4f3fa59793
commit 1d11c8b162
10 changed files with 177 additions and 98 deletions

View file

@ -1,10 +1,20 @@
#include <catch2/catch_test_macros.hpp>
#include <fmt/core.h>
#include "guecs/ui.hpp"
#include <fmt/xchar.h>
#include <fuc2/testing.hpp>
using namespace guecs;
using namespace fuc2;
TEST_CASE("prototype one gui", "[ecs-gui]") {
// accidentally gutted, will recover later
namespace guecs_tests {
void test_prototype() {
// accidentally gutted, will recover later
}
fuc2::Set TESTS{
.name="GUECS tests (empty!)",
.tests={
{"test_prototype", test_prototype},
}
};
}

View file

@ -1,61 +1,72 @@
#include "guecs/lel.hpp"
#include <catch2/catch_test_macros.hpp>
#include <fmt/core.h>
#include <string>
#include <fuc2/testing.hpp>
TEST_CASE("test basic ops", "[lel]") {
lel::Parser parser(0, 0, 500, 500);
using namespace fuc2;
bool good = parser.parse(
"[ label_1 | label3 | test1]"
"[ *(300,300)text1 | %(150)people | ^test2]"
"[ >label2 | _ | .test3]"
"[ =message | buttons | test4]");
namespace lel_tests {
void test_basic_ops() {
lel::Parser parser(0, 0, 500, 500);
REQUIRE(good);
bool good = parser.parse(
"[ label_1 | label3 | test1]"
"[ *(300,300)text1 | %(150)people | ^test2]"
"[ >label2 | _ | .test3]"
"[ =message | buttons | test4]");
for(size_t rowcount = 0; rowcount < parser.grid.size(); rowcount++) {
auto& row = parser.grid[rowcount];
CHECK(good);
for(size_t colcount = 0; colcount < row.size(); colcount++) {
auto &name = row[colcount];
if(name == "_") {
REQUIRE(!parser.cells.contains(name));
} else if(name == "_MAIN") {
// it's the main cell which covers the whole area
auto &cell = parser.cells.at(name);
REQUIRE(cell.row == 0);
REQUIRE(cell.col == 0);
REQUIRE(cell.x == parser.grid_x);
REQUIRE(cell.y == parser.grid_y);
REQUIRE(cell.w == parser.grid_w);
REQUIRE(cell.h == parser.grid_h);
} else {
auto &cell = parser.cells.at(name);
REQUIRE(cell.row == int(rowcount));
REQUIRE(cell.col == int(colcount));
for(size_t rowcount = 0; rowcount < parser.grid.size(); rowcount++) {
auto& row = parser.grid[rowcount];
for(size_t colcount = 0; colcount < row.size(); colcount++) {
auto &name = row[colcount];
if(name == "_") {
CHECK(!parser.cells.contains(name));
} else if(name == "_MAIN") {
// it's the main cell which covers the whole area
auto &cell = parser.cells.at(name);
CHECK(cell.row == 0);
CHECK(cell.col == 0);
CHECK(cell.x == parser.grid_x);
CHECK(cell.y == parser.grid_y);
CHECK(cell.w == parser.grid_w);
CHECK(cell.h == parser.grid_h);
} else {
auto &cell = parser.cells.at(name);
CHECK(cell.row == int(rowcount));
CHECK(cell.col == int(colcount));
}
}
}
CHECK(parser.cells.size() == 11);
CHECK(parser.cells.at("label2").right == true);
CHECK(parser.cells.at("text1").expand == true);
CHECK(parser.cells.at("text1").w == 300);
CHECK(parser.cells.at("text1").h == 300);
CHECK(parser.cells.at("people").expand == false);
CHECK(parser.cells.at("message").expand == false);
CHECK(parser.cells.at("message").center == true);
for(auto& [name, cell] : parser.cells) {
CHECK(cell.w > 0);
CHECK(cell.h > 0);
}
auto hit = parser.hit(10, 10);
CHECK(*hit == "label_1");
auto nohit = parser.hit(1000, 1000);
CHECK(!nohit);
CHECK(nohit == std::nullopt);
}
REQUIRE(parser.cells.size() == 11);
REQUIRE(parser.cells.at("label2").right == true);
REQUIRE(parser.cells.at("text1").expand == true);
REQUIRE(parser.cells.at("text1").w == 300);
REQUIRE(parser.cells.at("text1").h == 300);
REQUIRE(parser.cells.at("people").expand == false);
REQUIRE(parser.cells.at("message").expand == false);
REQUIRE(parser.cells.at("message").center == true);
for(auto& [name, cell] : parser.cells) {
REQUIRE(cell.w > 0);
REQUIRE(cell.h > 0);
}
auto hit = parser.hit(10, 10);
REQUIRE(*hit == "label_1");
auto nohit = parser.hit(1000, 1000);
REQUIRE(!nohit);
REQUIRE(nohit == std::nullopt);
fuc2::Set TESTS{
.name="lel parser tests",
.tests={
{"test_basic_ops", test_basic_ops},
}
};
}

31
tests/main.cpp Normal file
View file

@ -0,0 +1,31 @@
#include <fuc2/run.hpp>
// you can also place these into a .hpp you include if
// they're too numerous to manage
namespace lel_tests {
extern fuc2::Set TESTS;
}
namespace guecs_tests {
extern fuc2::Set TESTS;
}
namespace shader_tests {
extern fuc2::Set TESTS;
}
namespace sound_tests {
extern fuc2::Set TESTS;
}
namespace texture_tests {
extern fuc2::Set TESTS;
}
int main(int argc, char* argv[]) {
run(lel_tests::TESTS);
run(guecs_tests::TESTS);
run(shader_tests::TESTS);
run(sound_tests::TESTS);
run(texture_tests::TESTS);
}

View file

@ -1,26 +1,36 @@
#include <catch2/catch_test_macros.hpp>
#include <fmt/core.h>
#include <string>
#include "guecs/sfml/shaders.hpp"
#include <fuc2/testing.hpp>
using namespace fuc2;
using namespace fmt;
TEST_CASE("shader loading/init works", "[shaders]") {
shaders::init();
int version = shaders::version();
namespace shader_tests {
void test_shader_loading() {
shaders::init();
int version = shaders::version();
std::shared_ptr<sf::Shader> ui_shader = shaders::get("ui_shader");
auto other_test = shaders::get("ui_shader");
std::shared_ptr<sf::Shader> ui_shader = shaders::get("ui_shader");
auto other_test = shaders::get("ui_shader");
REQUIRE(ui_shader != nullptr);
REQUIRE(ui_shader == other_test);
REQUIRE(shaders::updated(version) == false);
CHECK(ui_shader != nullptr);
CHECK(ui_shader == other_test);
CHECK(shaders::updated(version) == false);
int new_version = shaders::reload();
REQUIRE(version != shaders::version());
REQUIRE(version != new_version);
REQUIRE(shaders::version() == new_version);
REQUIRE(shaders::updated(version) == true);
version = new_version;
int new_version = shaders::reload();
CHECK(version != shaders::version());
CHECK(version != new_version);
CHECK(shaders::version() == new_version);
CHECK(shaders::updated(version) == true);
version = new_version;
}
fuc2::Set TESTS{
.name="shader tests",
.tests={
{"test_shader_loading", test_shader_loading},
}
};
}

View file

@ -1,14 +1,23 @@
#include <catch2/catch_test_macros.hpp>
#include <fmt/core.h>
#include <string>
#include "guecs/sfml/sound.hpp"
#include <fuc2/testing.hpp>
using namespace fmt;
using namespace fuc2;
TEST_CASE("test sound manager", "[sound]") {
sound::init();
namespace sound_tests {
void test_sound_manager() {
sound::init();
sound::play("blank");
sound::play("blank");
sound::play_at("blank", 0.1, 0.1, 0.1);
sound::play_at("blank", 0.1, 0.1, 0.1);
}
fuc2::Set TESTS{
.name="sound manager tests",
.tests={
{"test_sound_manager", test_sound_manager},
}
};
}

View file

@ -1,15 +1,24 @@
#include <catch2/catch_test_macros.hpp>
#include <fmt/core.h>
#include <string>
#include "guecs/sfml/textures.hpp"
#include <fuc2/testing.hpp>
using namespace fmt;
using namespace fuc2;
TEST_CASE("test texture management", "[textures]") {
textures::init();
auto spider = textures::get("textures_test");
REQUIRE(spider.sprite != nullptr);
REQUIRE(spider.texture != nullptr);
namespace texture_tests {
void test_texture_management() {
textures::init();
auto spider = textures::get("textures_test");
CHECK(spider.sprite != nullptr);
CHECK(spider.texture != nullptr);
auto image = textures::load_image("assets/textures_test.png");
auto image = textures::load_image("assets/textures_test.png");
}
fuc2::Set TESTS{
.name="texture manager tests",
.tests={
{"test_texture_management", test_texture_management},
}
};
}