From 948095edfc04f35a69f15cd7d9926844ee0ac624 Mon Sep 17 00:00:00 2001 From: Tom Sepez Date: Wed, 7 Jan 2015 12:25:07 -0800 Subject: Add ostream helpers for FX String classes. This allows integration with the gtest EXPECT_* macros. R=brucedawson@chromium.org Review URL: https://codereview.chromium.org/837843002 --- core/include/fxcrt/fx_string.h | 4 +++ core/src/fxcrt/fx_basic_bstring_unittest.cpp | 2 +- pdfium.gyp | 2 ++ testing/fx_string_testhelpers.cpp | 47 ++++++++++++++++++++++++++++ testing/fx_string_testhelpers.h | 19 +++++++++++ 5 files changed, 73 insertions(+), 1 deletion(-) create mode 100644 testing/fx_string_testhelpers.cpp create mode 100644 testing/fx_string_testhelpers.h diff --git a/core/include/fxcrt/fx_string.h b/core/include/fxcrt/fx_string.h index 91032f9d97..524d7efde5 100644 --- a/core/include/fxcrt/fx_string.h +++ b/core/include/fxcrt/fx_string.h @@ -18,6 +18,7 @@ class CFX_WideStringL; class CFX_ByteStringC : public CFX_Object { public: + typedef FX_CHAR value_type; CFX_ByteStringC() { @@ -160,6 +161,7 @@ struct CFX_StringData { class CFX_ByteString : public CFX_Object { public: + typedef FX_CHAR value_type; CFX_ByteString() { @@ -473,6 +475,7 @@ typedef CFX_StringBufTemplate<256> CFX_StringBuf256; class CFX_WideStringC : public CFX_Object { public: + typedef FX_WCHAR value_type; CFX_WideStringC() { @@ -618,6 +621,7 @@ struct CFX_StringDataW { class CFX_WideString : public CFX_Object { public: + typedef FX_WCHAR value_type; CFX_WideString() { diff --git a/core/src/fxcrt/fx_basic_bstring_unittest.cpp b/core/src/fxcrt/fx_basic_bstring_unittest.cpp index cf5e05d1ef..138f1bff2c 100644 --- a/core/src/fxcrt/fx_basic_bstring_unittest.cpp +++ b/core/src/fxcrt/fx_basic_bstring_unittest.cpp @@ -3,7 +3,7 @@ // found in the LICENSE file. #include "testing/gtest/include/gtest/gtest.h" - +#include "testing/fx_string_testhelpers.h" #include "../../include/fxcrt/fx_basic.h" TEST(fxcrt, ByteStringCNull) { diff --git a/pdfium.gyp b/pdfium.gyp index f50005d10f..5b41ed08fe 100644 --- a/pdfium.gyp +++ b/pdfium.gyp @@ -821,6 +821,8 @@ '<(DEPTH)' ], 'sources': [ + 'testing/fx_string_testhelpers.h', + 'testing/fx_string_testhelpers.cpp', 'core/src/fxcrt/fx_basic_bstring_unittest.cpp', ], }, diff --git a/testing/fx_string_testhelpers.cpp b/testing/fx_string_testhelpers.cpp new file mode 100644 index 0000000000..1ee705fa4c --- /dev/null +++ b/testing/fx_string_testhelpers.cpp @@ -0,0 +1,47 @@ +// Copyright 2014 PDFium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "fx_string_testhelpers.h" + +#include +#include + +namespace { + +template +std::ostream& output_string(std::ostream& out, const T& str) { + out << std::hex << std::setfill('0') << '"'; + for (size_t i = 0; i < str.GetLength(); ++i) { + unsigned int c = str.GetAt(i); + if (c >= 0x20 && c < 0x7F) { + out << static_cast(c); + } else if (sizeof(typename T::value_type) == 1) { + out << "\\x" << std::setw(2) << c << std::setw(0); + } else if (c < 0x10000) { + out << "\\u" << std::setw(4) << c << std::setw(0); + } else { + out << ""; + } + } + out << '"' << std::dec << std::setfill(' '); + return out; +} + +} // namespace + +std::ostream& operator<<(std::ostream& out, const CFX_ByteStringC& str) { + return output_string(out, str); +} + +std::ostream& operator<<(std::ostream& out, const CFX_ByteString& str) { + return output_string(out, str); +} + +std::ostream& operator<<(std::ostream& out, const CFX_WideStringC& str) { + return output_string(out, str); +} + +std::ostream& operator<<(std::ostream& out, const CFX_WideString& str) { + return output_string(out, str); +} diff --git a/testing/fx_string_testhelpers.h b/testing/fx_string_testhelpers.h new file mode 100644 index 0000000000..7d0668817c --- /dev/null +++ b/testing/fx_string_testhelpers.h @@ -0,0 +1,19 @@ +// Copyright 2014 PDFium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef TESTING_FX_STRING_TESTHELPERS_H_ +#define TESTING_FX_STRING_TESTHELPERS_H_ + +#include + +#include "../core/include/fxcrt/fx_basic.h" + +// Output stream operator so GTEST macros work with FX strings. +std::ostream& operator<<(std::ostream& out, const CFX_ByteStringC& str); +std::ostream& operator<<(std::ostream& out, const CFX_ByteString& str); +std::ostream& operator<<(std::ostream& out, const CFX_WideStringC& str); +std::ostream& operator<<(std::ostream& out, const CFX_WideString& str); + +#endif // TESTING_FX_STR_TESTHELPERS_H_ + -- cgit v1.2.3