blob: 6683fefcf963d49f488e17071bb3dcfba910328d [file] [log] [blame]
// Copyright 2017 The Chromium 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 "platform/text/WritingModeUtils.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace blink {
namespace {
enum { kTop, kRight, kBottom, kLeft };
void CheckLegacyLogicalDirections(PhysicalToLogical<int> converter) {
EXPECT_EQ(converter.InlineStart(), converter.Start());
EXPECT_EQ(converter.InlineEnd(), converter.End());
EXPECT_EQ(converter.BlockStart(), converter.Before());
EXPECT_EQ(converter.BlockEnd(), converter.After());
}
TEST(WritingModeUtilsTest, PhysicalToLogicalHorizontalLtr) {
PhysicalToLogical<int> converter(WritingMode::kHorizontalTb,
TextDirection::kLtr, kTop, kRight, kBottom,
kLeft);
EXPECT_EQ(kLeft, converter.InlineStart());
EXPECT_EQ(kRight, converter.InlineEnd());
EXPECT_EQ(kTop, converter.BlockStart());
EXPECT_EQ(kBottom, converter.BlockEnd());
EXPECT_EQ(kLeft, converter.LineLeft());
EXPECT_EQ(kRight, converter.LineRight());
EXPECT_EQ(kTop, converter.Over());
EXPECT_EQ(kBottom, converter.Under());
CheckLegacyLogicalDirections(converter);
}
TEST(WritingModeUtilsTest, PhysicalToLogicalHorizontalRtl) {
PhysicalToLogical<int> converter(WritingMode::kHorizontalTb,
TextDirection::kRtl, kTop, kRight, kBottom,
kLeft);
EXPECT_EQ(kRight, converter.InlineStart());
EXPECT_EQ(kLeft, converter.InlineEnd());
EXPECT_EQ(kTop, converter.BlockStart());
EXPECT_EQ(kBottom, converter.BlockEnd());
EXPECT_EQ(kLeft, converter.LineLeft());
EXPECT_EQ(kRight, converter.LineRight());
EXPECT_EQ(kTop, converter.Over());
EXPECT_EQ(kBottom, converter.Under());
CheckLegacyLogicalDirections(converter);
}
TEST(WritingModeUtilsTest, PhysicalToLogicalVlrLtr) {
PhysicalToLogical<int> converter(WritingMode::kVerticalLr,
TextDirection::kLtr, kTop, kRight, kBottom,
kLeft);
EXPECT_EQ(kTop, converter.InlineStart());
EXPECT_EQ(kBottom, converter.InlineEnd());
EXPECT_EQ(kLeft, converter.BlockStart());
EXPECT_EQ(kRight, converter.BlockEnd());
EXPECT_EQ(kTop, converter.LineLeft());
EXPECT_EQ(kBottom, converter.LineRight());
EXPECT_EQ(kRight, converter.Over());
EXPECT_EQ(kLeft, converter.Under());
CheckLegacyLogicalDirections(converter);
}
TEST(WritingModeUtilsTest, PhysicalToLogicalVlrRtl) {
PhysicalToLogical<int> converter(WritingMode::kVerticalLr,
TextDirection::kRtl, kTop, kRight, kBottom,
kLeft);
EXPECT_EQ(kBottom, converter.InlineStart());
EXPECT_EQ(kTop, converter.InlineEnd());
EXPECT_EQ(kLeft, converter.BlockStart());
EXPECT_EQ(kRight, converter.BlockEnd());
EXPECT_EQ(kTop, converter.LineLeft());
EXPECT_EQ(kBottom, converter.LineRight());
EXPECT_EQ(kRight, converter.Over());
EXPECT_EQ(kLeft, converter.Under());
CheckLegacyLogicalDirections(converter);
}
TEST(WritingModeUtilsTest, PhysicalToLogicalVrlLtr) {
PhysicalToLogical<int> converter(WritingMode::kVerticalRl,
TextDirection::kLtr, kTop, kRight, kBottom,
kLeft);
EXPECT_EQ(kTop, converter.InlineStart());
EXPECT_EQ(kBottom, converter.InlineEnd());
EXPECT_EQ(kRight, converter.BlockStart());
EXPECT_EQ(kLeft, converter.BlockEnd());
EXPECT_EQ(kTop, converter.LineLeft());
EXPECT_EQ(kBottom, converter.LineRight());
EXPECT_EQ(kRight, converter.Over());
EXPECT_EQ(kLeft, converter.Under());
CheckLegacyLogicalDirections(converter);
}
TEST(WritingModeUtilsTest, PhysicalToLogicalVrlRtl) {
PhysicalToLogical<int> converter(WritingMode::kVerticalRl,
TextDirection::kRtl, kTop, kRight, kBottom,
kLeft);
EXPECT_EQ(kBottom, converter.InlineStart());
EXPECT_EQ(kTop, converter.InlineEnd());
EXPECT_EQ(kRight, converter.BlockStart());
EXPECT_EQ(kLeft, converter.BlockEnd());
EXPECT_EQ(kTop, converter.LineLeft());
EXPECT_EQ(kBottom, converter.LineRight());
EXPECT_EQ(kRight, converter.Over());
EXPECT_EQ(kLeft, converter.Under());
CheckLegacyLogicalDirections(converter);
}
enum { kInlineStart, kInlineEnd, kBlockStart, kBlockEnd };
TEST(WritingModeUtilsTest, LogicalToPhysicalHorizontalLtr) {
LogicalToPhysical<int> converter(WritingMode::kHorizontalTb,
TextDirection::kLtr, kInlineStart,
kInlineEnd, kBlockStart, kBlockEnd);
EXPECT_EQ(kInlineStart, converter.Left());
EXPECT_EQ(kInlineEnd, converter.Right());
EXPECT_EQ(kBlockStart, converter.Top());
EXPECT_EQ(kBlockEnd, converter.Bottom());
}
TEST(WritingModeUtilsTest, LogicalToPhysicalHorizontalRtl) {
LogicalToPhysical<int> converter(WritingMode::kHorizontalTb,
TextDirection::kRtl, kInlineStart,
kInlineEnd, kBlockStart, kBlockEnd);
EXPECT_EQ(kInlineEnd, converter.Left());
EXPECT_EQ(kInlineStart, converter.Right());
EXPECT_EQ(kBlockStart, converter.Top());
EXPECT_EQ(kBlockEnd, converter.Bottom());
}
TEST(WritingModeUtilsTest, LogicalToPhysicalVlrLtr) {
LogicalToPhysical<int> converter(WritingMode::kVerticalLr,
TextDirection::kLtr, kInlineStart,
kInlineEnd, kBlockStart, kBlockEnd);
EXPECT_EQ(kBlockStart, converter.Left());
EXPECT_EQ(kBlockEnd, converter.Right());
EXPECT_EQ(kInlineStart, converter.Top());
EXPECT_EQ(kInlineEnd, converter.Bottom());
}
TEST(WritingModeUtilsTest, LogicalToPhysicalVlrRtl) {
LogicalToPhysical<int> converter(WritingMode::kVerticalLr,
TextDirection::kRtl, kInlineStart,
kInlineEnd, kBlockStart, kBlockEnd);
EXPECT_EQ(kBlockStart, converter.Left());
EXPECT_EQ(kBlockEnd, converter.Right());
EXPECT_EQ(kInlineEnd, converter.Top());
EXPECT_EQ(kInlineStart, converter.Bottom());
}
TEST(WritingModeUtilsTest, LogicalToPhysicalVrlLtr) {
LogicalToPhysical<int> converter(WritingMode::kVerticalRl,
TextDirection::kLtr, kInlineStart,
kInlineEnd, kBlockStart, kBlockEnd);
EXPECT_EQ(kBlockEnd, converter.Left());
EXPECT_EQ(kBlockStart, converter.Right());
EXPECT_EQ(kInlineStart, converter.Top());
EXPECT_EQ(kInlineEnd, converter.Bottom());
}
TEST(WritingModeUtilsTest, LogicalToPhysicalVrlRtl) {
LogicalToPhysical<int> converter(WritingMode::kVerticalRl,
TextDirection::kRtl, kInlineStart,
kInlineEnd, kBlockStart, kBlockEnd);
EXPECT_EQ(kBlockEnd, converter.Left());
EXPECT_EQ(kBlockStart, converter.Right());
EXPECT_EQ(kInlineEnd, converter.Top());
EXPECT_EQ(kInlineStart, converter.Bottom());
}
} // namespace
} // namespace blink