/* 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 #include #include #include #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); }