aboutsummaryrefslogtreecommitdiff
path: root/libc/test/src/stdio/fprintf_test.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'libc/test/src/stdio/fprintf_test.cpp')
-rw-r--r--libc/test/src/stdio/fprintf_test.cpp26
1 files changed, 26 insertions, 0 deletions
diff --git a/libc/test/src/stdio/fprintf_test.cpp b/libc/test/src/stdio/fprintf_test.cpp
index 6799323..b035b6d 100644
--- a/libc/test/src/stdio/fprintf_test.cpp
+++ b/libc/test/src/stdio/fprintf_test.cpp
@@ -15,6 +15,10 @@
#include "src/stdio/fprintf.h"
+#include "src/__support/CPP/limits.h"
+#include "src/__support/macros/properties/architectures.h"
+#include "test/UnitTest/ErrnoCheckingTest.h"
+#include "test/UnitTest/ErrnoSetterMatcher.h"
#include "test/UnitTest/Test.h"
namespace printf_test {
@@ -31,6 +35,8 @@ using ::fread;
#endif // LIBC_COPT_STDIO_USE_SYSTEM_FILE
} // namespace printf_test
+using LlvmLibcFPrintfTest = LIBC_NAMESPACE::testing::ErrnoCheckingTest;
+
TEST(LlvmLibcFPrintfTest, WriteToFile) {
const char *FILENAME = APPEND_LIBC_TEST("fprintf_output.test");
auto FILE_PATH = libc_make_test_file_path(FILENAME);
@@ -78,6 +84,26 @@ TEST(LlvmLibcFPrintfTest, WriteToFile) {
written =
LIBC_NAMESPACE::fprintf(file, "Writing to a read only file should fail.");
EXPECT_LT(written, 0);
+ ASSERT_ERRNO_FAILURE();
+
+ ASSERT_EQ(printf_test::fclose(file), 0);
+}
+
+#if !defined(LIBC_COPT_PRINTF_NO_NULLPTR_CHECKS) && \
+ !defined(LIBC_COPT_PRINTF_DISABLE_WRITE_INT) && \
+ !defined(LIBC_TARGET_ARCH_IS_GPU)
+TEST(LlvmLibcFPrintfTest, NullPtrCheck) {
+ const char *FILENAME = APPEND_LIBC_TEST("fprintf_nullptr.test");
+ auto FILE_PATH = libc_make_test_file_path(FILENAME);
+
+ ::FILE *file = printf_test::fopen(FILE_PATH, "w");
+ ASSERT_FALSE(file == nullptr);
+
+ int ret =
+ LIBC_NAMESPACE::fprintf(file, "hello %n", static_cast<int *>(nullptr));
+ EXPECT_LT(ret, 0);
+ ASSERT_ERRNO_FAILURE();
ASSERT_EQ(printf_test::fclose(file), 0);
}
+#endif // LIBC_COPT_PRINTF_NO_NULLPTR_CHECKS