* Copyright 2016 Samsung Electronics co., Ltd. All Rights Reserved.
*
* Contact: Konstantin Drabeniuk <k.drabeniuk@samsung.com>
+ * Contact: Andrii Sokolenko <a.sokolenko@samsung.com>
+ * Contact: Roman Marchenko <r.marchenko@samsung.com>
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the
*
**************************************************************************/
-#include "gtest/gtest.h"
-#include <png.h>
+#include "ut_tdm.h"
-/*------ stubs -----------------*/
-#include "tbm_stubs.h"
-#include "stub_pthread.h"
-#include "stub_stdlib.h"
-#include "stub_unistd.h"
-#include "stub_fcntl.h"
-#include "stub_dlfcn.h"
-#include "stub_stdio.h"
-#include "tdm_event_loop_stubs.h"
+/* LCOV_EXCL_START */
-#define png_write_info(p1, p2)
-#define png_write_image(p1, p2)
-#define png_write_end(p1, p2)
-/*------ stubs ----------------*/
+class TDMHelper : public TDMOutput
+{
+public:
+ TDMHelper();
+ void SetUp(void);
+ void TearDown(void);
+};
-#pragma GCC optimize(0)
+TDMHelper::TDMHelper()
+{
+}
-extern "C" int
-tbm_drm_helper_get_master_fd(void)
+void TDMHelper::SetUp(void)
{
- return 20;
+ TDMOutput::SetUp();
}
-#include "tdm_helper.c"
+void TDMHelper::TearDown(void)
+{
+ TDMOutput::TearDown();
+}
-static void _init_test()
+TEST_P(TDMHelper, HelperGetTime)
{
- stub_stdio_init();
- stub_fcntl_init();
- stub_pthread_init();
- stub_unistd_init();
- stub_tbm_init();
- stub_stdlib_init();
+ ASSERT_GT(tdm_helper_get_time(), 0.0);
}
-/* UNIT TESTS */
+TEST_P(TDMHelper, HelperDumpBufferXR24)
+{
+ tbm_surface_h buffer;
+
+ buffer = tbm_surface_create(TDM_UT_BUFFER_SIZE, TDM_UT_BUFFER_SIZE, TBM_FORMAT_XRGB8888);
+ ASSERT_NE(buffer, NULL);
+
+ tdm_test_buffer_fill(buffer, PATTERN_SMPTE);
-/* tdm_helper_get_fd() */
+ char filename[256];
+ snprintf(filename, sizeof filename, "%s.png", typeid(*this).name());
+ tdm_helper_dump_buffer(buffer, (const char*)filename);
-TEST(tdm_helper_get_fd, work_flow_success_5)
+ tbm_surface_destroy(buffer);
+}
+
+TEST_P(TDMHelper, HelperDumpBufferAR24)
{
- const char *env = "env";
- int fd;
+ tbm_surface_h buffer;
- _init_test();
+ buffer = tbm_surface_create(TDM_UT_BUFFER_SIZE, TDM_UT_BUFFER_SIZE, TBM_FORMAT_ARGB8888);
+ ASSERT_NE(buffer, NULL);
- stub_getenv_name = env;
- stub_getenv_return_value = "getenv";
+ tdm_test_buffer_fill(buffer, PATTERN_SMPTE);
- fd = tdm_helper_get_fd(env);
+ char filename[256];
+ snprintf(filename, sizeof filename, "%s.png", typeid(*this).name());
+ tdm_helper_dump_buffer(buffer, (const char*)filename);
+
+ tbm_surface_destroy(buffer);
+}
+
+TEST_P(TDMHelper, HelperDumpBufferNullObject)
+{
+ char filename[256];
+ tdm_helper_dump_buffer(NULL, (const char*)filename);
+}
- ASSERT_EQ(fd, 5);
+TEST_P(TDMHelper, HelperDumpBufferNullOther)
+{
+ tbm_surface_h buffer = (tbm_surface_h)TDM_UT_INVALID_VALUE;
+ tdm_helper_dump_buffer(buffer, NULL);
}
-TEST(tdm_helper_get_fd, work_flow_success_4)
+TEST_P(TDMHelper, HelperClearBufferPos)
{
- const char *env = "env";
- int expected_fd = -1;
- int fd;
+ tbm_surface_h buffer;
+ tdm_pos pos = {.x = 40, .y = 40, .w = TDM_UT_BUFFER_SIZE - 80, .h = TDM_UT_BUFFER_SIZE - 80};
- _init_test();
+ buffer = tbm_surface_create(TDM_UT_BUFFER_SIZE, TDM_UT_BUFFER_SIZE, TBM_FORMAT_ARGB8888);
+ ASSERT_NE(buffer, NULL);
- stub_dub_error = 1;
+ tdm_test_buffer_fill(buffer, PATTERN_SMPTE);
- stub_getenv_name = env;
- stub_getenv_return_value = "getenv";
+ tdm_helper_clear_buffer_pos(buffer, &pos);
- fd = tdm_helper_get_fd(env);
+ tdm_helper_dump_buffer_str(buffer, NULL, (char*)typeid(*this).name());
- ASSERT_EQ(fd, expected_fd);
+ tbm_surface_destroy(buffer);
}
-TEST(tdm_helper_get_fd, work_flow_success_3)
+TEST_P(TDMHelper, HelperClearBufferColor)
{
- const char *env = "env";
- int fd;
- int expected_fd = -1;
+ tbm_surface_h buffer;
+ tdm_pos pos = {.x = 40, .y = 40, .w = TDM_UT_BUFFER_SIZE - 80, .h = TDM_UT_BUFFER_SIZE - 80};
+ unsigned int color = 0xffffff00;
- _init_test();
+ buffer = tbm_surface_create(TDM_UT_BUFFER_SIZE, TDM_UT_BUFFER_SIZE, TBM_FORMAT_ARGB8888);
+ ASSERT_NE(buffer, NULL);
- FCNTL_ERROR = 1;
+ tdm_test_buffer_fill(buffer, PATTERN_SMPTE);
- stub_getenv_name = env;
- stub_getenv_return_value = "getenv";
+ tdm_helper_clear_buffer_color(buffer, &pos, color);
- fd = tdm_helper_get_fd(env);
+ tdm_helper_dump_buffer_str(buffer, NULL, (char*)typeid(*this).name());
- ASSERT_EQ(fd, expected_fd);
+ tbm_surface_destroy(buffer);
}
-TEST(tdm_helper_get_fd, work_flow_success_2)
+TEST_P(TDMHelper, HelperClearBufferARGB)
{
- const char *env = "env";
- int expected_fd = -1;
- int fd;
+ tbm_surface_h buffer;
- _init_test();
+ buffer = tbm_surface_create(TDM_UT_BUFFER_SIZE, TDM_UT_BUFFER_SIZE, TBM_FORMAT_ARGB8888);
+ ASSERT_NE(buffer, NULL);
- SSCANF_ERROR = 1;
+ tdm_test_buffer_fill(buffer, PATTERN_SMPTE);
- stub_getenv_name = env;
- stub_getenv_return_value = "getenv";
+ tdm_helper_clear_buffer(buffer);
- fd = tdm_helper_get_fd(env);
+ tdm_helper_dump_buffer_str(buffer, NULL, (char*)typeid(*this).name());
- ASSERT_EQ(fd, expected_fd);
+ tbm_surface_destroy(buffer);
}
-TEST(tdm_helper_get_fd, work_flow_success_1)
+TEST_P(TDMHelper, HelperClearBufferXRGB)
{
- const char *env = "env";
- int fd;
- int expected_fd = -1;
+ tbm_surface_h buffer;
+
+ buffer = tbm_surface_create(TDM_UT_BUFFER_SIZE, TDM_UT_BUFFER_SIZE, TBM_FORMAT_XRGB8888);
+ ASSERT_NE(buffer, NULL);
- _init_test();
+ tdm_test_buffer_fill(buffer, PATTERN_SMPTE);
- GETENV_ERROR = 1;
+ tdm_helper_clear_buffer(buffer);
- fd = tdm_helper_get_fd(env);
+ tdm_helper_dump_buffer_str(buffer, NULL, (char*)typeid(*this).name());
- ASSERT_EQ(fd, expected_fd);
+ tbm_surface_destroy(buffer);
}
-/* tdm_helper_set_fd */
-TEST(tdm_helper_set_fd, work_flow_success_1)
+TEST_P(TDMHelper, HelperClearBufferYUV420)
{
- _init_test();
- tdm_helper_set_fd("TEST_ENV", 7);
+ tbm_surface_h buffer;
+
+ buffer = tbm_surface_create(TDM_UT_BUFFER_SIZE, TDM_UT_BUFFER_SIZE, TBM_FORMAT_YUV420);
+ ASSERT_NE(buffer, NULL);
+
+ tdm_test_buffer_fill(buffer, PATTERN_SMPTE);
- ASSERT_STREQ(stub_getenv_name, "TEST_ENV");
+ tdm_helper_clear_buffer(buffer);
+
+ tdm_helper_dump_buffer_str(buffer, NULL, (char*)typeid(*this).name());
+
+ tbm_surface_destroy(buffer);
}
-TEST(tdm_helper_set_fd, work_flow_error_1__setenv_error)
+TEST_P(TDMHelper, HelperClearBufferNV12)
{
- _init_test();
- SETENV_ERROR = 1;
+ tbm_surface_h buffer;
+
+ buffer = tbm_surface_create(TDM_UT_BUFFER_SIZE, TDM_UT_BUFFER_SIZE, TBM_FORMAT_NV12);
+ ASSERT_NE(buffer, NULL);
+
+ tdm_test_buffer_fill(buffer, PATTERN_SMPTE);
- tdm_helper_set_fd("TEST_ENV", 7);
+ tdm_helper_clear_buffer(buffer);
- ASSERT_EQ(stub_getenv_name, 0);
- ASSERT_EQ(stub_getenv_return_value, 0);
+ tdm_helper_dump_buffer_str(buffer, NULL, (char*)typeid(*this).name());
+
+ tbm_surface_destroy(buffer);
}
-/* tdm_helper_dump_start */
-TEST(tdm_helper_dump_start, work_flow_success_1)
+TEST_P(TDMHelper, HelperClearBufferNV21)
{
- _init_test();
- int count = 0;
- tdm_dump_enable = 0;
- tdm_helper_dump_start("test_str1", &count);
- ASSERT_EQ(tdm_dump_enable, 1);
+ tbm_surface_h buffer;
+
+ buffer = tbm_surface_create(TDM_UT_BUFFER_SIZE, TDM_UT_BUFFER_SIZE, TBM_FORMAT_NV21);
+ ASSERT_NE(buffer, NULL);
+
+ tdm_test_buffer_fill(buffer, PATTERN_SMPTE);
+
+ tdm_helper_clear_buffer(buffer);
+
+ tdm_helper_dump_buffer_str(buffer, NULL, (char*)typeid(*this).name());
+
+ tbm_surface_destroy(buffer);
}
-TEST(tdm_helper_dump_start, work_flow_error_1__NULL)
+TEST_P(TDMHelper, HelperGetBufferFullSize)
{
- _init_test();
- int count = 0;
- tdm_dump_enable = 0;
- tdm_helper_dump_start("test_str1", NULL);
- ASSERT_EQ(tdm_dump_enable, 0);
- tdm_helper_dump_start(NULL, &count);
- ASSERT_EQ(tdm_dump_enable, 0);
+ tbm_surface_h buffer;
+ int w = TDM_UT_INVALID_VALUE, h = TDM_UT_INVALID_VALUE;
+
+ buffer = tbm_surface_create(TDM_UT_BUFFER_SIZE, TDM_UT_BUFFER_SIZE, TBM_FORMAT_ARGB8888);
+ ASSERT_NE(buffer, NULL);
+
+ tdm_helper_get_buffer_full_size(buffer, &w, &h);
+ ASSERT_NE(w, TDM_UT_INVALID_VALUE);
+ ASSERT_GE(w, tbm_surface_get_width(buffer));
+ ASSERT_NE(h, TDM_UT_INVALID_VALUE);
+ ASSERT_GE(h, tbm_surface_get_height(buffer));
+
+ tbm_surface_destroy(buffer);
+}
+
+TEST_P(TDMHelper, HelperConvertBufferRotate0)
+{
+ tbm_surface_h buffer, temp;
+ tdm_pos sp, dp;
+
+ buffer = tbm_surface_create(TDM_UT_BUFFER_SIZE, TDM_UT_BUFFER_SIZE, TBM_FORMAT_ARGB8888);
+ ASSERT_NE(buffer, NULL);
+ tdm_test_buffer_fill(buffer, PATTERN_SMPTE);
+
+ temp = tbm_surface_create(TDM_UT_BUFFER_SIZE * 2, TDM_UT_BUFFER_SIZE * 2, TBM_FORMAT_ARGB8888);
+ ASSERT_NE(temp, NULL);
+
+ sp.x = sp.y = 0, sp.w = sp.h = TDM_UT_BUFFER_SIZE;
+ dp.x = dp.y = 0, dp.w = dp.h = TDM_UT_BUFFER_SIZE * 2;
+
+ ASSERT_EQ(tdm_helper_convert_buffer(buffer, temp, &sp, &dp, TDM_TRANSFORM_NORMAL, 0), TDM_ERROR_NONE);
+
+ tdm_helper_dump_buffer_str(temp, NULL, (char*)typeid(*this).name());
+
+ tbm_surface_destroy(buffer);
+ tbm_surface_destroy(temp);
+}
+
+TEST_P(TDMHelper, HelperConvertBufferRotate0Flip)
+{
+ tbm_surface_h buffer, temp;
+ tdm_pos sp, dp;
+
+ buffer = tbm_surface_create(TDM_UT_BUFFER_SIZE, TDM_UT_BUFFER_SIZE, TBM_FORMAT_ARGB8888);
+ ASSERT_NE(buffer, NULL);
+ tdm_test_buffer_fill(buffer, PATTERN_SMPTE);
+
+ temp = tbm_surface_create(TDM_UT_BUFFER_SIZE * 2, TDM_UT_BUFFER_SIZE * 2, TBM_FORMAT_ARGB8888);
+ ASSERT_NE(temp, NULL);
+
+ sp.x = sp.y = 0, sp.w = sp.h = TDM_UT_BUFFER_SIZE;
+ dp.x = dp.y = 0, dp.w = dp.h = TDM_UT_BUFFER_SIZE * 2;
+
+ ASSERT_EQ(tdm_helper_convert_buffer(buffer, temp, &sp, &dp, TDM_TRANSFORM_FLIPPED, 0), TDM_ERROR_NONE);
+
+ tdm_helper_dump_buffer_str(temp, NULL, (char*)typeid(*this).name());
+
+ tbm_surface_destroy(buffer);
+ tbm_surface_destroy(temp);
}
-/* tdm_helper_dump_start */
-TEST(tdm_helper_dump_stop, work_flow_success_1)
+TEST_P(TDMHelper, HelperConvertBufferRotate90)
{
- _init_test();
- tdm_dump_enable = 0;
+ tbm_surface_h buffer, temp;
+ tdm_pos sp, dp;
+
+ buffer = tbm_surface_create(TDM_UT_BUFFER_SIZE, TDM_UT_BUFFER_SIZE, TBM_FORMAT_ARGB8888);
+ ASSERT_NE(buffer, NULL);
+ tdm_test_buffer_fill(buffer, PATTERN_SMPTE);
+
+ temp = tbm_surface_create(TDM_UT_BUFFER_SIZE * 2, TDM_UT_BUFFER_SIZE * 2, TBM_FORMAT_ARGB8888);
+ ASSERT_NE(temp, NULL);
+
+ sp.x = sp.y = 0, sp.w = sp.h = TDM_UT_BUFFER_SIZE;
+ dp.x = dp.y = 0, dp.w = dp.h = TDM_UT_BUFFER_SIZE * 2;
+
+ ASSERT_EQ(tdm_helper_convert_buffer(buffer, temp, &sp, &dp, TDM_TRANSFORM_90, 0), TDM_ERROR_NONE);
+
+ tdm_helper_dump_buffer_str(temp, NULL, (char*)typeid(*this).name());
+
+ tbm_surface_destroy(buffer);
+ tbm_surface_destroy(temp);
+}
+
+TEST_P(TDMHelper, HelperConvertBufferRotate180)
+{
+ tbm_surface_h buffer, temp;
+ tdm_pos sp, dp;
+
+ buffer = tbm_surface_create(TDM_UT_BUFFER_SIZE, TDM_UT_BUFFER_SIZE, TBM_FORMAT_ARGB8888);
+ ASSERT_NE(buffer, NULL);
+ tdm_test_buffer_fill(buffer, PATTERN_SMPTE);
+
+ temp = tbm_surface_create(TDM_UT_BUFFER_SIZE * 2, TDM_UT_BUFFER_SIZE * 2, TBM_FORMAT_ARGB8888);
+ ASSERT_NE(temp, NULL);
+
+ sp.x = sp.y = 0, sp.w = sp.h = TDM_UT_BUFFER_SIZE;
+ dp.x = dp.y = 0, dp.w = dp.h = TDM_UT_BUFFER_SIZE * 2;
+
+ ASSERT_EQ(tdm_helper_convert_buffer(buffer, temp, &sp, &dp, TDM_TRANSFORM_180, 0), TDM_ERROR_NONE);
+
+ tdm_helper_dump_buffer_str(temp, NULL, (char*)typeid(*this).name());
+
+ tbm_surface_destroy(buffer);
+ tbm_surface_destroy(temp);
+}
+
+TEST_P(TDMHelper, HelperConvertBufferRotate270)
+{
+ tbm_surface_h buffer, temp;
+ tdm_pos sp, dp;
+
+ buffer = tbm_surface_create(TDM_UT_BUFFER_SIZE, TDM_UT_BUFFER_SIZE, TBM_FORMAT_ARGB8888);
+ ASSERT_NE(buffer, NULL);
+ tdm_test_buffer_fill(buffer, PATTERN_SMPTE);
+
+ temp = tbm_surface_create(TDM_UT_BUFFER_SIZE * 2, TDM_UT_BUFFER_SIZE * 2, TBM_FORMAT_ARGB8888);
+ ASSERT_NE(temp, NULL);
+
+ sp.x = sp.y = 0, sp.w = sp.h = TDM_UT_BUFFER_SIZE;
+ dp.x = dp.y = 0, dp.w = dp.h = TDM_UT_BUFFER_SIZE * 2;
+
+ ASSERT_EQ(tdm_helper_convert_buffer(buffer, temp, &sp, &dp, TDM_TRANSFORM_270, 0), TDM_ERROR_NONE);
+
+ tdm_helper_dump_buffer_str(temp, NULL, (char*)typeid(*this).name());
+
+ tbm_surface_destroy(buffer);
+ tbm_surface_destroy(temp);
+}
+
+TEST_P(TDMHelper, HelperConvertBufferYUV420)
+{
+ tbm_surface_h buffer, temp;
+ tdm_pos sp, dp;
+
+ buffer = tbm_surface_create(TDM_UT_BUFFER_SIZE, TDM_UT_BUFFER_SIZE, TBM_FORMAT_YUV420);
+ ASSERT_NE(buffer, NULL);
+ tdm_test_buffer_fill(buffer, PATTERN_SMPTE);
+
+ temp = tbm_surface_create(TDM_UT_BUFFER_SIZE * 2, TDM_UT_BUFFER_SIZE * 2, TBM_FORMAT_YUV420);
+ ASSERT_NE(temp, NULL);
+
+ sp.x = sp.y = 0, sp.w = sp.h = TDM_UT_BUFFER_SIZE;
+ dp.x = dp.y = 0, dp.w = dp.h = TDM_UT_BUFFER_SIZE * 2;
+
+ ASSERT_EQ(tdm_helper_convert_buffer(buffer, temp, &sp, &dp, TDM_TRANSFORM_NORMAL, 0), TDM_ERROR_OPERATION_FAILED);
+
+ tbm_surface_destroy(buffer);
+ tbm_surface_destroy(temp);
+}
+
+TEST_P(TDMHelper, HelperGetFD)
+{
+ int fd = tdm_helper_get_fd("TDM_DRM_MASTER_FD");
+ ASSERT_GE(fd, 0);
+ close(fd);
+ fd = tdm_helper_get_fd("BLURBLUR");
+ ASSERT_EQ(fd, -1);
+}
+
+TEST_P(TDMHelper, HelperSetFD)
+{
+ tdm_helper_set_fd("TDM_DRM_MASTER_FD", -1);
+ tdm_helper_set_fd("BLURBLUR", -1);
+}
+
+TEST_P(TDMHelper, HelperDumpStart)
+{
+ char path[256];
+ int count = 0;
+ snprintf(path, sizeof path, "blurblur");
+ tdm_helper_dump_start(path, &count);
tdm_helper_dump_stop();
- ASSERT_EQ(tdm_dump_enable, 0);
-}
+}
-tdm_error stub_output_get_mode(tdm_output *output, const tdm_output_mode **mode)
-{
- static tdm_output_mode cmode;
- *mode = &cmode;
- return TDM_ERROR_NONE;
-}
+static void
+_ut_tdm_helper_capture_cb(tbm_surface_h buffer, void *user_data)
+{
+}
-tdm_error stub_output_get_property(tdm_output *output, unsigned int id, tdm_value *value)
+TEST_P(TDMHelper, HelperCaptureOutput)
{
- (tdm_output *)output;
- (unsigned int)id;
- value->s32 = 1;
- return TDM_ERROR_NONE;
+ tdm_error ret;
+ tdm_output *output;
+
+ for (int o = 0; o < output_count; o++) {
+ tbm_surface_h dump;
+
+ output = tdm_display_get_output(dpy, o, &ret);
+ ASSERT_EQ(ret, TDM_ERROR_NONE);
+ ASSERT_NE(output, NULL);
+
+ if (!ut_tdm_output_is_connected(output))
+ continue;
+
+ ASSERT_EQ(ut_tdm_output_prepare(dpy, output, true), true);
+
+ dump = tbm_surface_create(TDM_UT_BUFFER_SIZE, TDM_UT_BUFFER_SIZE, TBM_FORMAT_ARGB8888);
+ ASSERT_NE(dump, NULL);
+
+ ASSERT_EQ(tdm_helper_capture_output(output, dump, 0, 0, TDM_UT_BUFFER_SIZE, TDM_UT_BUFFER_SIZE,
+ _ut_tdm_helper_capture_cb, NULL), TDM_ERROR_NONE);
+
+ tdm_helper_dump_buffer_str(dump, NULL, (char*)typeid(*this).name());
+
+ tbm_surface_destroy(dump);
+ }
}
-tdm_error stub_layer_get_property(tdm_layer *layer, unsigned int id, tdm_value *value)
+
+TEST_P(TDMHelper, HelperCaptureOutputNullObject)
{
- (tdm_layer *)layer;
- (unsigned int)id;
- value->s32 = 1;
- return TDM_ERROR_NONE;
+ tbm_surface_h dump = (tbm_surface_h)TDM_UT_INVALID_VALUE;
+
+ ASSERT_EQ(tdm_helper_capture_output(NULL, dump, 0, 0, TDM_UT_BUFFER_SIZE, TDM_UT_BUFFER_SIZE,
+ _ut_tdm_helper_capture_cb, NULL), TDM_ERROR_INVALID_PARAMETER);
}
-tdm_error stub_layer_get_info(tdm_layer *layer, tdm_info_layer *info)
+TEST_P(TDMHelper, HelperCaptureOutputNullOther)
{
- (tdm_layer *)layer;
- (tdm_info_layer *)info;
- return TDM_ERROR_NONE;
+ for (int o = 0; o < output_count; o++) {
+ tdm_error ret;
+ tdm_output *output = tdm_display_get_output(dpy, o, &ret);
+ ASSERT_EQ(ret, TDM_ERROR_NONE);
+ ASSERT_NE(output, NULL);
+ tdm_helper_output_commit_per_vblank_enabled(output);
+ }
+
+ tbm_surface_h dump = (tbm_surface_h)TDM_UT_INVALID_VALUE;
+
+ ASSERT_EQ(tdm_helper_capture_output(NULL, dump, 0, 0, TDM_UT_BUFFER_SIZE, TDM_UT_BUFFER_SIZE,
+ _ut_tdm_helper_capture_cb, NULL), TDM_ERROR_INVALID_PARAMETER);
}
+TEST_P(TDMHelper, HelperGetDisplayInformation)
+{
+ char reply[8192];
+ int len = sizeof reply;
+
+ for (int o = 0; o < output_count; o++) {
+ tdm_error ret;
+ tdm_output *output = tdm_display_get_output(dpy, o, &ret);
+ ASSERT_EQ(ret, TDM_ERROR_NONE);
+ ASSERT_NE(output, NULL);
+ if (!ut_tdm_output_is_connected(output))
+ continue;
+ ASSERT_EQ(ut_tdm_output_prepare(dpy, output, true), true);
+ }
+
+ tdm_helper_get_display_information(dpy, reply, &len);
+ TDM_INFO("%s", reply);
+}
-/* tdm_helper_get_display_information */
-TEST(tdm_helper_get_display_information, work_flow_success_1)
-{
- tdm_private_display disp;
- tdm_backend_module module;
- tdm_private_output output;
- tdm_private_layer layer;
- tdm_private_pp pp;
- tdm_private_capture capture;
- tdm_output_mode output_mode;
- tdm_prop prop;
- tdm_info_layer info;
- tdm_private_display *private_display = &disp;
- tbm_format formats[2] = {TBM_FORMAT_ABGR8888, 0};
-
- memset(&disp, 0, sizeof(disp));
- memset(&module, 0, sizeof(module));
- memset(&output, 0, sizeof(output));
- memset(&layer, 0, sizeof(layer));
- memset(&pp, 0, sizeof(pp));
- memset(&capture, 0, sizeof(capture));
- memset(&output_mode, 0, sizeof(output_mode));
- memset(&prop, 0, sizeof(prop));
- memset(&info, 0, sizeof(info));
+TEST_P(TDMHelper, HelperGetDisplayInformationNullObject)
+{
+ char reply[8192];
+ int len = sizeof reply;
+
+ tdm_helper_get_display_information(NULL, reply, &len);
+}
- int len = 1024;
- char rep[len];
+TEST_P(TDMHelper, HelperGetDisplayInformationNullOther)
+{
+ tdm_helper_get_display_information(dpy, NULL, NULL);
+}
- _init_test();
+TEST_P(TDMHelper, HelperCommitPerVblankEnabled)
+{
+ ASSERT_EQ(tdm_helper_commit_per_vblank_enabled(dpy), 0);
+}
- //init disp
- private_display->capabilities = TDM_DISPLAY_CAPABILITY_PP | TDM_DISPLAY_CAPABILITY_CAPTURE;
- LIST_INITHEAD(&private_display->output_list);
- LIST_INITHEAD(&private_display->pp_list);
- LIST_INITHEAD(&private_display->capture_list);
+TEST_P(TDMHelper, HelperCommitPerVblankEnabledNullOBject)
+{
+ ASSERT_EQ(tdm_helper_commit_per_vblank_enabled(NULL), 0);
+}
- //init module
- private_display->module_data = &module;
- module.abi_version = 0x00010001;
- module.name = "test";
- module.vendor = "test";
-
- //init output
- LIST_ADDTAIL(&output.link, &private_display->output_list);
- LIST_INITHEAD(&output.capture_list);
- LIST_INITHEAD(&output.layer_list);
- output.caps.mode_count = 1;
- output.caps.modes = &output_mode;
- output.caps.prop_count = 1;
- output.caps.props = ∝
- memset(&output_mode, 0, sizeof(output_mode));
- private_display->func_output.output_get_mode = stub_output_get_mode;
- private_display->func_output.output_get_property = stub_output_get_property;
-
- //init layer
- LIST_ADDTAIL(&layer.link, &output.layer_list);
- layer.usable = 0;
- layer.caps.format_count = 2;
- layer.caps.formats = formats;
- layer.caps.prop_count = 1;
- layer.caps.props = ∝
- private_display->func_layer.layer_get_info = stub_layer_get_info;
- private_display->func_layer.layer_get_property = stub_layer_get_property;
-
- //init pp
- LIST_ADDTAIL(&pp.link, &private_display->pp_list);
- private_display->caps_pp.format_count = 2;
- private_display->caps_pp.formats = formats;
-
- //init capture
- LIST_ADDTAIL(&capture.link, &private_display->capture_list);
- private_display->caps_capture.format_count = 2;
- private_display->caps_capture.formats = formats;
-
- tdm_helper_get_display_information(private_display, rep, &len);
-}
-
-static int stub_tdm_helper_capture_handler_is_called = 0;
-static void stub_tdm_helper_capture_handler(tbm_surface_h buffer, void *user_data)
-{
- stub_tdm_helper_capture_handler_is_called = 1;
-}
-
-/* tdm_helper_capture_output */
-TEST(tdm_helper_capture_output, work_flow_success_1)
-{
- tdm_error error;
- tdm_private_display display;
- tdm_private_output output;
- tdm_private_layer layer;
- int src_mem[100][100];
- int dst_mem[100][100];
- struct _tbm_surface src_surface;
- struct _tbm_surface dst_surface;
- memset(&output, 0, sizeof(output));
- memset(&layer, 0, sizeof(layer));
-
- src_surface.info.format = TBM_FORMAT_ARGB8888;
- src_surface.info.width = 100;
- src_surface.info.height = 100;
- src_surface.info.num_planes = 1;
- src_surface.info.planes[0].ptr = (unsigned char*)src_mem;
- src_surface.info.planes[0].stride = src_surface.info.width * 4;
-
- dst_surface.info.format = TBM_FORMAT_XRGB8888;
- dst_surface.info.width = 100;
- dst_surface.info.height = 100;
- dst_surface.info.num_planes = 1;
- dst_surface.info.planes[0].ptr = (unsigned char*)dst_mem;
- dst_surface.info.planes[0].stride = dst_surface.info.width * 4;
-
- _init_test();
-
- //init output
- LIST_INITHEAD(&output.layer_list);
- LIST_ADDTAIL(&layer.link, &output.layer_list);
- output.private_display = &display;
-// layer.showing_buffer = (tbm_surface_h)&src_surface;
- layer.private_output = &output;
- layer.private_display = &display;
-
-
- error = tdm_helper_capture_output(&output, (tbm_surface_h)&dst_surface, 0, 0, 10, 10, stub_tdm_helper_capture_handler, &layer);
-
- ASSERT_EQ(TDM_ERROR_NONE, error);
- ASSERT_EQ(1, stub_tdm_helper_capture_handler_is_called);
-}
-
-TEST(tdm_helper_capture_output, work_flow_error_1___no_layer)
-{
- tdm_error error;
- tdm_private_display display;
- tdm_private_output output;
- tdm_private_layer layer;
- int src_mem[100][100];
- int dst_mem[100][100];
- struct _tbm_surface src_surface;
- struct _tbm_surface dst_surface;
- memset(&output, 0, sizeof(output));
- memset(&layer, 0, sizeof(layer));
-
- src_surface.info.format = TBM_FORMAT_ARGB8888;
- src_surface.info.width = 100;
- src_surface.info.height = 100;
- src_surface.info.num_planes = 1;
- src_surface.info.planes[0].ptr = (unsigned char*)src_mem;
- src_surface.info.planes[0].stride = src_surface.info.width * 4;
-
- dst_surface.info.format = TBM_FORMAT_XRGB8888;
- dst_surface.info.width = 100;
- dst_surface.info.height = 100;
- dst_surface.info.num_planes = 1;
- dst_surface.info.planes[0].ptr = (unsigned char*)dst_mem;
- dst_surface.info.planes[0].stride = dst_surface.info.width * 4;
-
- _init_test();
-
- //init output
- LIST_INITHEAD(&output.layer_list);
- output.private_display = &display;
-// layer.showing_buffer = (tbm_surface_h)&src_surface;
- layer.private_output = &output;
- layer.private_display = &display;
-
-
- error = tdm_helper_capture_output(&output, (tbm_surface_h)&dst_surface, 0, 0, 10, 10, stub_tdm_helper_capture_handler, &layer);
-
- ASSERT_NE(TDM_ERROR_NONE, error);
-}
-
-TEST(tdm_helper_capture_output, work_flow_error_2___wrong_buffer_format)
-{
- tdm_error error;
- tdm_private_display display;
- tdm_private_output output;
- tdm_private_layer layer;
- int src_mem[100][100];
- int dst_mem[100][100];
- struct _tbm_surface src_surface;
- struct _tbm_surface dst_surface;
- memset(&output, 0, sizeof(output));
- memset(&layer, 0, sizeof(layer));
-
- src_surface.info.format = TBM_FORMAT_XRGB8888;
- src_surface.info.width = 100;
- src_surface.info.height = 100;
- src_surface.info.num_planes = 1;
- src_surface.info.planes[0].ptr = (unsigned char*)src_mem;
- src_surface.info.planes[0].stride = src_surface.info.width * 4;
-
- src_surface.info.format = TBM_FORMAT_XRGB8888;
- dst_surface.info.width = 100;
- dst_surface.info.height = 100;
- dst_surface.info.num_planes = 1;
- dst_surface.info.planes[0].ptr = (unsigned char*)dst_mem;
- dst_surface.info.planes[0].stride = dst_surface.info.width * 4;
-
- _init_test();
-
- //init output
- LIST_INITHEAD(&output.layer_list);
- LIST_ADDTAIL(&layer.link, &output.layer_list);
- output.private_display = &display;
-// layer.showing_buffer = (tbm_surface_h)&src_surface;
- layer.private_output = &output;
- layer.private_display = &display;
-
- dst_surface.info.format = TBM_FORMAT_YUV410;
- error = tdm_helper_capture_output(&output, (tbm_surface_h)&dst_surface, 0, 0, 10, 10, stub_tdm_helper_capture_handler, &layer);
- ASSERT_EQ(TDM_ERROR_NONE, error);
-}
-
-TEST(tdm_helper_capture_output, work_flow_error_2___tbm_surface_map)
-{
- tdm_error error;
- tdm_private_display display;
- tdm_private_output output;
- tdm_private_layer layer;
- int src_mem[100][100];
- int dst_mem[100][100];
- struct _tbm_surface src_surface;
- struct _tbm_surface dst_surface;
- memset(&output, 0, sizeof(output));
- memset(&layer, 0, sizeof(layer));
-
- src_surface.info.format = TBM_FORMAT_ARGB8888;
- src_surface.info.width = 100;
- src_surface.info.height = 100;
- src_surface.info.num_planes = 1;
- src_surface.info.planes[0].ptr = (unsigned char*)src_mem;
- src_surface.info.planes[0].stride = src_surface.info.width * 4;
-
- dst_surface.info.format = TBM_FORMAT_XRGB8888;
- dst_surface.info.width = 100;
- dst_surface.info.height = 100;
- dst_surface.info.num_planes = 1;
- dst_surface.info.planes[0].ptr = (unsigned char*)dst_mem;
- dst_surface.info.planes[0].stride = dst_surface.info.width * 4;
-
- _init_test();
-
- //init output
- LIST_INITHEAD(&output.layer_list);
- LIST_ADDTAIL(&layer.link, &output.layer_list);
- output.private_display = &display;
-// layer.showing_buffer = (tbm_surface_h)&src_surface;
- layer.private_output = &output;
- layer.private_display = &display;
-
-
- dst_surface.info.num_planes = 0;
- error = tdm_helper_capture_output(&output, (tbm_surface_h)&dst_surface, 0, 0, 10, 10, stub_tdm_helper_capture_handler, &layer);
- ASSERT_EQ(TDM_ERROR_NONE, error);
- dst_surface.info.num_planes = 1;
-
- src_surface.info.num_planes = 0;
- error = tdm_helper_capture_output(&output, (tbm_surface_h)&dst_surface, 0, 0, 10, 10, stub_tdm_helper_capture_handler, &layer);
- ASSERT_EQ(TDM_ERROR_NONE, error);
-}
-
-/* tdm_helper_convert_buffer */
-TEST(tdm_helper_convert_buffer, work_flow_success_1)
-{
- tdm_error error;
- int src_mem[100][100];
- int dst_mem[100][100];
- struct _tbm_surface src_surface;
- struct _tbm_surface dst_surface;
- tdm_pos src_pos = {0, 0, 100, 100};
- tdm_pos dst_pos = {0, 0, 100, 100};
-
- src_surface.info.format = TBM_FORMAT_ARGB8888;
- src_surface.info.width = 100;
- src_surface.info.height = 100;
- src_surface.info.num_planes = 1;
- src_surface.info.planes[0].ptr = (unsigned char*)src_mem;
- src_surface.info.planes[0].stride = src_surface.info.width * 4;
-
- dst_surface.info.format = TBM_FORMAT_XRGB8888;
- dst_surface.info.width = 100;
- dst_surface.info.height = 100;
- dst_surface.info.num_planes = 1;
- dst_surface.info.planes[0].ptr = (unsigned char*)dst_mem;
- dst_surface.info.planes[0].stride = dst_surface.info.width * 4;
-
- _init_test();
-
- error = tdm_helper_convert_buffer(&src_surface, &dst_surface, &src_pos, &dst_pos, TDM_TRANSFORM_FLIPPED, 0);
- ASSERT_EQ(TDM_ERROR_NONE, error);
-
- error = tdm_helper_convert_buffer(&src_surface, &dst_surface, &src_pos, &dst_pos, TDM_TRANSFORM_90, 0);
- ASSERT_EQ(TDM_ERROR_NONE, error);
-
- error = tdm_helper_convert_buffer(&src_surface, &dst_surface, &src_pos, &dst_pos, TDM_TRANSFORM_180, 0);
- ASSERT_EQ(TDM_ERROR_NONE, error);
-
- error = tdm_helper_convert_buffer(&src_surface, &dst_surface, &src_pos, &dst_pos, TDM_TRANSFORM_FLIPPED_270, 0);
- ASSERT_EQ(TDM_ERROR_NONE, error);
-}
-
-
-TEST(tdm_helper_convert_buffer, work_flow_error_1__NULL)
-{
- tdm_error error;
- int src_mem[100][100];
- int dst_mem[100][100];
- struct _tbm_surface src_surface;
- struct _tbm_surface dst_surface;
- tdm_pos src_pos = {0, 0, 100, 100};
- tdm_pos dst_pos = {0, 0, 100, 100};
-
- src_surface.info.format = TBM_FORMAT_ARGB8888;
- src_surface.info.width = 100;
- src_surface.info.height = 100;
- src_surface.info.num_planes = 1;
- src_surface.info.planes[0].ptr = (unsigned char*)src_mem;
- src_surface.info.planes[0].stride = src_surface.info.width * 4;
-
- dst_surface.info.format = TBM_FORMAT_XRGB8888;
- dst_surface.info.width = 100;
- dst_surface.info.height = 100;
- dst_surface.info.num_planes = 1;
- dst_surface.info.planes[0].ptr = (unsigned char*)dst_mem;
- dst_surface.info.planes[0].stride = dst_surface.info.width * 4;
-
- _init_test();
- error = tdm_helper_convert_buffer(NULL, &dst_surface, &src_pos, &dst_pos, TDM_TRANSFORM_FLIPPED, 0);
- ASSERT_NE(TDM_ERROR_NONE, error);
- error = tdm_helper_convert_buffer(&src_surface, NULL, &src_pos, &dst_pos, TDM_TRANSFORM_FLIPPED, 0);
- ASSERT_NE(TDM_ERROR_NONE, error);
-}
-
-TEST(tdm_helper_convert_buffer, work_flow_error_1___wrong_buffers)
-{
- tdm_error error;
- int src_mem[100][100];
- int dst_mem[100][100];
- struct _tbm_surface src_surface;
- struct _tbm_surface dst_surface;
- tdm_pos src_pos = {0, 0, 100, 100};
- tdm_pos dst_pos = {0, 0, 100, 100};
-
- src_surface.info.format = TBM_FORMAT_ARGB8888;
- src_surface.info.width = 100;
- src_surface.info.height = 100;
- src_surface.info.num_planes = 1;
- src_surface.info.planes[0].ptr = (unsigned char*)src_mem;
- src_surface.info.planes[0].stride = src_surface.info.width * 4;
-
- dst_surface.info.format = TBM_FORMAT_XRGB8888;
- dst_surface.info.width = 100;
- dst_surface.info.height = 100;
- dst_surface.info.num_planes = 1;
- dst_surface.info.planes[0].ptr = (unsigned char*)dst_mem;
- dst_surface.info.planes[0].stride = dst_surface.info.width * 4;
-
- _init_test();
-
- //fail map of src buffer
- src_surface.info.num_planes = 0;
- error = tdm_helper_convert_buffer(&src_surface, &dst_surface, &src_pos, &dst_pos, TDM_TRANSFORM_FLIPPED, 0);
- ASSERT_NE(TDM_ERROR_NONE, error);
- src_surface.info.num_planes = 1;
-
- //fail map of dst buffer
- dst_surface.info.num_planes = 0;
- error = tdm_helper_convert_buffer(&src_surface, &dst_surface, &src_pos, &dst_pos, TDM_TRANSFORM_FLIPPED, 0);
- ASSERT_NE(TDM_ERROR_NONE, error);
- dst_surface.info.num_planes = 1;
-
- //wrong format of src buffer
- src_surface.info.format = TBM_FORMAT_YUV410;
- error = tdm_helper_convert_buffer(&src_surface, &dst_surface, &src_pos, &dst_pos, TDM_TRANSFORM_FLIPPED, 0);
- ASSERT_NE(TDM_ERROR_NONE, error);
- src_surface.info.format = TBM_FORMAT_ARGB8888;
-
- //wrong format of dst buffer
- dst_surface.info.format = TBM_FORMAT_YUV410;
- error = tdm_helper_convert_buffer(&src_surface, &dst_surface, &src_pos, &dst_pos, TDM_TRANSFORM_FLIPPED, 0);
- ASSERT_NE(TDM_ERROR_NONE, error);
- dst_surface.info.format = TBM_FORMAT_ARGB8888;
-}
-
-
-/* tdm_helper_clear_buffer_pos */
-TEST(tdm_helper_clear_buffer_pos, work_flow_success_1)
-{
- int mem1[100*100*3];
- int mem2[100*100*3];
- int mem3[100*100*3];
- struct _tbm_surface surface;
- tdm_pos pos = {1, 0, 9, 10};
-
- surface.info.width = 10;
- surface.info.height = 10;
- surface.info.num_planes = 1;
- surface.info.planes[0].ptr = (unsigned char*)mem1;
- surface.info.planes[0].stride = surface.info.width * 4;
- surface.info.planes[1].ptr = (unsigned char*)mem2;
- surface.info.planes[1].stride = surface.info.width * 4;
- surface.info.planes[2].ptr = (unsigned char*)mem3;
- surface.info.planes[2].stride = surface.info.width * 4;
-
- _init_test();
-
- surface.info.format = TBM_FORMAT_ARGB8888;
- memset(mem1, 0x77, sizeof(mem1));
- memset(mem2, 0x77, sizeof(mem2));
- memset(mem3, 0x77, sizeof(mem3));
- tdm_helper_clear_buffer_pos(&surface, &pos);
- EXPECT_EQ(0, mem1[100+1]);
- EXPECT_EQ(0x77777777, mem1[0]);
- EXPECT_EQ(0x77777777, mem2[0]);
- EXPECT_EQ(0x77777777, mem3[0]);
-
-
- surface.info.format = TBM_FORMAT_YVU420;
- memset(mem1, 0x77, sizeof(mem1));
- memset(mem2, 0x77, sizeof(mem2));
- memset(mem3, 0x77, sizeof(mem3));
- tdm_helper_clear_buffer_pos(&surface, NULL);
- EXPECT_EQ(0x10101010, mem1[0]);
- EXPECT_EQ(0x80808080, mem2[0]);
- EXPECT_EQ(0x80808080, mem3[0]);
-
- surface.info.format = TBM_FORMAT_NV12;
- memset(mem1, 0x77, sizeof(mem1));
- memset(mem2, 0x77, sizeof(mem2));
- memset(mem3, 0x77, sizeof(mem3));
- tdm_helper_clear_buffer_pos(&surface, NULL);
- EXPECT_EQ(0x10101010, mem1[0]);
- EXPECT_EQ(0x80808080, mem2[0]);
- EXPECT_EQ(0x77777777, mem3[0]);
-
- surface.info.format = TBM_FORMAT_UYVY;
- memset(mem2, 0x77, sizeof(mem2));
- memset(mem3, 0x77, sizeof(mem3));
- tdm_helper_clear_buffer_pos(&surface, NULL);
- EXPECT_EQ(0x80108010, mem1[0]);
- EXPECT_EQ(0x77777777, mem2[0]);
- EXPECT_EQ(0x77777777, mem3[0]);
-
- surface.info.format = TBM_FORMAT_YUYV;
- memset(mem1, 0x77, sizeof(mem1));
- memset(mem2, 0x77, sizeof(mem2));
- memset(mem3, 0x77, sizeof(mem3));
- tdm_helper_clear_buffer_pos(&surface, NULL);
- EXPECT_EQ(0x10801080, mem1[0]);
- EXPECT_EQ(0x77777777, mem2[0]);
- EXPECT_EQ(0x77777777, mem3[0]);
-
- surface.info.format = TBM_FORMAT_YVU411;
- memset(mem1, 0x77, sizeof(mem1));
- memset(mem2, 0x77, sizeof(mem2));
- memset(mem3, 0x77, sizeof(mem3));
- tdm_helper_clear_buffer_pos(&surface, NULL);
- EXPECT_EQ(0x77777777, mem1[0]);
- EXPECT_EQ(0x77777777, mem2[0]);
- EXPECT_EQ(0x77777777, mem3[0]);
-}
-
-
-/* tdm_helper_clear_buffer */
-TEST(tdm_helper_clear_buffer, work_flow_success_1)
-{
- int mem1[100*100*3];
- struct _tbm_surface surface;
-
- surface.info.width = 10;
- surface.info.height = 10;
- surface.info.num_planes = 1;
- surface.info.planes[0].ptr = (unsigned char*)mem1;
- surface.info.planes[0].stride = surface.info.width * 4;
-
- _init_test();
-
- surface.info.format = TBM_FORMAT_ARGB8888;
- memset(mem1, 0x77, sizeof(mem1));
- tdm_helper_clear_buffer(&surface);
- EXPECT_EQ(0, mem1[0]);
-}
-
-/* tdm_helper_dump_buffer */
-//TEST(tdm_helper_dump_buffer, work_flow_success_1)
-//{
-// int mem1[10*10*3];
-// int mem2[10*10*3];
-// int mem3[10*10*3];
-// struct _tbm_surface surface;
-//
-// surface.info.width = 10;
-// surface.info.height = 10;
-// surface.info.num_planes = 1;
-// surface.info.planes[0].ptr = (unsigned char*)mem1;
-// surface.info.planes[0].stride = surface.info.width * 4;
-// surface.info.planes[1].ptr = (unsigned char*)mem2;
-// surface.info.planes[1].stride = surface.info.width * 4;
-// surface.info.planes[2].ptr = (unsigned char*)mem3;
-// surface.info.planes[2].stride = surface.info.width * 4;
-//
-// _init_test();
-//
-// surface.info.format = TBM_FORMAT_ARGB8888;
-// tdm_helper_dump_buffer(&surface, "tmp.png");
-//
-// surface.info.format = TBM_FORMAT_YVU420;
-// tdm_helper_dump_buffer(&surface, "tmp.yuv");
-//
-// surface.info.format = TBM_FORMAT_NV12;
-// tdm_helper_dump_buffer(&surface, "tmp.yuv");
-//
-// surface.info.format = TBM_FORMAT_YUYV;
-// tdm_helper_dump_buffer(&surface, "tmp.yuv");
-//
-// surface.info.format = TBM_FORMAT_YVU411;
-// tdm_helper_dump_buffer(&surface, "tmp.yuv");
-//
-//}
-
-/* tdm_helper_dump_buffer */
-TEST(tdm_helper_dump_buffer, work_flow_error_1___NULL)
-{
- struct _tbm_surface surface;
- char str[1024] = {'t', 'm', 'p', 0};
-
- _init_test();
-
- tdm_helper_dump_buffer(&surface, "tmp.yuv");
- tdm_helper_dump_buffer(NULL, str);
+TEST_P(TDMHelper, HelperOutputCommitPerVblankEnabledNullObject)
+{
+ ASSERT_EQ(tdm_helper_output_commit_per_vblank_enabled(NULL), -1);
}
+#ifdef TDM_UT_TEST_WITH_PARAMS
+INSTANTIATE_TEST_CASE_P(TDMHelperParams,
+ TDMHelper,
+ Combine(Bool(), Bool(), Values(TDM_DEFAULT_MODULE)));
+#else
+INSTANTIATE_TEST_CASE_P(TDMHelperParams,
+ TDMHelper,
+ Values(TDM_DEFAULT_MODULE));
+#endif
+
+/* LCOV_EXCL_END */
\ No newline at end of file