summaryrefslogtreecommitdiff
path: root/core/fxcrt/cfx_widestring_unittest.cpp
diff options
context:
space:
mode:
authorRyan Harrison <rharrison@chromium.org>2017-06-28 15:57:51 -0400
committerChromium commit bot <commit-bot@chromium.org>2017-06-28 20:12:34 +0000
commit297f161a02d79cef88f55906722534bee2da730b (patch)
tree41299229003dceb2d06b6acbb84fc68770604788 /core/fxcrt/cfx_widestring_unittest.cpp
parent9ba8fbc02e86a6b7cb5c4142d9481ae3238c1ec4 (diff)
downloadpdfium-297f161a02d79cef88f55906722534bee2da730b.tar.xz
Add << overload for CFX_StringCTemplate classeschromium/3144
BUG=pdfium:790 Change-Id: I4a3623dc0daac6ff8407c09cd00e9f2e4e5dd2d7 Reviewed-on: https://pdfium-review.googlesource.com/7051 Commit-Queue: Ryan Harrison <rharrison@chromium.org> Reviewed-by: Tom Sepez <tsepez@chromium.org>
Diffstat (limited to 'core/fxcrt/cfx_widestring_unittest.cpp')
-rw-r--r--core/fxcrt/cfx_widestring_unittest.cpp156
1 files changed, 156 insertions, 0 deletions
diff --git a/core/fxcrt/cfx_widestring_unittest.cpp b/core/fxcrt/cfx_widestring_unittest.cpp
index 2578cb6429..4cd71d9997 100644
--- a/core/fxcrt/cfx_widestring_unittest.cpp
+++ b/core/fxcrt/cfx_widestring_unittest.cpp
@@ -1210,3 +1210,159 @@ TEST(fxcrt, WideOStreamWideStringOverload) {
stream << str1 << str2;
EXPECT_EQ(L"abcdef", stream.str());
}
+
+TEST(fxcrt, OStreamWideStringCOverload) {
+ // Basic case, empty string
+ {
+ std::ostringstream stream;
+ CFX_WideStringC str;
+ stream << str;
+ EXPECT_EQ("", stream.str());
+ }
+
+ // Basic case, non-empty string
+ {
+ std::ostringstream stream;
+ CFX_WideStringC str(L"def");
+ stream << "abc" << str << "ghi";
+ EXPECT_EQ("abcdefghi", stream.str());
+ }
+
+ // Basic case, wide character
+ {
+ std::ostringstream stream;
+ CFX_WideStringC str(L"\u20AC");
+ stream << str;
+ EXPECT_EQ("\u20AC", stream.str());
+ }
+
+ // Changing the CFX_WideStringC does not change the stream it was written to.
+ {
+ std::ostringstream stream;
+ CFX_WideStringC str(L"abc");
+ stream << str;
+ str = L"123";
+ EXPECT_EQ("abc", stream.str());
+ }
+
+ // Writing it again to the stream will use the latest value.
+ {
+ std::ostringstream stream;
+ CFX_WideStringC str(L"abc");
+ stream << str;
+ stream.str("");
+ str = L"123";
+ stream << str;
+ EXPECT_EQ("123", stream.str());
+ }
+
+ // Writing a CFX_WideStringC with nulls and no specified length treats it as
+ // a C-style null-terminated string.
+ {
+ wchar_t stringWithNulls[]{'x', 'y', '\0', 'z'};
+ std::ostringstream stream;
+ CFX_WideStringC str(stringWithNulls);
+ EXPECT_EQ(2, str.GetLength());
+ stream << str;
+ EXPECT_EQ(2u, stream.tellp());
+ str = L"";
+ }
+
+ // Writing a CFX_WideStringC with nulls but specifying its length treats it as
+ // a C++-style string.
+ {
+ wchar_t stringWithNulls[]{'x', 'y', '\0', 'z'};
+ std::ostringstream stream;
+ CFX_WideStringC str(stringWithNulls, 4);
+ EXPECT_EQ(4, str.GetLength());
+ stream << str;
+ EXPECT_EQ(4u, stream.tellp());
+ str = L"";
+ }
+
+ // << operators can be chained.
+ {
+ std::ostringstream stream;
+ CFX_WideStringC str1(L"abc");
+ CFX_WideStringC str2(L"def");
+ stream << str1 << str2;
+ EXPECT_EQ("abcdef", stream.str());
+ }
+}
+
+TEST(fxcrt, WideOStreamWideStringCOverload) {
+ // Basic case, empty string
+ {
+ std::wostringstream stream;
+ CFX_WideStringC str;
+ stream << str;
+ EXPECT_EQ(L"", stream.str());
+ }
+
+ // Basic case, non-empty string
+ {
+ std::wostringstream stream;
+ CFX_WideStringC str(L"def");
+ stream << "abc" << str << "ghi";
+ EXPECT_EQ(L"abcdefghi", stream.str());
+ }
+
+ // Basic case, wide character
+ {
+ std::wostringstream stream;
+ CFX_WideStringC str(L"\u20AC");
+ stream << str;
+ EXPECT_EQ(L"\u20AC", stream.str());
+ }
+
+ // Changing the CFX_WideStringC does not change the stream it was written to.
+ {
+ std::wostringstream stream;
+ CFX_WideStringC str(L"abc");
+ stream << str;
+ str = L"123";
+ EXPECT_EQ(L"abc", stream.str());
+ }
+
+ // Writing it again to the stream will use the latest value.
+ {
+ std::wostringstream stream;
+ CFX_WideStringC str(L"abc");
+ stream << str;
+ stream.str(L"");
+ str = L"123";
+ stream << str;
+ EXPECT_EQ(L"123", stream.str());
+ }
+
+ // Writing a CFX_WideStringC with nulls and no specified length treats it as
+ // a C-style null-terminated string.
+ {
+ wchar_t stringWithNulls[]{'x', 'y', '\0', 'z'};
+ std::wostringstream stream;
+ CFX_WideStringC str(stringWithNulls);
+ EXPECT_EQ(2, str.GetLength());
+ stream << str;
+ EXPECT_EQ(2u, stream.tellp());
+ }
+
+ // Writing a CFX_WideStringC with nulls but specifying its length treats it as
+ // a C++-style string.
+ {
+ wchar_t stringWithNulls[]{'x', 'y', '\0', 'z'};
+ std::wostringstream stream;
+ CFX_WideStringC str(stringWithNulls, 4);
+ EXPECT_EQ(4, str.GetLength());
+ stream << str;
+ EXPECT_EQ(4u, stream.tellp());
+ }
+
+ // << operators can be chained.
+ {
+ std::wostringstream stream;
+ CFX_WideStringC str1(L"abc");
+ CFX_WideStringC str2(L"def");
+ stream << str1 << str2;
+ EXPECT_EQ(L"abcdef", stream.str());
+ }
+}