Add unit test on client::ActiveObjectMgr::getActiveSelectableObjects

This commit is contained in:
numzero 2023-06-24 20:52:39 +03:00 committed by sfan5
parent d7291e0600
commit 21035bf5d4
1 changed files with 65 additions and 0 deletions

View File

@ -32,6 +32,24 @@ public:
virtual void addToScene(ITextureSource *tsrc, scene::ISceneManager *smgr) {}
};
class TestSelectableClientActiveObject : public ClientActiveObject
{
public:
TestSelectableClientActiveObject(aabb3f _selection_box)
: ClientActiveObject(0, nullptr, nullptr)
, selection_box(_selection_box)
{}
~TestSelectableClientActiveObject() = default;
ActiveObjectType getType() const override { return ACTIVEOBJECT_TYPE_TEST; }
void addToScene(ITextureSource *tsrc, scene::ISceneManager *smgr) override {}
bool getSelectionBox(aabb3f *toset) const override { *toset = selection_box; return true; }
const v3f getPosition() const override { return position; }
v3f position;
aabb3f selection_box;
};
class TestClientActiveObjectMgr : public TestBase
{
public:
@ -43,6 +61,7 @@ public:
void testFreeID();
void testRegisterObject();
void testRemoveObject();
void testGetActiveSelectableObjects();
};
static TestClientActiveObjectMgr g_test_instance;
@ -52,6 +71,7 @@ void TestClientActiveObjectMgr::runTests(IGameDef *gamedef)
TEST(testFreeID);
TEST(testRegisterObject)
TEST(testRemoveObject)
TEST(testGetActiveSelectableObjects)
}
////////////////////////////////////////////////////////////////////////////////
@ -116,3 +136,48 @@ void TestClientActiveObjectMgr::testRemoveObject()
caomgr.clear();
}
void TestClientActiveObjectMgr::testGetActiveSelectableObjects()
{
client::ActiveObjectMgr caomgr;
auto obj = new TestSelectableClientActiveObject({v3f{-1, -1, -1}, v3f{1, 1, 1}});
UASSERT(caomgr.registerObject(obj));
auto assert_obj_selected = [&] (v3f a, v3f b) {
auto actual = caomgr.getActiveSelectableObjects({a, b});
UASSERTEQ(auto, actual.size(), 1u);
UASSERTEQ(auto, actual.at(0).obj, obj);
};
auto assert_obj_missed = [&] (v3f a, v3f b) {
auto actual = caomgr.getActiveSelectableObjects({a, b});
UASSERTEQ(auto, actual.size(), 0u);
};
float x = 12, y = 3, z = 6;
obj->position = {x, y, z};
assert_obj_selected({0, 0, 0}, {x-1, y-1, z-1});
assert_obj_selected({0, 0, 0}, {2*(x-1), 2*(y-1), 2*(z-1)});
assert_obj_selected({0, 0, 0}, {2*(x+1), 2*(y-1), 2*(z+1)});
assert_obj_selected({0, 0, 0}, {20, 5, 10});
assert_obj_selected({30, -12, 17}, {x+1, y+1, z-1});
assert_obj_selected({30, -12, 17}, {x, y+1, z});
assert_obj_selected({30, -12, 17}, {-6, 20, -5});
assert_obj_selected({30, -12, 17}, {-8, 20, -7});
assert_obj_selected({-21, 6, -13}, {x+1.4f, y, z});
assert_obj_selected({-21, 6, -13}, {x-1.4f, y, z});
assert_obj_missed({-21, 6, -13}, {x-3.f, y, z});
assert_obj_selected({-21, 6, -13}, {x, y-1.4f, z});
assert_obj_selected({-21, 6, -13}, {x, y+1.4f, z});
assert_obj_missed({-21, 6, -13}, {x, y+3.f, z});
assert_obj_selected({-21, 6, -13}, {x, y, z+1.4f});
assert_obj_selected({-21, 6, -13}, {x, y, z-1.4f});
assert_obj_missed({-21, 6, -13}, {x, y, z-3.f});
caomgr.clear();
}