1// Copyright 2013 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#ifndef URL_URL_TEST_UTILS_H_ 6#define URL_URL_TEST_UTILS_H_ 7 8// Convenience functions for string conversions. 9// These are mostly intended for use in unit tests. 10 11#include <string> 12 13#include "base/strings/string16.h" 14#include "testing/gtest/include/gtest/gtest.h" 15#include "url/url_canon_internal.h" 16 17namespace url_test_utils { 18 19// Converts a UTF-16 string from native wchar_t format to char16, by 20// truncating the high 32 bits. This is not meant to handle true UTF-32 21// encoded strings. 22inline base::string16 WStringToUTF16(const wchar_t* src) { 23 base::string16 str; 24 int length = static_cast<int>(wcslen(src)); 25 for (int i = 0; i < length; ++i) { 26 str.push_back(static_cast<char16>(src[i])); 27 } 28 return str; 29} 30 31// Converts a string from UTF-8 to UTF-16 32inline base::string16 ConvertUTF8ToUTF16(const std::string& src) { 33 int length = static_cast<int>(src.length()); 34 EXPECT_LT(length, 1024); 35 url_canon::RawCanonOutputW<1024> output; 36 EXPECT_TRUE(url_canon::ConvertUTF8ToUTF16(src.data(), length, &output)); 37 return base::string16(output.data(), output.length()); 38} 39 40// Converts a string from UTF-16 to UTF-8 41inline std::string ConvertUTF16ToUTF8(const base::string16& src) { 42 std::string str; 43 url_canon::StdStringCanonOutput output(&str); 44 EXPECT_TRUE(url_canon::ConvertUTF16ToUTF8(src.data(), 45 static_cast<int>(src.length()), 46 &output)); 47 output.Complete(); 48 return str; 49} 50 51} // namespace url_test_utils 52 53#endif // URL_URL_TEST_UTILS_H_ 54