diff options
-rw-r--r-- | core/include/fxcrt/fx_string.h | 5 | ||||
-rw-r--r-- | core/src/fxcrt/fx_basic_wstring_unittest.cpp | 97 |
2 files changed, 73 insertions, 29 deletions
diff --git a/core/include/fxcrt/fx_string.h b/core/include/fxcrt/fx_string.h index 4db83e3914..dd8752ef28 100644 --- a/core/include/fxcrt/fx_string.h +++ b/core/include/fxcrt/fx_string.h @@ -654,6 +654,11 @@ public: const CFX_WideString& operator += (const CFX_WideStringC& str); + bool operator< (const CFX_WideString& str) const { + int result = wmemcmp(c_str(), str.c_str(), std::min(GetLength(), str.GetLength())); + return result < 0 || (result == 0 && GetLength() < str.GetLength()); + } + FX_WCHAR GetAt(FX_STRSIZE nIndex) const { return m_pData ? m_pData->m_String[nIndex] : 0; diff --git a/core/src/fxcrt/fx_basic_wstring_unittest.cpp b/core/src/fxcrt/fx_basic_wstring_unittest.cpp index c6e5c2f3d0..9575dfd786 100644 --- a/core/src/fxcrt/fx_basic_wstring_unittest.cpp +++ b/core/src/fxcrt/fx_basic_wstring_unittest.cpp @@ -1,29 +1,68 @@ -// 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 "testing/gtest/include/gtest/gtest.h"
-#include "../../../testing/fx_string_testhelpers.h"
-#include "../../include/fxcrt/fx_basic.h"
-
-#define ByteStringLiteral(str) CFX_ByteString(FX_BSTRC(str))
-
-TEST(fxcrt, WideStringUTF16LE_Encode) {
- struct UTF16LEEncodeCase {
- CFX_WideString ws;
- CFX_ByteString bs;
- } utf16le_encode_cases[] = {
- { L"", ByteStringLiteral("\0\0") },
- { L"abc", ByteStringLiteral("a\0b\0c\0\0\0") },
- { L"abcdef", ByteStringLiteral("a\0b\0c\0d\0e\0f\0\0\0") },
- { L"abc\0def", ByteStringLiteral("a\0b\0c\0\0\0") },
- { L"\xaabb\xccdd", ByteStringLiteral("\xbb\xaa\xdd\xcc\0\0") },
- { L"\x3132\x6162", ByteStringLiteral("\x32\x31\x62\x61\0\0") },
- };
-
- for (size_t i = 0; i < FX_ArraySize(utf16le_encode_cases); ++i) {
- EXPECT_EQ(utf16le_encode_cases[i].bs,
- utf16le_encode_cases[i].ws.UTF16LE_Encode())
- << " for case number " << i;
- }
-}
+// 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 "testing/gtest/include/gtest/gtest.h" +#include "../../../testing/fx_string_testhelpers.h" +#include "../../include/fxcrt/fx_basic.h" + +TEST(fxcrt, WideStringOperatorSubscript) { + // CFX_WideString includes the NUL terminator for non-empty strings. + CFX_WideString abc(L"abc"); + EXPECT_EQ(L'a', abc[0]); + EXPECT_EQ(L'b', abc[1]); + EXPECT_EQ(L'c', abc[2]); + EXPECT_EQ(L'\0', abc[3]); +} + +TEST(fxcrt, WideStringOperatorLT) { + CFX_WideString empty; + CFX_WideString a(L"a"); + CFX_WideString abc(L"\x0110qq"); // Comes before despite endianness. + CFX_WideString def(L"\x1001qq"); // Comes after despite endianness. + + EXPECT_FALSE(empty < empty); + EXPECT_FALSE(a < a); + EXPECT_FALSE(abc < abc); + EXPECT_FALSE(def < def); + + EXPECT_TRUE(empty < a); + EXPECT_FALSE(a < empty); + + EXPECT_TRUE(empty < abc); + EXPECT_FALSE(abc < empty); + + EXPECT_TRUE(empty < def); + EXPECT_FALSE(def < empty); + + EXPECT_TRUE(a < abc); + EXPECT_FALSE(abc < a); + + EXPECT_TRUE(a < def); + EXPECT_FALSE(def < a); + + EXPECT_TRUE(abc < def); + EXPECT_FALSE(def < abc); +} + +#define ByteStringLiteral(str) CFX_ByteString(FX_BSTRC(str)) + +TEST(fxcrt, WideStringUTF16LE_Encode) { + struct UTF16LEEncodeCase { + CFX_WideString ws; + CFX_ByteString bs; + } utf16le_encode_cases[] = { + { L"", ByteStringLiteral("\0\0") }, + { L"abc", ByteStringLiteral("a\0b\0c\0\0\0") }, + { L"abcdef", ByteStringLiteral("a\0b\0c\0d\0e\0f\0\0\0") }, + { L"abc\0def", ByteStringLiteral("a\0b\0c\0\0\0") }, + { L"\xaabb\xccdd", ByteStringLiteral("\xbb\xaa\xdd\xcc\0\0") }, + { L"\x3132\x6162", ByteStringLiteral("\x32\x31\x62\x61\0\0") }, + }; + + for (size_t i = 0; i < FX_ArraySize(utf16le_encode_cases); ++i) { + EXPECT_EQ(utf16le_encode_cases[i].bs, + utf16le_encode_cases[i].ws.UTF16LE_Encode()) + << " for case number " << i; + } +} |