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 14using namespace llvm; 15 16TEST(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 27TEST(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 38TEST(ConvertUTFTest, OddLengthInput) { 39 std::string Result; 40 bool Success = convertUTF16ToUTF8String(ArrayRef<char>("xxxxx", 5), Result); 41 EXPECT_FALSE(Success); 42} 43 44TEST(ConvertUTFTest, Empty) { 45 std::string Result; 46 bool Success = convertUTF16ToUTF8String(ArrayRef<char>(), Result); 47 EXPECT_TRUE(Success); 48 EXPECT_TRUE(Result.empty()); 49} 50 51TEST(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