blob: 9f2a46f3bea4ad3d8bffbe6918b0fe77abe4547d [file] [log] [blame]
/* Copyright 2023 The ChromiumOS Authors
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*
* Test gbm.h module code using gtest.
*/
#include <drm/drm_fourcc.h>
#include <gmock/gmock.h>
#include <gtest/gtest.h>
#include <xf86drm.h>
#include "gbm.h"
class MockDrm
{
public:
MOCK_METHOD(drmVersionPtr, drmGetVersion, (int fd));
MOCK_METHOD(void, drmFreeVersion, (drmVersionPtr v));
};
// Define a mock version of drmGetVersion
drmVersionPtr drmGetVersion(int fd)
{
drmVersionPtr mock_version = new drmVersion();
mock_version->name = "Mock Backend";
return mock_version;
}
// Define a mock version of drmFreeVersion
void drmFreeVersion(drmVersionPtr v)
{
delete(v);
}
/* TODO : This is a protocol to add unit tests for the public APIs in minigbm.
*
* The ultimate goal would be cover more APIs and the input combinations.
* Set fd to 0 for now, it doesn't have any particular meaning
*/
TEST(gbm_unit_test, create_device)
{
MockDrm mock_drm; // Create a mock object
EXPECT_CALL(mock_drm, drmGetVersion(testing::_))
.WillRepeatedly(testing::Invoke(&mock_drm, &MockDrm::drmGetVersion));
struct gbm_device *gbm_device = gbm_create_device(0);
ASSERT_TRUE(gbm_device);
gbm_device_destroy(gbm_device);
}
TEST(gbm_unit_test, valid_fd)
{
MockDrm mock_drm; // Create a mock object
EXPECT_CALL(mock_drm, drmGetVersion(testing::_))
.WillRepeatedly(testing::Invoke(&mock_drm, &MockDrm::drmGetVersion));
struct gbm_device *gbm_device = gbm_create_device(99);
int fd = gbm_device_get_fd(gbm_device);
ASSERT_EQ(fd, 99);
gbm_device_destroy(gbm_device);
}
TEST(gbm_unit_test, valid_backend_name)
{
MockDrm mock_drm; // Create a mock object
EXPECT_CALL(mock_drm, drmGetVersion(testing::_))
.WillRepeatedly(testing::Invoke(&mock_drm, &MockDrm::drmGetVersion));
struct gbm_device *gbm_device = gbm_create_device(0);
const char *backend_name = gbm_device_get_backend_name(gbm_device);
ASSERT_STREQ(backend_name, "Mock Backend");
gbm_device_destroy(gbm_device);
}