feat: 添加屏幕去重功能并调整测试用例目录结构

This commit is contained in:
2026-03-22 04:18:59 +08:00
parent ad22b0fe93
commit ac22a2b529
10 changed files with 214 additions and 49 deletions

2
tests/CMakeLists.txt Normal file
View File

@@ -0,0 +1,2 @@
add_subdirectory(backend)
add_subdirectory(core)

View File

@@ -0,0 +1,19 @@
set(OUTPUT_UTILS_TEST_APP_NAME "zdwm-output-utils-tests")
add_executable(${OUTPUT_UTILS_TEST_APP_NAME}
${CMAKE_CURRENT_SOURCE_DIR}/output_utils_test.c
${SOURCE_DIR}/backend/output_utils.c
)
target_include_directories(${OUTPUT_UTILS_TEST_APP_NAME}
PRIVATE ${SOURCE_DIR}
PRIVATE ${BUILD_DIR}
)
target_link_libraries(${OUTPUT_UTILS_TEST_APP_NAME}
PRIVATE m
)
add_test(NAME ${OUTPUT_UTILS_TEST_APP_NAME}
COMMAND $<TARGET_FILE:${OUTPUT_UTILS_TEST_APP_NAME}>
)

View File

@@ -0,0 +1,63 @@
#include <assert.h>
#include <stdint.h>
#include "backend/output_utils.h"
#include "utils.h"
static void assert_output_geometry(const wm_output_info_t *output, int32_t x,
int32_t y, int32_t width,
int32_t height) {
assert(output);
assert(output->geometry.x == x);
assert(output->geometry.y == y);
assert(output->geometry.width == width);
assert(output->geometry.height == height);
}
static void destroy_detect_result(wm_backend_detect_t *detect) {
assert(detect);
for (size_t i = 0; i < detect->output_count; i++) {
p_delete(&detect->outputs[i].name);
}
p_delete(&detect->outputs);
free(detect);
}
static void test_output_remove_duplication_invalid_input(void) {
wm_output_info_t output = {0};
assert(output_remove_duplication(nullptr, 0) == nullptr);
assert(output_remove_duplication(&output, 0) == nullptr);
}
static void test_output_remove_duplication_keeps_non_nested_outputs(void) {
wm_output_info_t outputs[] = {
{
.geometry = {.x = 0, .y = 0, .width = 3840, .height = 1080},
},
{
.geometry = {.x = 0, .y = 0, .width = 1920, .height = 1080},
},
{
.geometry = {.x = 1920, .y = 0, .width = 1920, .height = 1080},
},
{
.geometry = {.x = 3840, .y = 0, .width = 1280, .height = 1024},
},
};
wm_backend_detect_t *detect =
output_remove_duplication(outputs, countof(outputs));
assert(detect);
assert(detect->output_count == 2);
assert_output_geometry(&detect->outputs[0], 0, 0, 3840, 1080);
assert_output_geometry(&detect->outputs[1], 3840, 0, 1280, 1024);
destroy_detect_result(detect);
}
int main(void) {
test_output_remove_duplication_invalid_input();
test_output_remove_duplication_keeps_non_nested_outputs();
return 0;
}

34
tests/core/CMakeLists.txt Normal file
View File

@@ -0,0 +1,34 @@
set(TEST_APP_NAME "zdwm-tests")
add_executable(${TEST_APP_NAME}
${CMAKE_CURRENT_SOURCE_DIR}/main.c
${SOURCE_DIR}/utils.c
${SOURCE_DIR}/backend/output_utils.c
${SOURCE_DIR}/backend/x11/backend.c
${SOURCE_DIR}/core/layout.c
${SOURCE_DIR}/core/runtime.c
${SOURCE_DIR}/core/state.c
)
target_include_directories(${TEST_APP_NAME} SYSTEM
PRIVATE ${deps_INCLUDE_DIRS}
)
target_include_directories(${TEST_APP_NAME}
PRIVATE ${SOURCE_DIR}
PRIVATE ${BUILD_DIR}
)
target_link_libraries(${TEST_APP_NAME}
PRIVATE m
PRIVATE ${deps_LIBRARIES}
)
if(HAS_EXECINFO AND LIB_EXECINFO)
target_link_libraries(${TEST_APP_NAME} PRIVATE ${LIB_EXECINFO})
endif()
add_test(NAME ${TEST_APP_NAME} COMMAND $<TARGET_FILE:${TEST_APP_NAME}>)
set_tests_properties(${TEST_APP_NAME} PROPERTIES
ENVIRONMENT "DISPLAY=:3"
)