1// Copyright 2012 The Chromium Authors 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#import <Foundation/Foundation.h> 6 7#include <string> 8 9#include "base/strings/sys_string_conversions.h" 10#include "base/strings/utf_string_conversions.h" 11#include "testing/gtest/include/gtest/gtest.h" 12 13namespace base { 14 15TEST(SysStrings, ConversionsFromNSString) { 16 EXPECT_STREQ("Hello, world!", SysNSStringToUTF8(@"Hello, world!").c_str()); 17 18 // Conversions should be able to handle a NULL value without crashing. 19 EXPECT_STREQ("", SysNSStringToUTF8(nil).c_str()); 20 EXPECT_EQ(std::u16string(), SysNSStringToUTF16(nil)); 21} 22 23std::vector<std::string> GetRoundTripStrings() { 24 return { 25 "Hello, World!", // ASCII / ISO8859 string (also valid UTF-8) 26 "a\0b", // UTF-8 with embedded NUL byte 27 "λf", // lowercase lambda + 'f' 28 "χρώμιο", // "chromium" in greek 29 "כרום", // "chromium" in hebrew 30 "クロム", // "chromium" in japanese 31 32 // Tarot card symbol "the morning", which does not fit in one UTF-16 33 // character. 34 "", 35 }; 36} 37 38TEST(SysStrings, RoundTripsFromUTF8) { 39 for (const auto& string8 : GetRoundTripStrings()) { 40 NSString* nsstring8 = SysUTF8ToNSString(string8); 41 std::string back8 = SysNSStringToUTF8(nsstring8); 42 EXPECT_EQ(string8, back8); 43 } 44} 45 46TEST(SysStrings, RoundTripsFromUTF16) { 47 for (const auto& string8 : GetRoundTripStrings()) { 48 std::u16string string16 = base::UTF8ToUTF16(string8); 49 NSString* nsstring16 = SysUTF16ToNSString(string16); 50 std::u16string back16 = SysNSStringToUTF16(nsstring16); 51 EXPECT_EQ(string16, back16); 52 } 53} 54 55} // namespace base 56