1 //===-- VASprintfTest.cpp ---------------------------------------*- C++ -*-===// 2 // 3 // The LLVM Compiler Infrastructure 4 // 5 // This file is distributed under the University of Illinois Open Source 6 // License. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 10 #include "lldb/Utility/VASprintf.h" 11 #include "llvm/ADT/SmallString.h" 12 13 #include "gtest/gtest.h" 14 15 #include <locale.h> 16 17 using namespace lldb_private; 18 using namespace llvm; 19 20 static bool Sprintf(llvm::SmallVectorImpl<char> &Buffer, const char *Fmt, ...) { 21 va_list args; 22 va_start(args, Fmt); 23 bool Result = VASprintf(Buffer, Fmt, args); 24 va_end(args); 25 return Result; 26 } 27 28 TEST(VASprintfTest, NoBufferResize) { 29 std::string TestStr("small"); 30 31 llvm::SmallString<32> BigBuffer; 32 ASSERT_TRUE(Sprintf(BigBuffer, "%s", TestStr.c_str())); 33 EXPECT_STREQ(TestStr.c_str(), BigBuffer.c_str()); 34 EXPECT_EQ(TestStr.size(), BigBuffer.size()); 35 } 36 37 TEST(VASprintfTest, BufferResize) { 38 std::string TestStr("bigger"); 39 llvm::SmallString<4> SmallBuffer; 40 ASSERT_TRUE(Sprintf(SmallBuffer, "%s", TestStr.c_str())); 41 EXPECT_STREQ(TestStr.c_str(), SmallBuffer.c_str()); 42 EXPECT_EQ(TestStr.size(), SmallBuffer.size()); 43 } 44 45 TEST(VASprintfTest, EncodingError) { 46 // Save the current locale first. 47 std::string Current(::setlocale(LC_ALL, nullptr)); 48 49 setlocale(LC_ALL, ".932"); 50 51 wchar_t Invalid[2]; 52 Invalid[0] = 129; 53 Invalid[1] = 0; 54 llvm::SmallString<32> Buffer; 55 EXPECT_FALSE(Sprintf(Buffer, "%ls", Invalid)); 56 EXPECT_EQ("<Encoding error>", Buffer); 57 58 setlocale(LC_CTYPE, Current.c_str()); 59 } 60