"" # No optional arguments
"SUITE" # Single value arguments
"SRCS;HDRS;DEPENDS;COMPILE_OPTIONS" # Multi-value arguments
+ "NO_LIBC_UNITTEST_TEST_MAIN"
${ARGN}
)
if(NOT LIBC_UNITTEST_SRCS)
${fq_deps_list}
)
- target_link_libraries(${fq_target_name} PRIVATE LibcUnitTest libc_test_utils)
+ if(NO_LIBC_UNITTEST_TEST_MAIN)
+ target_link_libraries(${fq_target_name} PRIVATE LibcUnitTest libc_test_utils)
+ else()
+ target_link_libraries(${fq_target_name} PRIVATE LibcUnitTest LibcUnitTestMain libc_test_utils)
+ endif()
add_custom_command(
TARGET ${fq_target_name}
add_subdirectory(FPUtil)
add_subdirectory(CPP)
+add_subdirectory(UnitTest)
if(NOT LLVM_LIBC_FULL_BUILD)
return()
--- /dev/null
+add_libc_testsuite(libc_unittest_tests)
+
+add_libc_unittest(
+ testfilter_test
+ SUITE
+ libc_unittest_tests
+ SRCS
+ testfilter_test.cpp
+ DEPENDS
+ libc.utils.CPP.standalone_cpp
+)
--- /dev/null
+//===-- Tests for Test Filter functionality -------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#include "utils/UnitTest/LibcTest.h"
+
+TEST(LlvmLibcTestFilterTest, CorrectFilter) {}
+
+TEST(LlvmLibcTestFilterTest, CorrectFilter2) {}
+
+TEST(LlvmLibcTestFilterTest, IncorrectFilter) {}
+
+TEST(LlvmLibcTestFilterTest, NoFilter) {}
+
+TEST(LlvmLibcTestFilterTest, CheckCorrectFilter) {
+ ASSERT_EQ(
+ __llvm_libc::testing::Test::runTests("LlvmLibcTestFilterTest.NoFilter"),
+ 0);
+ ASSERT_EQ(__llvm_libc::testing::Test::runTests(
+ "LlvmLibcTestFilterTest.IncorrFilter"),
+ 1);
+ ASSERT_EQ(__llvm_libc::testing::Test::runTests(
+ "LlvmLibcTestFilterTest.CorrectFilter"),
+ 0);
+ ASSERT_EQ(__llvm_libc::testing::Test::runTests(
+ "LlvmLibcTestFilterTest.CorrectFilter2"),
+ 0);
+}
+
+int main() {
+ __llvm_libc::testing::Test::runTests(
+ "LlvmLibcTestFilterTest.CheckCorrectFilter");
+ return 0;
+}
target_include_directories(LibcUnitTest PUBLIC ${LIBC_SOURCE_DIR})
add_dependencies(LibcUnitTest libc.utils.CPP.standalone_cpp)
target_link_libraries(LibcUnitTest PUBLIC libc_test_utils)
+
+add_library(
+ LibcUnitTestMain
+ LibcTestMain.cpp
+)
+
+target_include_directories(LibcUnitTestMain PUBLIC ${LIBC_SOURCE_DIR})
+add_dependencies(LibcUnitTestMain LibcUnitTest libc.utils.CPP.standalone_cpp)
+target_link_libraries(LibcUnitTestMain PUBLIC libc_test_utils)
+
-//===-- Implementation of the base class for libc unittests ---------------===//
+//===-- Implementation of the base class for libc unittests----------------===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
End = T;
}
-int Test::runTests() {
+int Test::runTests(const char *TestFilter) {
int TestCount = 0;
int FailCount = 0;
- for (Test *T = Start; T != nullptr; T = T->Next, ++TestCount) {
+ for (Test *T = Start; T != nullptr; T = T->Next) {
const char *TestName = T->getName();
+ std::string StrTestName(TestName);
constexpr auto GREEN = "\033[32m";
constexpr auto RED = "\033[31m";
constexpr auto RESET = "\033[0m";
+ if ((TestFilter != nullptr) && (StrTestName != TestFilter)) {
+ continue;
+ }
std::cout << GREEN << "[ RUN ] " << RESET << TestName << '\n';
RunContext Ctx;
T->SetUp();
std::cout << GREEN << "[ OK ] " << RESET << TestName << '\n';
break;
}
+ ++TestCount;
}
- std::cout << "Ran " << TestCount << " tests. "
- << " PASS: " << TestCount - FailCount << ' '
- << " FAIL: " << FailCount << '\n';
+ if (TestCount > 0) {
+ std::cout << "Ran " << TestCount << " tests. "
+ << " PASS: " << TestCount - FailCount << ' '
+ << " FAIL: " << FailCount << '\n';
+ } else {
+ std::cout << "No tests run.\n";
+ if (TestFilter) {
+ std::cout << "No matching test for " << TestFilter << '\n';
+ }
+ }
- return FailCount > 0 ? 1 : 0;
+ return FailCount > 0 || TestCount == 0 ? 1 : 0;
}
template bool Test::test<char, 0>(TestCondition Cond, char LHS, char RHS,
#endif // ENABLE_SUBPROCESS_TESTS
} // namespace testing
} // namespace __llvm_libc
-
-int main() { return __llvm_libc::testing::Test::runTests(); }
virtual void SetUp() {}
virtual void TearDown() {}
- static int runTests();
+ static int runTests(const char *);
protected:
static void addTest(Test *T);
--- /dev/null
+//===-- Main function for implementation of base class for libc unittests -===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#include "LibcTest.h"
+
+static const char *getTestFilter(int argc, char *argv[]) {
+ return argc > 1 ? argv[1] : nullptr;
+}
+
+int main(int argc, char *argv[]) {
+ const char *TestFilter = getTestFilter(argc, argv);
+ return __llvm_libc::testing::Test::runTests(TestFilter);
+}