|
6 | 6 | // |
7 | 7 | //===----------------------------------------------------------------------===// |
8 | 8 |
|
| 9 | +#include "hdr/types/wchar_t.h" |
| 10 | +#include "hdr/wchar_macros.h" |
9 | 11 | #include "src/stdio/snprintf.h" |
10 | 12 |
|
11 | 13 | #include "test/UnitTest/ErrnoCheckingTest.h" |
@@ -74,3 +76,55 @@ TEST(LlvmLibcSNPrintfTest, CharsWrittenOverflow) { |
74 | 76 | EXPECT_LT(written, 0); |
75 | 77 | ASSERT_ERRNO_FAILURE(); |
76 | 78 | } |
| 79 | + |
| 80 | +#ifndef LIBC_COPT_PRINTF_DISABLE_WIDE |
| 81 | +TEST(LlvmLibcSNPrintfTest, WideCharConversion) { |
| 82 | + char buff[16]; |
| 83 | + int written; |
| 84 | + |
| 85 | + written = LIBC_NAMESPACE::snprintf(buff, sizeof(buff), "%lc", |
| 86 | + static_cast<wchar_t>(L'€')); |
| 87 | + EXPECT_EQ(written, 3); |
| 88 | + ASSERT_STREQ(buff, "€"); |
| 89 | +} |
| 90 | + |
| 91 | +TEST(LlvmLibcSNPrintfTest, WideCharConversionLeftJustified) { |
| 92 | + char buff[16]; |
| 93 | + int written; |
| 94 | + |
| 95 | + written = LIBC_NAMESPACE::snprintf(buff, sizeof(buff), "%-4lc", |
| 96 | + static_cast<wchar_t>(L'€')); |
| 97 | + EXPECT_EQ(written, 6); |
| 98 | + ASSERT_STREQ(buff, "€ "); |
| 99 | +} |
| 100 | + |
| 101 | +TEST(LlvmLibcSNPrintfTest, WideCharConversionRightJustified) { |
| 102 | + char buff[16]; |
| 103 | + int written; |
| 104 | + |
| 105 | + written = LIBC_NAMESPACE::snprintf(buff, sizeof(buff), "%4lc", |
| 106 | + static_cast<wchar_t>(L'€')); |
| 107 | + EXPECT_EQ(written, 6); |
| 108 | + ASSERT_STREQ(buff, " €"); |
| 109 | +} |
| 110 | + |
| 111 | +TEST(LlvmLibcSNPrintfTest, WideCharWEOFConversion) { |
| 112 | + char buff[16]; |
| 113 | + int written; |
| 114 | + |
| 115 | + written = LIBC_NAMESPACE::snprintf(buff, sizeof(buff), "%lc", |
| 116 | + static_cast<wchar_t>(WEOF)); |
| 117 | + EXPECT_EQ(written, -1); |
| 118 | + ASSERT_ERRNO_FAILURE(); |
| 119 | +} |
| 120 | + |
| 121 | +TEST(LlvmLibcSNPrintfTest, WideCharInvalidConversion) { |
| 122 | + char buff[16]; |
| 123 | + int written; |
| 124 | + |
| 125 | + written = LIBC_NAMESPACE::snprintf(buff, sizeof(buff), "%lc", |
| 126 | + static_cast<wchar_t>(0x12ffff)); |
| 127 | + EXPECT_EQ(written, -1); |
| 128 | + ASSERT_ERRNO_FAILURE(); |
| 129 | +} |
| 130 | +#endif // LIBC_COPT_PRINTF_DISABLE_WIDE |
0 commit comments