diff --git a/Userland/DynamicLoader/CMakeLists.txt b/Userland/DynamicLoader/CMakeLists.txt index 3ce98360390..e4ff20970b4 100644 --- a/Userland/DynamicLoader/CMakeLists.txt +++ b/Userland/DynamicLoader/CMakeLists.txt @@ -8,6 +8,8 @@ file(GLOB AK_SOURCES "../../AK/*.cpp") file(GLOB ELF_SOURCES "../Libraries/LibELF/*.cpp") file(GLOB LIBC_SOURCES1 "../Libraries/LibC/*.cpp") file(GLOB LIBC_SOURCES2 "../Libraries/LibC/*/*.cpp") +file(GLOB LIBC_TEST_SOURCES "../Libraries/LibC/Tests/*.cpp") +list(REMOVE_ITEM LIBC_SOURCES2 ${LIBC_TEST_SOURCES}) if ("${SERENITY_ARCH}" STREQUAL "i686") file(GLOB LIBC_SOURCES3 "../Libraries/LibC/arch/i386/*.S") diff --git a/Userland/Libraries/LibC/CMakeLists.txt b/Userland/Libraries/LibC/CMakeLists.txt index f2d90963dbd..1ef945d3fec 100644 --- a/Userland/Libraries/LibC/CMakeLists.txt +++ b/Userland/Libraries/LibC/CMakeLists.txt @@ -1,3 +1,5 @@ +add_subdirectory(Tests) + set(LIBC_SOURCES arpa/inet.cpp assert.cpp diff --git a/Userland/Libraries/LibC/Tests/CMakeLists.txt b/Userland/Libraries/LibC/Tests/CMakeLists.txt new file mode 100644 index 00000000000..768d9842278 --- /dev/null +++ b/Userland/Libraries/LibC/Tests/CMakeLists.txt @@ -0,0 +1,8 @@ +file(GLOB TEST_SOURCES CONFIGURE_DEPENDS "*.cpp") + +foreach(source ${TEST_SOURCES}) + get_filename_component(name ${source} NAME_WE) + add_executable(${name} ${source}) + target_link_libraries(${name} LibC LibCore) + install(TARGETS ${name} RUNTIME DESTINATION usr/Tests/LibC) +endforeach() diff --git a/Userland/Libraries/LibC/Tests/TestLibCTime.cpp b/Userland/Libraries/LibC/Tests/TestLibCTime.cpp new file mode 100644 index 00000000000..1ae599c1e13 --- /dev/null +++ b/Userland/Libraries/LibC/Tests/TestLibCTime.cpp @@ -0,0 +1,65 @@ +/* + * Copyright (c) 2021, Brian Gianforcaro + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include +#include +#include + +const auto expected_epoch = "Thu Jan 1 00:00:00 1970\n"sv; + +TEST_CASE(asctime) +{ + time_t epoch = 0; + auto result = asctime(localtime(&epoch)); + EXPECT_EQ(expected_epoch, StringView(result)); +} + +TEST_CASE(asctime_r) +{ + char buffer[26] {}; + time_t epoch = 0; + auto result = asctime_r(localtime(&epoch), buffer); + EXPECT_EQ(expected_epoch, StringView(result)); +} + +TEST_CASE(ctime) +{ + time_t epoch = 0; + auto result = ctime(&epoch); + + EXPECT_EQ(expected_epoch, StringView(result)); +} + +TEST_CASE(ctime_r) +{ + char buffer[26] {}; + time_t epoch = 0; + auto result = ctime_r(&epoch, buffer); + + EXPECT_EQ(expected_epoch, StringView(result)); +} + +TEST_MAIN(LibCTime)