Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(806)

Unified Diff: core/src/fxcrt/fx_bidi_unittest.cpp

Issue 1682983002: Make fx_bidi sane. (Closed) Base URL: https://pdfium.googlesource.com/pdfium.git@master
Patch Set: Stray class decl. Created 4 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« core/src/fxcrt/fx_bidi.cpp ('K') | « core/src/fxcrt/fx_bidi.cpp ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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());
+}
« core/src/fxcrt/fx_bidi.cpp ('K') | « core/src/fxcrt/fx_bidi.cpp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698