Chromium Code Reviews| Index: core/src/fxcrt/fx_bidi_unittest.cpp |
| diff --git a/core/src/fxcrt/fx_bidi_unittest.cpp b/core/src/fxcrt/fx_bidi_unittest.cpp |
| index 8b5b6df108cd629784362f26b0b1ba03587ded92..422ad0cff5c01cd19f90f393753d08984b1cfa5e 100644 |
| --- a/core/src/fxcrt/fx_bidi_unittest.cpp |
| +++ b/core/src/fxcrt/fx_bidi_unittest.cpp |
| @@ -14,123 +14,340 @@ const FX_WCHAR kRightChar = 1424; |
| } // namespace |
| TEST(fxcrt, BidiCharEmpty) { |
| - int32_t start = -1; |
| - int32_t count = -1; |
| CFX_BidiChar bidi; |
| - CFX_BidiChar::Direction dir = bidi.GetBidiInfo(nullptr, nullptr); |
| - EXPECT_EQ(CFX_BidiChar::NEUTRAL, dir); |
| - |
| - dir = bidi.GetBidiInfo(&start, nullptr); |
| - EXPECT_EQ(CFX_BidiChar::NEUTRAL, dir); |
| - EXPECT_EQ(0, start); |
| - |
| - dir = bidi.GetBidiInfo(nullptr, &count); |
| - EXPECT_EQ(CFX_BidiChar::NEUTRAL, dir); |
| - EXPECT_EQ(0, count); |
| - |
| - start = -1; |
| - count = -1; |
| - dir = bidi.GetBidiInfo(&start, &count); |
| - EXPECT_EQ(CFX_BidiChar::NEUTRAL, dir); |
| - EXPECT_EQ(0, start); |
| - EXPECT_EQ(0, count); |
| + CFX_BidiChar::Segment info; |
| + info = bidi.GetSegmentInfo(); |
| + EXPECT_EQ(CFX_BidiChar::NEUTRAL, info.direction); |
| + EXPECT_EQ(0, info.start); |
| + EXPECT_EQ(0, info.count); |
| EXPECT_FALSE(bidi.EndChar()); |
| } |
| TEST(fxcrt, BidiCharLeft) { |
| - int32_t start = -1; |
| - int32_t count = -1; |
| CFX_BidiChar bidi; |
| + CFX_BidiChar::Segment info; |
| EXPECT_TRUE(bidi.AppendChar(kLeftChar)); |
| - CFX_BidiChar::Direction dir = bidi.GetBidiInfo(&start, &count); |
| - EXPECT_EQ(0, start); |
| - EXPECT_EQ(0, count); |
| + info = bidi.GetSegmentInfo(); |
| + EXPECT_EQ(0, info.start); |
| + EXPECT_EQ(0, info.count); |
| EXPECT_FALSE(bidi.AppendChar(kLeftChar)); |
| EXPECT_FALSE(bidi.AppendChar(kLeftChar)); |
| - dir = bidi.GetBidiInfo(&start, &count); |
| - EXPECT_EQ(CFX_BidiChar::NEUTRAL, dir); |
| - EXPECT_EQ(0, start); |
| - EXPECT_EQ(0, count); |
| + info = bidi.GetSegmentInfo(); |
| + EXPECT_EQ(CFX_BidiChar::NEUTRAL, info.direction); |
| + EXPECT_EQ(0, info.start); |
| + EXPECT_EQ(0, info.count); |
| EXPECT_TRUE(bidi.EndChar()); |
| - dir = bidi.GetBidiInfo(&start, &count); |
| - EXPECT_EQ(CFX_BidiChar::LEFT, dir); |
| - EXPECT_EQ(0, start); |
| - EXPECT_EQ(3, count); |
| + info = bidi.GetSegmentInfo(); |
| + EXPECT_EQ(CFX_BidiChar::LEFT, info.direction); |
| + EXPECT_EQ(0, info.start); |
| + EXPECT_EQ(3, info.count); |
| EXPECT_FALSE(bidi.EndChar()); |
| } |
| TEST(fxcrt, BidiCharLeftNeutralRight) { |
| - int32_t start = -1; |
| - int32_t count = -1; |
| CFX_BidiChar bidi; |
| + CFX_BidiChar::Segment info; |
| EXPECT_TRUE(bidi.AppendChar(kLeftChar)); |
| - CFX_BidiChar::Direction dir = bidi.GetBidiInfo(&start, &count); |
| - EXPECT_EQ(0, start); |
| - EXPECT_EQ(0, count); |
| + info = bidi.GetSegmentInfo(); |
| + EXPECT_EQ(0, info.start); |
| + EXPECT_EQ(0, info.count); |
| EXPECT_FALSE(bidi.AppendChar(kLeftChar)); |
| EXPECT_FALSE(bidi.AppendChar(kLeftChar)); |
| EXPECT_TRUE(bidi.AppendChar(kNeutralChar)); |
| - dir = bidi.GetBidiInfo(&start, &count); |
| - EXPECT_EQ(0, start); |
| - EXPECT_EQ(3, count); |
| + info = bidi.GetSegmentInfo(); |
| + EXPECT_EQ(0, info.start); |
| + EXPECT_EQ(3, info.count); |
| EXPECT_FALSE(bidi.AppendChar(kNeutralChar)); |
| EXPECT_FALSE(bidi.AppendChar(kNeutralChar)); |
| EXPECT_FALSE(bidi.AppendChar(kNeutralChar)); |
| EXPECT_TRUE(bidi.AppendChar(kRightChar)); |
| - dir = bidi.GetBidiInfo(&start, &count); |
| - EXPECT_EQ(CFX_BidiChar::NEUTRAL, dir); |
| - EXPECT_EQ(3, start); |
| - EXPECT_EQ(4, count); |
| + info = bidi.GetSegmentInfo(); |
| + EXPECT_EQ(CFX_BidiChar::NEUTRAL, info.direction); |
| + EXPECT_EQ(3, info.start); |
| + EXPECT_EQ(4, info.count); |
| EXPECT_TRUE(bidi.EndChar()); |
| - dir = bidi.GetBidiInfo(&start, &count); |
| - EXPECT_EQ(CFX_BidiChar::RIGHT, dir); |
| - EXPECT_EQ(7, start); |
| - EXPECT_EQ(1, count); |
| + info = bidi.GetSegmentInfo(); |
| + EXPECT_EQ(CFX_BidiChar::RIGHT, info.direction); |
| + EXPECT_EQ(7, info.start); |
| + EXPECT_EQ(1, info.count); |
| EXPECT_FALSE(bidi.EndChar()); |
| } |
| TEST(fxcrt, BidiCharLeftRightLeft) { |
| - int32_t start = -1; |
| - int32_t count = -1; |
| CFX_BidiChar bidi; |
| + CFX_BidiChar::Segment info; |
| EXPECT_TRUE(bidi.AppendChar(kLeftChar)); |
| - CFX_BidiChar::Direction dir = bidi.GetBidiInfo(&start, &count); |
| - EXPECT_EQ(0, start); |
| - EXPECT_EQ(0, count); |
| + info = bidi.GetSegmentInfo(); |
| + EXPECT_EQ(0, info.start); |
| + EXPECT_EQ(0, info.count); |
| EXPECT_FALSE(bidi.AppendChar(kLeftChar)); |
| EXPECT_FALSE(bidi.AppendChar(kLeftChar)); |
| EXPECT_TRUE(bidi.AppendChar(kRightChar)); |
| - dir = bidi.GetBidiInfo(&start, &count); |
| - EXPECT_EQ(0, start); |
| - EXPECT_EQ(3, count); |
| + info = bidi.GetSegmentInfo(); |
| + EXPECT_EQ(0, info.start); |
| + EXPECT_EQ(3, info.count); |
| EXPECT_FALSE(bidi.AppendChar(kRightChar)); |
| EXPECT_FALSE(bidi.AppendChar(kRightChar)); |
| EXPECT_FALSE(bidi.AppendChar(kRightChar)); |
| EXPECT_TRUE(bidi.AppendChar(kLeftChar)); |
| - dir = bidi.GetBidiInfo(&start, &count); |
| - EXPECT_EQ(CFX_BidiChar::RIGHT, dir); |
| - EXPECT_EQ(3, start); |
| - EXPECT_EQ(4, count); |
| + info = bidi.GetSegmentInfo(); |
| + EXPECT_EQ(CFX_BidiChar::RIGHT, info.direction); |
| + EXPECT_EQ(3, info.start); |
| + EXPECT_EQ(4, info.count); |
| EXPECT_TRUE(bidi.EndChar()); |
| - dir = bidi.GetBidiInfo(&start, &count); |
| - EXPECT_EQ(CFX_BidiChar::LEFT, dir); |
| - EXPECT_EQ(7, start); |
| - EXPECT_EQ(1, count); |
| + info = bidi.GetSegmentInfo(); |
| + EXPECT_EQ(CFX_BidiChar::LEFT, info.direction); |
| + EXPECT_EQ(7, info.start); |
| + EXPECT_EQ(1, info.count); |
| EXPECT_FALSE(bidi.EndChar()); |
| } |
| + |
| +TEST(fxcrt, BidiStringEmpty) { |
| + CFX_BidiString bidi(L""); |
| + EXPECT_EQ(CFX_BidiChar::LEFT, bidi.OverallDirection()); |
| + EXPECT_TRUE(bidi.begin() == bidi.end()); |
| +} |
| + |
| +TEST(fxcrt, BidiStringAllNeutral) { |
| + { |
| + const FX_WCHAR str[] = {kNeutralChar, 0}; |
| + CFX_BidiString bidi(str); |
| + EXPECT_EQ(CFX_BidiChar::LEFT, bidi.OverallDirection()); |
| + |
| + auto it = bidi.begin(); |
| + EXPECT_FALSE(it == bidi.end()); |
|
Lei Zhang
2016/02/12 00:46:43
ASSERT_FALSE, ditto below.
Tom Sepez
2016/02/12 17:54:33
Done, presumably to avoid derefin'g invalid iters,
|
| + EXPECT_EQ(0, it->start); |
| + EXPECT_EQ(1, it->count); |
| + EXPECT_EQ(CFX_BidiChar::NEUTRAL, it->direction); |
| + ++it; |
| + EXPECT_TRUE(it == bidi.end()); |
| + } |
| + { |
| + const FX_WCHAR str[] = {kNeutralChar, kNeutralChar, kNeutralChar, 0}; |
| + CFX_BidiString bidi(str); |
| + EXPECT_EQ(CFX_BidiChar::LEFT, bidi.OverallDirection()); |
| + |
| + auto it = bidi.begin(); |
| + EXPECT_FALSE(it == bidi.end()); |
| + EXPECT_EQ(0, it->start); |
| + EXPECT_EQ(3, it->count); |
| + EXPECT_EQ(CFX_BidiChar::NEUTRAL, it->direction); |
| + ++it; |
| + EXPECT_TRUE(it == bidi.end()); |
| + } |
| +} |
| + |
| +TEST(fxcrt, BidiStringAllLeft) { |
| + { |
| + const FX_WCHAR str[] = {kLeftChar, 0}; |
| + CFX_BidiString bidi(str); |
| + EXPECT_EQ(CFX_BidiChar::LEFT, bidi.OverallDirection()); |
| + |
| + auto it = bidi.begin(); |
| + EXPECT_FALSE(it == bidi.end()); |
| + EXPECT_EQ(0, it->start); |
| + EXPECT_EQ(0, it->count); |
| + EXPECT_EQ(CFX_BidiChar::NEUTRAL, it->direction); |
| + EXPECT_FALSE(it == bidi.end()); |
| + |
| + ++it; |
| + EXPECT_EQ(0, it->start); |
| + EXPECT_EQ(1, it->count); |
| + EXPECT_EQ(CFX_BidiChar::LEFT, it->direction); |
| + EXPECT_FALSE(it == bidi.end()); |
| + |
| + ++it; |
| + EXPECT_TRUE(it == bidi.end()); |
| + } |
| + { |
| + const FX_WCHAR str[] = {kLeftChar, kLeftChar, kLeftChar, 0}; |
| + CFX_BidiString bidi(str); |
| + EXPECT_EQ(CFX_BidiChar::LEFT, bidi.OverallDirection()); |
| + |
| + auto it = bidi.begin(); |
| + EXPECT_FALSE(it == bidi.end()); |
| + EXPECT_EQ(0, it->start); |
| + EXPECT_EQ(0, it->count); |
| + EXPECT_EQ(CFX_BidiChar::NEUTRAL, it->direction); |
| + EXPECT_FALSE(it == bidi.end()); |
| + |
| + ++it; |
| + EXPECT_EQ(0, it->start); |
| + EXPECT_EQ(3, it->count); |
| + EXPECT_EQ(CFX_BidiChar::LEFT, it->direction); |
| + EXPECT_FALSE(it == bidi.end()); |
| + |
| + ++it; |
| + EXPECT_TRUE(it == bidi.end()); |
| + } |
| +} |
| + |
| +TEST(fxcrt, BidiStringAllRight) { |
| + { |
| + const FX_WCHAR str[] = {kRightChar, 0}; |
| + CFX_BidiString bidi(str); |
| + EXPECT_EQ(CFX_BidiChar::RIGHT, bidi.OverallDirection()); |
| + |
| + auto it = bidi.begin(); |
| + EXPECT_EQ(0, it->start); |
| + EXPECT_EQ(1, it->count); |
| + EXPECT_EQ(CFX_BidiChar::RIGHT, it->direction); |
| + EXPECT_FALSE(it == bidi.end()); |
| + |
| + ++it; |
| + EXPECT_FALSE(it == bidi.end()); |
| + EXPECT_EQ(0, it->start); |
| + EXPECT_EQ(0, it->count); |
| + EXPECT_EQ(CFX_BidiChar::NEUTRAL, it->direction); |
| + EXPECT_FALSE(it == bidi.end()); |
| + |
| + ++it; |
| + EXPECT_TRUE(it == bidi.end()); |
| + } |
| + { |
| + const FX_WCHAR str[] = {kRightChar, kRightChar, kRightChar, 0}; |
| + CFX_BidiString bidi(str); |
| + EXPECT_EQ(CFX_BidiChar::RIGHT, bidi.OverallDirection()); |
| + |
| + auto it = bidi.begin(); |
| + EXPECT_EQ(0, it->start); |
| + EXPECT_EQ(3, it->count); |
| + EXPECT_EQ(CFX_BidiChar::RIGHT, it->direction); |
| + EXPECT_FALSE(it == bidi.end()); |
| + |
| + ++it; |
| + EXPECT_FALSE(it == bidi.end()); |
| + EXPECT_EQ(0, it->start); |
| + EXPECT_EQ(0, it->count); |
| + EXPECT_EQ(CFX_BidiChar::NEUTRAL, it->direction); |
| + EXPECT_FALSE(it == bidi.end()); |
| + |
| + ++it; |
| + EXPECT_TRUE(it == bidi.end()); |
| + } |
| +} |
| + |
| +TEST(fxcrt, BidiStringLeftNeutralLeftRight) { |
| + const FX_WCHAR str[] = {kLeftChar, kNeutralChar, kLeftChar, kRightChar, 0}; |
| + CFX_BidiString bidi(str); |
| + EXPECT_EQ(CFX_BidiChar::LEFT, bidi.OverallDirection()); |
| + |
| + auto it = bidi.begin(); |
| + EXPECT_FALSE(it == bidi.end()); |
| + EXPECT_EQ(0, it->start); |
| + EXPECT_EQ(0, it->count); |
| + EXPECT_EQ(CFX_BidiChar::NEUTRAL, it->direction); |
| + EXPECT_FALSE(it == bidi.end()); |
| + |
| + ++it; |
| + EXPECT_EQ(0, it->start); |
| + EXPECT_EQ(1, it->count); |
| + EXPECT_EQ(CFX_BidiChar::LEFT, it->direction); |
| + EXPECT_FALSE(it == bidi.end()); |
| + |
| + ++it; |
| + EXPECT_EQ(1, it->start); |
| + EXPECT_EQ(1, it->count); |
| + EXPECT_EQ(CFX_BidiChar::NEUTRAL, it->direction); |
| + EXPECT_FALSE(it == bidi.end()); |
| + |
| + ++it; |
| + EXPECT_EQ(2, it->start); |
| + EXPECT_EQ(1, it->count); |
| + EXPECT_EQ(CFX_BidiChar::LEFT, it->direction); |
| + EXPECT_FALSE(it == bidi.end()); |
| + |
| + ++it; |
| + EXPECT_EQ(3, it->start); |
| + EXPECT_EQ(1, it->count); |
| + EXPECT_EQ(CFX_BidiChar::RIGHT, it->direction); |
| + EXPECT_FALSE(it == bidi.end()); |
| + |
| + ++it; |
| + EXPECT_TRUE(it == bidi.end()); |
| +} |
| + |
| +TEST(fxcrt, BidiStringRightNeutralLeftRight) { |
| + const FX_WCHAR str[] = {kRightChar, kNeutralChar, kLeftChar, kRightChar, 0}; |
| + CFX_BidiString bidi(str); |
| + EXPECT_EQ(CFX_BidiChar::RIGHT, bidi.OverallDirection()); |
| + |
| + auto it = bidi.begin(); |
| + EXPECT_EQ(3, it->start); |
| + EXPECT_EQ(1, it->count); |
| + EXPECT_EQ(CFX_BidiChar::RIGHT, it->direction); |
| + EXPECT_FALSE(it == bidi.end()); |
| + |
| + ++it; |
| + EXPECT_EQ(2, it->start); |
| + EXPECT_EQ(1, it->count); |
| + EXPECT_EQ(CFX_BidiChar::LEFT, it->direction); |
| + EXPECT_FALSE(it == bidi.end()); |
| + |
| + ++it; |
| + EXPECT_EQ(1, it->start); |
| + EXPECT_EQ(1, it->count); |
| + EXPECT_EQ(CFX_BidiChar::NEUTRAL, it->direction); |
| + EXPECT_FALSE(it == bidi.end()); |
| + |
| + ++it; |
| + EXPECT_EQ(0, it->start); |
| + EXPECT_EQ(1, it->count); |
| + EXPECT_EQ(CFX_BidiChar::RIGHT, it->direction); |
| + EXPECT_FALSE(it == bidi.end()); |
| + |
| + ++it; |
| + EXPECT_FALSE(it == bidi.end()); |
| + EXPECT_EQ(0, it->start); |
| + EXPECT_EQ(0, it->count); |
| + EXPECT_EQ(CFX_BidiChar::NEUTRAL, it->direction); |
| + EXPECT_FALSE(it == bidi.end()); |
| + |
| + ++it; |
| + EXPECT_TRUE(it == bidi.end()); |
| +} |
| + |
| +TEST(fxcrt, BidiStringReverse) { |
| + const FX_WCHAR str[] = {kLeftChar, kRightChar, 0}; |
| + CFX_BidiString bidi(str); |
| + EXPECT_EQ(CFX_BidiChar::RIGHT, bidi.OverallDirection()); |
| + bidi.SetOverallDirection(CFX_BidiChar::LEFT); |
| + |
| + auto it = bidi.begin(); |
| + EXPECT_FALSE(it == bidi.end()); |
| + EXPECT_EQ(0, it->start); |
| + EXPECT_EQ(0, it->count); |
| + EXPECT_EQ(CFX_BidiChar::NEUTRAL, it->direction); |
| + EXPECT_FALSE(it == bidi.end()); |
| + |
| + ++it; |
| + EXPECT_EQ(0, it->start); |
| + EXPECT_EQ(1, it->count); |
| + EXPECT_EQ(CFX_BidiChar::LEFT, it->direction); |
| + EXPECT_FALSE(it == bidi.end()); |
| + |
| + ++it; |
| + EXPECT_EQ(1, it->start); |
| + EXPECT_EQ(1, it->count); |
| + EXPECT_EQ(CFX_BidiChar::RIGHT, it->direction); |
| + EXPECT_FALSE(it == bidi.end()); |
| + |
| + ++it; |
| + EXPECT_TRUE(it == bidi.end()); |
| +} |