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