| // Copyright 2015 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 "core/include/fxcrt/fx_bidi.h" |
| #include "testing/gtest/include/gtest/gtest.h" |
| |
| namespace { |
| |
| const FX_WCHAR kNeutralChar = 32; |
| const FX_WCHAR kLeftChar = 65; |
| 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); |
| |
| EXPECT_FALSE(bidi.EndChar()); |
| } |
| |
| TEST(fxcrt, BidiCharLeft) { |
| int32_t start = -1; |
| int32_t count = -1; |
| CFX_BidiChar bidi; |
| |
| EXPECT_TRUE(bidi.AppendChar(kLeftChar)); |
| CFX_BidiChar::Direction dir = bidi.GetBidiInfo(&start, &count); |
| EXPECT_EQ(0, start); |
| EXPECT_EQ(0, 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); |
| |
| EXPECT_TRUE(bidi.EndChar()); |
| dir = bidi.GetBidiInfo(&start, &count); |
| EXPECT_EQ(CFX_BidiChar::LEFT, dir); |
| EXPECT_EQ(0, start); |
| EXPECT_EQ(3, count); |
| |
| EXPECT_FALSE(bidi.EndChar()); |
| } |
| |
| TEST(fxcrt, BidiCharLeftNeutralRight) { |
| int32_t start = -1; |
| int32_t count = -1; |
| CFX_BidiChar bidi; |
| |
| EXPECT_TRUE(bidi.AppendChar(kLeftChar)); |
| CFX_BidiChar::Direction dir = bidi.GetBidiInfo(&start, &count); |
| EXPECT_EQ(0, start); |
| EXPECT_EQ(0, 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); |
| |
| 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); |
| |
| EXPECT_TRUE(bidi.EndChar()); |
| dir = bidi.GetBidiInfo(&start, &count); |
| EXPECT_EQ(CFX_BidiChar::RIGHT, dir); |
| EXPECT_EQ(7, start); |
| EXPECT_EQ(1, count); |
| |
| EXPECT_FALSE(bidi.EndChar()); |
| } |
| |
| TEST(fxcrt, BidiCharLeftRightLeft) { |
| int32_t start = -1; |
| int32_t count = -1; |
| CFX_BidiChar bidi; |
| |
| EXPECT_TRUE(bidi.AppendChar(kLeftChar)); |
| CFX_BidiChar::Direction dir = bidi.GetBidiInfo(&start, &count); |
| EXPECT_EQ(0, start); |
| EXPECT_EQ(0, 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); |
| |
| 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); |
| |
| EXPECT_TRUE(bidi.EndChar()); |
| dir = bidi.GetBidiInfo(&start, &count); |
| EXPECT_EQ(CFX_BidiChar::LEFT, dir); |
| EXPECT_EQ(7, start); |
| EXPECT_EQ(1, count); |
| |
| EXPECT_FALSE(bidi.EndChar()); |
| } |