9b5028523f
Snapshotted from 5e7fd50e17b6edf1cadff973d0ec68966cf3265e in the upstream repository: https://github.com/google/googletest Since standalone builds and bots will need this, checking in a copy rather than require everyone use gclient, repo, git submodules or scary CMake scripts is probably simplest. Consumers with their own copies of googletest will likely wish to ignore or even exclude this directory. BUG=129 Change-Id: If9f4cec5ae0d7a3976dcfffd1ead6950ef7b7c4e Reviewed-on: https://boringssl-review.googlesource.com/13229 Reviewed-by: David Benjamin <davidben@google.com>
168 lines
6.8 KiB
C++
168 lines
6.8 KiB
C++
// Copyright 2005, Google Inc.
|
|
// All rights reserved.
|
|
//
|
|
// Redistribution and use in source and binary forms, with or without
|
|
// modification, are permitted provided that the following conditions are
|
|
// met:
|
|
//
|
|
// * Redistributions of source code must retain the above copyright
|
|
// notice, this list of conditions and the following disclaimer.
|
|
// * Redistributions in binary form must reproduce the above
|
|
// copyright notice, this list of conditions and the following disclaimer
|
|
// in the documentation and/or other materials provided with the
|
|
// distribution.
|
|
// * Neither the name of Google Inc. nor the names of its
|
|
// contributors may be used to endorse or promote products derived from
|
|
// this software without specific prior written permission.
|
|
//
|
|
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
|
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
|
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
|
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
//
|
|
// Authors: wan@google.com (Zhanyong Wan), eefacm@gmail.com (Sean Mcafee)
|
|
//
|
|
// The Google C++ Testing Framework (Google Test)
|
|
//
|
|
// This header file declares the String class and functions used internally by
|
|
// Google Test. They are subject to change without notice. They should not used
|
|
// by code external to Google Test.
|
|
//
|
|
// This header file is #included by <gtest/internal/gtest-internal.h>.
|
|
// It should not be #included by other files.
|
|
|
|
#ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_STRING_H_
|
|
#define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_STRING_H_
|
|
|
|
#ifdef __BORLANDC__
|
|
// string.h is not guaranteed to provide strcpy on C++ Builder.
|
|
# include <mem.h>
|
|
#endif
|
|
|
|
#include <string.h>
|
|
#include <string>
|
|
|
|
#include "gtest/internal/gtest-port.h"
|
|
|
|
namespace testing {
|
|
namespace internal {
|
|
|
|
// String - an abstract class holding static string utilities.
|
|
class GTEST_API_ String {
|
|
public:
|
|
// Static utility methods
|
|
|
|
// Clones a 0-terminated C string, allocating memory using new. The
|
|
// caller is responsible for deleting the return value using
|
|
// delete[]. Returns the cloned string, or NULL if the input is
|
|
// NULL.
|
|
//
|
|
// This is different from strdup() in string.h, which allocates
|
|
// memory using malloc().
|
|
static const char* CloneCString(const char* c_str);
|
|
|
|
#if GTEST_OS_WINDOWS_MOBILE
|
|
// Windows CE does not have the 'ANSI' versions of Win32 APIs. To be
|
|
// able to pass strings to Win32 APIs on CE we need to convert them
|
|
// to 'Unicode', UTF-16.
|
|
|
|
// Creates a UTF-16 wide string from the given ANSI string, allocating
|
|
// memory using new. The caller is responsible for deleting the return
|
|
// value using delete[]. Returns the wide string, or NULL if the
|
|
// input is NULL.
|
|
//
|
|
// The wide string is created using the ANSI codepage (CP_ACP) to
|
|
// match the behaviour of the ANSI versions of Win32 calls and the
|
|
// C runtime.
|
|
static LPCWSTR AnsiToUtf16(const char* c_str);
|
|
|
|
// Creates an ANSI string from the given wide string, allocating
|
|
// memory using new. The caller is responsible for deleting the return
|
|
// value using delete[]. Returns the ANSI string, or NULL if the
|
|
// input is NULL.
|
|
//
|
|
// The returned string is created using the ANSI codepage (CP_ACP) to
|
|
// match the behaviour of the ANSI versions of Win32 calls and the
|
|
// C runtime.
|
|
static const char* Utf16ToAnsi(LPCWSTR utf16_str);
|
|
#endif
|
|
|
|
// Compares two C strings. Returns true iff they have the same content.
|
|
//
|
|
// Unlike strcmp(), this function can handle NULL argument(s). A
|
|
// NULL C string is considered different to any non-NULL C string,
|
|
// including the empty string.
|
|
static bool CStringEquals(const char* lhs, const char* rhs);
|
|
|
|
// Converts a wide C string to a String using the UTF-8 encoding.
|
|
// NULL will be converted to "(null)". If an error occurred during
|
|
// the conversion, "(failed to convert from wide string)" is
|
|
// returned.
|
|
static std::string ShowWideCString(const wchar_t* wide_c_str);
|
|
|
|
// Compares two wide C strings. Returns true iff they have the same
|
|
// content.
|
|
//
|
|
// Unlike wcscmp(), this function can handle NULL argument(s). A
|
|
// NULL C string is considered different to any non-NULL C string,
|
|
// including the empty string.
|
|
static bool WideCStringEquals(const wchar_t* lhs, const wchar_t* rhs);
|
|
|
|
// Compares two C strings, ignoring case. Returns true iff they
|
|
// have the same content.
|
|
//
|
|
// Unlike strcasecmp(), this function can handle NULL argument(s).
|
|
// A NULL C string is considered different to any non-NULL C string,
|
|
// including the empty string.
|
|
static bool CaseInsensitiveCStringEquals(const char* lhs,
|
|
const char* rhs);
|
|
|
|
// Compares two wide C strings, ignoring case. Returns true iff they
|
|
// have the same content.
|
|
//
|
|
// Unlike wcscasecmp(), this function can handle NULL argument(s).
|
|
// A NULL C string is considered different to any non-NULL wide C string,
|
|
// including the empty string.
|
|
// NB: The implementations on different platforms slightly differ.
|
|
// On windows, this method uses _wcsicmp which compares according to LC_CTYPE
|
|
// environment variable. On GNU platform this method uses wcscasecmp
|
|
// which compares according to LC_CTYPE category of the current locale.
|
|
// On MacOS X, it uses towlower, which also uses LC_CTYPE category of the
|
|
// current locale.
|
|
static bool CaseInsensitiveWideCStringEquals(const wchar_t* lhs,
|
|
const wchar_t* rhs);
|
|
|
|
// Returns true iff the given string ends with the given suffix, ignoring
|
|
// case. Any string is considered to end with an empty suffix.
|
|
static bool EndsWithCaseInsensitive(
|
|
const std::string& str, const std::string& suffix);
|
|
|
|
// Formats an int value as "%02d".
|
|
static std::string FormatIntWidth2(int value); // "%02d" for width == 2
|
|
|
|
// Formats an int value as "%X".
|
|
static std::string FormatHexInt(int value);
|
|
|
|
// Formats a byte as "%02X".
|
|
static std::string FormatByte(unsigned char value);
|
|
|
|
private:
|
|
String(); // Not meant to be instantiated.
|
|
}; // class String
|
|
|
|
// Gets the content of the stringstream's buffer as an std::string. Each '\0'
|
|
// character in the buffer is replaced with "\\0".
|
|
GTEST_API_ std::string StringStreamToString(::std::stringstream* stream);
|
|
|
|
} // namespace internal
|
|
} // namespace testing
|
|
|
|
#endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_STRING_H_
|