1 //===- llvm/unittest/Support/ConvertUTFTest.cpp - ConvertUTF tests --------===// 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 "llvm/Support/ConvertUTF.h" 11 #include "gtest/gtest.h" 12 #include <string> 13 14 using namespace llvm; 15 16 TEST(ConvertUTFTest, ConvertUTF16LittleEndianToUTF8String) { 17 // Src is the look of disapproval. 18 static const char Src[] = "\xff\xfe\xa0\x0c_\x00\xa0\x0c"; 19 ArrayRef<char> Ref(Src, sizeof(Src) - 1); 20 std::string Result; 21 bool Success = convertUTF16ToUTF8String(Ref, Result); 22 EXPECT_TRUE(Success); 23 std::string Expected("\xe0\xb2\xa0_\xe0\xb2\xa0"); 24 EXPECT_EQ(Expected, Result); 25 } 26 27 TEST(ConvertUTFTest, ConvertUTF16BigEndianToUTF8String) { 28 // Src is the look of disapproval. 29 static const char Src[] = "\xfe\xff\x0c\xa0\x00_\x0c\xa0"; 30 ArrayRef<char> Ref(Src, sizeof(Src) - 1); 31 std::string Result; 32 bool Success = convertUTF16ToUTF8String(Ref, Result); 33 EXPECT_TRUE(Success); 34 std::string Expected("\xe0\xb2\xa0_\xe0\xb2\xa0"); 35 EXPECT_EQ(Expected, Result); 36 } 37 38 TEST(ConvertUTFTest, OddLengthInput) { 39 std::string Result; 40 bool Success = convertUTF16ToUTF8String(ArrayRef<char>("xxxxx", 5), Result); 41 EXPECT_FALSE(Success); 42 } 43 44 TEST(ConvertUTFTest, Empty) { 45 std::string Result; 46 bool Success = convertUTF16ToUTF8String(ArrayRef<char>(), Result); 47 EXPECT_TRUE(Success); 48 EXPECT_TRUE(Result.empty()); 49 } 50 51 TEST(ConvertUTFTest, HasUTF16BOM) { 52 bool HasBOM = hasUTF16ByteOrderMark(ArrayRef<char>("\xff\xfe", 2)); 53 EXPECT_TRUE(HasBOM); 54 HasBOM = hasUTF16ByteOrderMark(ArrayRef<char>("\xfe\xff", 2)); 55 EXPECT_TRUE(HasBOM); 56 HasBOM = hasUTF16ByteOrderMark(ArrayRef<char>("\xfe\xff ", 3)); 57 EXPECT_TRUE(HasBOM); // Don't care about odd lengths. 58 HasBOM = hasUTF16ByteOrderMark(ArrayRef<char>("\xfe\xff\x00asdf", 6)); 59 EXPECT_TRUE(HasBOM); 60 61 HasBOM = hasUTF16ByteOrderMark(ArrayRef<char>()); 62 EXPECT_FALSE(HasBOM); 63 HasBOM = hasUTF16ByteOrderMark(ArrayRef<char>("\xfe", 1)); 64 EXPECT_FALSE(HasBOM); 65 } 66