diff --git a/client/tests/CMakeLists.txt b/client/tests/CMakeLists.txt index c7e07bc6..c1231568 100644 --- a/client/tests/CMakeLists.txt +++ b/client/tests/CMakeLists.txt @@ -1,5 +1,22 @@ cmake_minimum_required(VERSION 3.10) +add_executable(font-tests + font_test.c + ../src/font.c +) +target_compile_definitions(font-tests PRIVATE + FONT_TEST_FILE="${PROJECT_TOP}/repos/cimgui/imgui/misc/fonts/DroidSans.ttf" +) +target_include_directories(font-tests PRIVATE + "${CMAKE_CURRENT_SOURCE_DIR}/../include" +) +add_test(NAME font-tests + COMMAND font-tests +) +set_tests_properties(font-tests PROPERTIES + TIMEOUT 10 +) + if(ENABLE_TRANSPORT_TESTS) add_executable(lgmp-transport-tests lgmp_transport_test.c diff --git a/client/tests/font_test.c b/client/tests/font_test.c new file mode 100644 index 00000000..88367b32 --- /dev/null +++ b/client/tests/font_test.c @@ -0,0 +1,67 @@ +/** + * Looking Glass + * Copyright © 2017-2026 The Looking Glass Authors + * https://looking-glass.io + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the Free + * Software Foundation; either version 2 of the License, or (at your option) + * any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., 59 + * Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#include "font.h" + +#include +#include +#include + +static void testInvalidFontData(void) +{ + const unsigned char emptySfnt[12] = { + 0x00, 0x01, 0x00, 0x00, + }; + assert(!font_isStbTruetypeCompatible( + emptySfnt, sizeof(emptySfnt), 0)); + + const unsigned char truncatedTableDirectory[12] = { + 0x00, 0x01, 0x00, 0x00, + 0x00, 0x01, + }; + assert(!font_isStbTruetypeCompatible( + truncatedTableDirectory, sizeof(truncatedTableDirectory), 0)); +} + +static void testValidFontData(void) +{ + FILE * file = fopen(FONT_TEST_FILE, "rb"); + assert(file); + assert(fseek(file, 0, SEEK_END) == 0); + const long length = ftell(file); + assert(length > 0); + assert(fseek(file, 0, SEEK_SET) == 0); + + void * data = malloc((size_t)length); + assert(data); + assert(fread(data, 1, (size_t)length, file) == (size_t)length); + assert(fclose(file) == 0); + + assert(font_isStbTruetypeCompatible(data, (size_t)length, 0)); + assert(!font_isStbTruetypeCompatible(data, (size_t)length, 1)); + free(data); +} + +int main(void) +{ + testInvalidFontData(); + testValidFontData(); + return 0; +}