| Index: third_party/WebKit/Source/core/editing/state_machines/ForwardGraphemeBoundaryStateMachineTest.cpp
|
| diff --git a/third_party/WebKit/Source/core/editing/state_machines/ForwardGraphemeBoundaryStateMachineTest.cpp b/third_party/WebKit/Source/core/editing/state_machines/ForwardGraphemeBoundaryStateMachineTest.cpp
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..76b22aefbd70ed61420eae95a09c90c5813256bb
|
| --- /dev/null
|
| +++ b/third_party/WebKit/Source/core/editing/state_machines/ForwardGraphemeBoundaryStateMachineTest.cpp
|
| @@ -0,0 +1,2428 @@
|
| +// Copyright 2016 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 "core/editing/state_machines/ForwardGraphemeBoundaryStateMachine.h"
|
| +
|
| +#include "testing/gtest/include/gtest/gtest.h"
|
| +
|
| +namespace blink {
|
| +
|
| +namespace {
|
| +const TextSegmentationMachineState kNeedMoreCodeUnit
|
| + = TextSegmentationMachineState::NeedMoreCodeUnit;
|
| +const TextSegmentationMachineState kFinished
|
| + = TextSegmentationMachineState::Finished;
|
| +const TextSegmentationMachineState kNeedFollowingCodeUnit
|
| + = TextSegmentationMachineState::NeedFollowingCodeUnit;
|
| +
|
| +// U+1F1FA (REGIONAL INDICATOR SYMBOL LETTER U) is \uD83C\uDDFA in UTF16.
|
| +const UChar kRisULead = 0xD83C;
|
| +const UChar kRisUTrail = 0xDDFA;
|
| +
|
| +// U+1F1F8 (REGIONAL INDICATOR SYMBOL LETTER S) is \uD83C\uDDF8 in UTF16.
|
| +const UChar kRisSLead = 0xD83C;
|
| +const UChar kRisSTrail = 0xDDF8;
|
| +
|
| +// U+1F466 (BOY) is \uD83D\uDC66 in UTF16.
|
| +const UChar kBoyLead = 0xD83D;
|
| +const UChar kBoyTrail = 0xDC66;
|
| +
|
| +// U+E0100 (VARIATION SELECTOR 17) is \uD840\uDD00 in UTF16.
|
| +const UChar kVS17Lead = 0xDB40;
|
| +const UChar kVS17Trail = 0xDD00;
|
| +
|
| +// U+FE0F is VARIATION SELECTOR 16.
|
| +const UChar kVS16 = 0xFE0F;
|
| +
|
| +// U+231A is WATCH.
|
| +const UChar kWatch = 0x231A;
|
| +
|
| +// U+1F441 (EYE) is \uD83D\uDC41 in UTF16.
|
| +const UChar kEyeLead = 0xD83D;
|
| +const UChar kEyeTrail = 0xDC41;
|
| +
|
| +// U+3402 can be a base of U+E0100 (VARIATION SELECTOR 17).
|
| +const UChar kHan = 0x3402;
|
| +
|
| +// U+2000B is \uD840\uDC0B in UTF16.
|
| +// U+2000B can be a base of U+E0100 (VARIATION SELECTOR 17).
|
| +const UChar kHanLead = 0xD840;
|
| +const UChar kHanTrail = 0xDC0B;
|
| +} // namespace
|
| +
|
| +// Notations:
|
| +// | indicates inidicates initial offset position.
|
| +// SOT indicates start of text.
|
| +// EOT indicates end of text.
|
| +// [Lead] indicates broken lonely lead surrogate.
|
| +// [Trail] indicates broken lonely trail surrogate.
|
| +// [U] indicates regional indicator symbol U.
|
| +// [S] indicates regional indicator symbol S.
|
| +
|
| +TEST(ForwardGraphemeBoundaryStatemachineTest, DoNothingCase)
|
| +{
|
| + ForwardGraphemeBoundaryStateMachine machine;
|
| +
|
| + EXPECT_EQ(0, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(0, machine.finalizeAndGetBoundaryOffset());
|
| +}
|
| +
|
| +TEST(ForwardGraphemeBoundaryStatemachineTest, BrokenSurrogatePair)
|
| +{
|
| + ForwardGraphemeBoundaryStateMachine machine;
|
| +
|
| + // U+1F5FA(WORLD MAP) is \uD83D\uDDFA in UTF-16.
|
| + const UChar lead = 0xD83D;
|
| + const UChar trail = 0xDDFA;
|
| +
|
| + // 'a' + | + [Trail]
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.feedPrecedingCodeUnit('a'));
|
| + EXPECT_EQ(kFinished, machine.feedFollowingCodeUnit(trail));
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // 'a' + | + [Lead] + 'a'
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.feedPrecedingCodeUnit('a'));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(lead));
|
| + EXPECT_EQ(kFinished, machine.feedFollowingCodeUnit('a'));
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // 'a' + | + [Lead] + [Lead]
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.feedPrecedingCodeUnit('a'));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(lead));
|
| + EXPECT_EQ(kFinished, machine.feedFollowingCodeUnit(lead));
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // 'a' + | + [Lead] + EOT
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.feedPrecedingCodeUnit('a'));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(lead));
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // SOT + | + [Trail]
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.tellEndOfPrecedingText());
|
| + EXPECT_EQ(kFinished, machine.feedFollowingCodeUnit(trail));
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // SOT + | + [Lead] + 'a'
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.tellEndOfPrecedingText());
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(lead));
|
| + EXPECT_EQ(kFinished, machine.feedFollowingCodeUnit('a'));
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // SOT + | + [Lead] + [Lead]
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.tellEndOfPrecedingText());
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(lead));
|
| + EXPECT_EQ(kFinished, machine.feedFollowingCodeUnit(lead));
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // SOT + | + [Lead] + EOT
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.tellEndOfPrecedingText());
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(lead));
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // U+1F466 + | + [Trail]
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kBoyTrail));
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.feedPrecedingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(kFinished, machine.feedFollowingCodeUnit(trail));
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // U+1F466 + | + [Lead] + 'a'
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kBoyTrail));
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.feedPrecedingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(lead));
|
| + EXPECT_EQ(kFinished, machine.feedFollowingCodeUnit('a'));
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // U+1F466 + | + [Lead] + [Lead]
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kBoyTrail));
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.feedPrecedingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(lead));
|
| + EXPECT_EQ(kFinished, machine.feedFollowingCodeUnit(lead));
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // U+1F466 + | + [Lead] + EOT
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kBoyTrail));
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.feedPrecedingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(lead));
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // [Lead] + | + [Trail]
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.feedPrecedingCodeUnit(lead));
|
| + EXPECT_EQ(kFinished, machine.feedFollowingCodeUnit(trail));
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // [Lead] + | + [Lead] + 'a'
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.feedPrecedingCodeUnit(lead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(lead));
|
| + EXPECT_EQ(kFinished, machine.feedFollowingCodeUnit('a'));
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // [Lead] + | + [Lead] + [Lead]
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.feedPrecedingCodeUnit(lead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(lead));
|
| + EXPECT_EQ(kFinished, machine.feedFollowingCodeUnit(lead));
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // [Lead] + | + [Lead] + EOT
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.feedPrecedingCodeUnit(lead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(lead));
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // 'a' + [Trail] + | + [Trail]
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(trail));
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.feedPrecedingCodeUnit('a'));
|
| + EXPECT_EQ(kFinished, machine.feedFollowingCodeUnit(trail));
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // 'a' + [Trail] + | + [Lead] + 'a'
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(trail));
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.feedPrecedingCodeUnit('a'));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(lead));
|
| + EXPECT_EQ(kFinished, machine.feedFollowingCodeUnit('a'));
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // 'a' + [Trail] + | + [Lead] + [Lead]
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(trail));
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.feedPrecedingCodeUnit('a'));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(lead));
|
| + EXPECT_EQ(kFinished, machine.feedFollowingCodeUnit(lead));
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // 'a' + [Trail] + | + [Lead] + EOT
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(trail));
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.feedPrecedingCodeUnit('a'));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(lead));
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // [Trail] + [Trail] + | + [Trail]
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(trail));
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.feedPrecedingCodeUnit(trail));
|
| + EXPECT_EQ(kFinished, machine.feedFollowingCodeUnit(trail));
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // [Trail] + [Trail] + | + [Lead] + 'a'
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(trail));
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.feedPrecedingCodeUnit(trail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(lead));
|
| + EXPECT_EQ(kFinished, machine.feedFollowingCodeUnit('a'));
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // [Trail] + [Trail] + | + [Lead] + [Lead]
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(trail));
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.feedPrecedingCodeUnit(trail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(lead));
|
| + EXPECT_EQ(kFinished, machine.feedFollowingCodeUnit(lead));
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // [Trail] + [Trail] + | + [Lead] + EOT
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(trail));
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.feedPrecedingCodeUnit(trail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(lead));
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // SOT + [Trail] + | + [Trail]
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(trail));
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.tellEndOfPrecedingText());
|
| + EXPECT_EQ(kFinished, machine.feedFollowingCodeUnit(trail));
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // SOT + [Trail] + | + [Lead] + 'a'
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(trail));
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.tellEndOfPrecedingText());
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(lead));
|
| + EXPECT_EQ(kFinished, machine.feedFollowingCodeUnit('a'));
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // SOT + [Trail] + | + [Lead] + [Lead]
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(trail));
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.tellEndOfPrecedingText());
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(lead));
|
| + EXPECT_EQ(kFinished, machine.feedFollowingCodeUnit(lead));
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // SOT + [Trail] + | + [Lead] + EOT
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(trail));
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.tellEndOfPrecedingText());
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(lead));
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| +}
|
| +
|
| +TEST(ForwardGraphemeBoundaryStatemachineTest,
|
| + BrokenSurrogatePair_WithPrecedingRIS)
|
| +{
|
| + ForwardGraphemeBoundaryStateMachine machine;
|
| +
|
| + // U+1F5FA(WORLD MAP) is \uD83D\uDDFA in UTF-16.
|
| + const UChar lead = 0xD83D;
|
| + const UChar trail = 0xDDFA;
|
| +
|
| + // 'a' + [U] + | + [Trail]
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisUTrail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisULead));
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.feedPrecedingCodeUnit('a'));
|
| + EXPECT_EQ(kFinished, machine.feedFollowingCodeUnit(trail));
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // 'a' + [U] + | + [Lead] + 'a'
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisUTrail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisULead));
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.feedPrecedingCodeUnit('a'));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(lead));
|
| + EXPECT_EQ(kFinished, machine.feedFollowingCodeUnit('a'));
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // 'a' + [U] + | + [Lead] + [Lead]
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisUTrail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisULead));
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.feedPrecedingCodeUnit('a'));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(lead));
|
| + EXPECT_EQ(kFinished, machine.feedFollowingCodeUnit(lead));
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // 'a' + [U] + | + [Lead] + EOT
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisUTrail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisULead));
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.feedPrecedingCodeUnit('a'));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(lead));
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // SOT + [U] + | + [Trail]
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisUTrail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisULead));
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.tellEndOfPrecedingText());
|
| + EXPECT_EQ(kFinished, machine.feedFollowingCodeUnit(trail));
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // SOT + [U] + | + [Lead] + 'a'
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisUTrail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisULead));
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.tellEndOfPrecedingText());
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(lead));
|
| + EXPECT_EQ(kFinished, machine.feedFollowingCodeUnit('a'));
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // SOT + [U] + | + [Lead] + [Lead]
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisUTrail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisULead));
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.tellEndOfPrecedingText());
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(lead));
|
| + EXPECT_EQ(kFinished, machine.feedFollowingCodeUnit(lead));
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // SOT + [U] + | + [Lead] + EOT
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisUTrail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisULead));
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.tellEndOfPrecedingText());
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(lead));
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // [Lead] + [U] + | + [Trail]
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisUTrail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisULead));
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.feedPrecedingCodeUnit(lead));
|
| + EXPECT_EQ(kFinished, machine.feedFollowingCodeUnit(trail));
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // [Lead] + [U] + | + [Lead] + 'a'
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisUTrail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisULead));
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.feedPrecedingCodeUnit(lead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(lead));
|
| + EXPECT_EQ(kFinished, machine.feedFollowingCodeUnit('a'));
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // [Lead] + [U] + | + [Lead] + [Lead]
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisUTrail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisULead));
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.feedPrecedingCodeUnit(lead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(lead));
|
| + EXPECT_EQ(kFinished, machine.feedFollowingCodeUnit(lead));
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // [Lead] + [U] + | + [Lead] + EOT
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisUTrail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisULead));
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.feedPrecedingCodeUnit(lead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(lead));
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // 'a' + [Trail] + [U] + | + [Trail]
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisUTrail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisULead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(trail));
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.feedPrecedingCodeUnit('a'));
|
| + EXPECT_EQ(kFinished, machine.feedFollowingCodeUnit(trail));
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // 'a' + [Trail] + [U] + | + [Lead] + 'a'
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisUTrail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisULead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(trail));
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.feedPrecedingCodeUnit('a'));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(lead));
|
| + EXPECT_EQ(kFinished, machine.feedFollowingCodeUnit('a'));
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // 'a' + [Trail] + [U] + | + [Lead] + [Lead]
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisUTrail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisULead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(trail));
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.feedPrecedingCodeUnit('a'));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(lead));
|
| + EXPECT_EQ(kFinished, machine.feedFollowingCodeUnit(lead));
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // 'a' + [Trail] + [U] + | + [Lead] + EOT
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisUTrail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisULead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(trail));
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.feedPrecedingCodeUnit('a'));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(lead));
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // [Trail] + [Trail] + [U] + | + [Trail]
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisUTrail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisULead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(trail));
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.feedPrecedingCodeUnit(trail));
|
| + EXPECT_EQ(kFinished, machine.feedFollowingCodeUnit(trail));
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // [Trail] + [Trail] + [U] + | + [Lead] + 'a'
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisUTrail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisULead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(trail));
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.feedPrecedingCodeUnit(trail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(lead));
|
| + EXPECT_EQ(kFinished, machine.feedFollowingCodeUnit('a'));
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // [Trail] + [Trail] + [U] + | + [Lead] + [Lead]
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisUTrail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisULead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(trail));
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.feedPrecedingCodeUnit(trail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(lead));
|
| + EXPECT_EQ(kFinished, machine.feedFollowingCodeUnit(lead));
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // [Trail] + [Trail] + [U] + | + [Lead] + EOT
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisUTrail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisULead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(trail));
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.feedPrecedingCodeUnit(trail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(lead));
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // SOT + [Trail] + [U] + | + [Trail]
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisUTrail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisULead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(trail));
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.tellEndOfPrecedingText());
|
| + EXPECT_EQ(kFinished, machine.feedFollowingCodeUnit(trail));
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // SOT + [Trail] + [U] + | + [Lead] + 'a'
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisUTrail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisULead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(trail));
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.tellEndOfPrecedingText());
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(lead));
|
| + EXPECT_EQ(kFinished, machine.feedFollowingCodeUnit('a'));
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // SOT + [Trail] + [U] + | + [Lead] + [Lead]
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisUTrail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisULead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(trail));
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.tellEndOfPrecedingText());
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(lead));
|
| + EXPECT_EQ(kFinished, machine.feedFollowingCodeUnit(lead));
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // SOT + [Trail] + [U] + | + [Lead] + EOT
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisUTrail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisULead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(trail));
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.tellEndOfPrecedingText());
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(lead));
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| +}
|
| +
|
| +TEST(ForwardGraphemeBoundaryStatemachineTest, BreakImmediately)
|
| +{
|
| + ForwardGraphemeBoundaryStateMachine machine;
|
| +
|
| + // SOT + | + 'a' + 'a'
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.tellEndOfPrecedingText());
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit('a'));
|
| + EXPECT_EQ(kFinished, machine.feedFollowingCodeUnit('a'));
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // SOT + | + 'a' + EOT
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.tellEndOfPrecedingText());
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit('a'));
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // SOT + | + 'a' + U+1F466
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.tellEndOfPrecedingText());
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit('a'));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(kFinished, machine.feedFollowingCodeUnit(kBoyTrail));
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // SOT + | + U+1F466 + 'a'
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.tellEndOfPrecedingText());
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kBoyTrail));
|
| + EXPECT_EQ(kFinished, machine.feedFollowingCodeUnit('a'));
|
| + EXPECT_EQ(2, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(2, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // SOT + | + U+1F466 + EOT
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.tellEndOfPrecedingText());
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kBoyTrail));
|
| + EXPECT_EQ(2, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(2, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // SOT + | + U+1F466 + U+1F466
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.tellEndOfPrecedingText());
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kBoyTrail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(kFinished, machine.feedFollowingCodeUnit(kBoyTrail));
|
| + EXPECT_EQ(2, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(2, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // SOT + | + 'a' + [Trail]
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.tellEndOfPrecedingText());
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit('a'));
|
| + EXPECT_EQ(kFinished, machine.feedFollowingCodeUnit(kBoyTrail));
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // SOT + | + 'a' + [Lead] + 'a'
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.tellEndOfPrecedingText());
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit('a'));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(kFinished, machine.feedFollowingCodeUnit('a'));
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // SOT + | + 'a' + [Lead] + [Lead]
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.tellEndOfPrecedingText());
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit('a'));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(kFinished, machine.feedFollowingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // SOT + | + 'a' + [Lead] + EOT
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.tellEndOfPrecedingText());
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit('a'));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // SOT + | + U+1F466 + [Trail]
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.tellEndOfPrecedingText());
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kBoyTrail));
|
| + EXPECT_EQ(kFinished, machine.feedFollowingCodeUnit(kBoyTrail));
|
| + EXPECT_EQ(2, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(2, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // SOT + | + U+1F466 + [Lead] + 'a'
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.tellEndOfPrecedingText());
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kBoyTrail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(kFinished, machine.feedFollowingCodeUnit('a'));
|
| + EXPECT_EQ(2, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(2, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // SOT + | + U+1F466 + [Lead] + [Lead]
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.tellEndOfPrecedingText());
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kBoyTrail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(kFinished, machine.feedFollowingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(2, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(2, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // SOT + | + U+1F466 + [Lead] + EOT
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.tellEndOfPrecedingText());
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kBoyTrail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(2, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(2, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // 'a' + | + 'a' + 'a'
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.feedPrecedingCodeUnit('a'));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit('a'));
|
| + EXPECT_EQ(kFinished, machine.feedFollowingCodeUnit('a'));
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // 'a' + | + 'a' + EOT
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.feedPrecedingCodeUnit('a'));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit('a'));
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // 'a' + | + 'a' + U+1F466
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.feedPrecedingCodeUnit('a'));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit('a'));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(kFinished, machine.feedFollowingCodeUnit(kBoyTrail));
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // 'a' + | + U+1F466 + 'a'
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.feedPrecedingCodeUnit('a'));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kBoyTrail));
|
| + EXPECT_EQ(kFinished, machine.feedFollowingCodeUnit('a'));
|
| + EXPECT_EQ(2, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(2, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // 'a' + | + U+1F466 + EOT
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.feedPrecedingCodeUnit('a'));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kBoyTrail));
|
| + EXPECT_EQ(2, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(2, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // 'a' + | + U+1F466 + U+1F466
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.feedPrecedingCodeUnit('a'));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kBoyTrail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(kFinished, machine.feedFollowingCodeUnit(kBoyTrail));
|
| + EXPECT_EQ(2, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(2, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // 'a' + | + 'a' + [Trail]
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.feedPrecedingCodeUnit('a'));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit('a'));
|
| + EXPECT_EQ(kFinished, machine.feedFollowingCodeUnit(kBoyTrail));
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // 'a' + | + 'a' + [Lead] + 'a'
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.feedPrecedingCodeUnit('a'));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit('a'));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(kFinished, machine.feedFollowingCodeUnit('a'));
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // 'a' + | + 'a' + [Lead] + [Lead]
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.feedPrecedingCodeUnit('a'));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit('a'));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(kFinished, machine.feedFollowingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // 'a' + | + 'a' + [Lead] + EOT
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.feedPrecedingCodeUnit('a'));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit('a'));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // 'a' + | + U+1F466 + [Trail]
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.feedPrecedingCodeUnit('a'));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kBoyTrail));
|
| + EXPECT_EQ(kFinished, machine.feedFollowingCodeUnit(kBoyTrail));
|
| + EXPECT_EQ(2, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(2, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // 'a' + | + U+1F466 + [Lead] + 'a'
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.feedPrecedingCodeUnit('a'));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kBoyTrail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(kFinished, machine.feedFollowingCodeUnit('a'));
|
| + EXPECT_EQ(2, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(2, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // 'a' + | + U+1F466 + [Lead] + [Lead]
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.feedPrecedingCodeUnit('a'));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kBoyTrail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(kFinished, machine.feedFollowingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(2, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(2, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // 'a' + | + U+1F466 + [Lead] + EOT
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.feedPrecedingCodeUnit('a'));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kBoyTrail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(2, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(2, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // U+1F466 + | + 'a' + 'a'
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kBoyTrail));
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.feedPrecedingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit('a'));
|
| + EXPECT_EQ(kFinished, machine.feedFollowingCodeUnit('a'));
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // U+1F466 + | + 'a' + EOT
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kBoyTrail));
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.feedPrecedingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit('a'));
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // U+1F466 + | + 'a' + U+1F466
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kBoyTrail));
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.feedPrecedingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit('a'));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(kFinished, machine.feedFollowingCodeUnit(kBoyTrail));
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // U+1F466 + | + U+1F466 + 'a'
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kBoyTrail));
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.feedPrecedingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kBoyTrail));
|
| + EXPECT_EQ(kFinished, machine.feedFollowingCodeUnit('a'));
|
| + EXPECT_EQ(2, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(2, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // U+1F466 + | + U+1F466 + EOT
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kBoyTrail));
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.feedPrecedingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kBoyTrail));
|
| + EXPECT_EQ(2, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(2, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // U+1F466 + | + U+1F466 + U+1F466
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kBoyTrail));
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.feedPrecedingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kBoyTrail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(kFinished, machine.feedFollowingCodeUnit(kBoyTrail));
|
| + EXPECT_EQ(2, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(2, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // U+1F466 + | + 'a' + [Trail]
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kBoyTrail));
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.feedPrecedingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit('a'));
|
| + EXPECT_EQ(kFinished, machine.feedFollowingCodeUnit(kBoyTrail));
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // U+1F466 + | + 'a' + [Lead] + 'a'
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kBoyTrail));
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.feedPrecedingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit('a'));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(kFinished, machine.feedFollowingCodeUnit('a'));
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // U+1F466 + | + 'a' + [Lead] + [Lead]
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kBoyTrail));
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.feedPrecedingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit('a'));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(kFinished, machine.feedFollowingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // U+1F466 + | + 'a' + [Lead] + EOT
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kBoyTrail));
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.feedPrecedingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit('a'));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // U+1F466 + | + U+1F466 + [Trail]
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kBoyTrail));
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.feedPrecedingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kBoyTrail));
|
| + EXPECT_EQ(kFinished, machine.feedFollowingCodeUnit(kBoyTrail));
|
| + EXPECT_EQ(2, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(2, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // U+1F466 + | + U+1F466 + [Lead] + 'a'
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kBoyTrail));
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.feedPrecedingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kBoyTrail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(kFinished, machine.feedFollowingCodeUnit('a'));
|
| + EXPECT_EQ(2, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(2, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // U+1F466 + | + U+1F466 + [Lead] + [Lead]
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kBoyTrail));
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.feedPrecedingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kBoyTrail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(kFinished, machine.feedFollowingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(2, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(2, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // U+1F466 + | + U+1F466 + [Lead] + EOT
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kBoyTrail));
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.feedPrecedingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kBoyTrail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(2, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(2, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // TODO(nona): Nice to add broken surrogate preceding surrogate case.
|
| +}
|
| +
|
| +TEST(ForwardGraphemeBoundaryStatemachineTest, BreakImmediately_withPrecedingRIS)
|
| +{
|
| + ForwardGraphemeBoundaryStateMachine machine;
|
| +
|
| + // SOT + [U] + | + 'a' + 'a'
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisUTrail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisULead));
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.tellEndOfPrecedingText());
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit('a'));
|
| + EXPECT_EQ(kFinished, machine.feedFollowingCodeUnit('a'));
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // SOT + [U] + | + 'a' + EOT
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisUTrail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisULead));
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.tellEndOfPrecedingText());
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit('a'));
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // SOT + [U] + | + 'a' + U+1F466
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisUTrail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisULead));
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.tellEndOfPrecedingText());
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit('a'));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(kFinished, machine.feedFollowingCodeUnit(kBoyTrail));
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // SOT + [U] + | + U+1F466 + 'a'
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisUTrail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisULead));
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.tellEndOfPrecedingText());
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kBoyTrail));
|
| + EXPECT_EQ(kFinished, machine.feedFollowingCodeUnit('a'));
|
| + EXPECT_EQ(2, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(2, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // SOT + [U] + | + U+1F466 + EOT
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisUTrail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisULead));
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.tellEndOfPrecedingText());
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kBoyTrail));
|
| + EXPECT_EQ(2, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(2, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // SOT + [U] + | + U+1F466 + U+1F466
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisUTrail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisULead));
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.tellEndOfPrecedingText());
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kBoyTrail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(kFinished, machine.feedFollowingCodeUnit(kBoyTrail));
|
| + EXPECT_EQ(2, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(2, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // SOT + [U] + | + 'a' + [Trail]
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisUTrail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisULead));
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.tellEndOfPrecedingText());
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit('a'));
|
| + EXPECT_EQ(kFinished, machine.feedFollowingCodeUnit(kBoyTrail));
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // SOT + [U] + | + 'a' + [Lead] + 'a'
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisUTrail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisULead));
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.tellEndOfPrecedingText());
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit('a'));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(kFinished, machine.feedFollowingCodeUnit('a'));
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // SOT + [U] + | + 'a' + [Lead] + [Lead]
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisUTrail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisULead));
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.tellEndOfPrecedingText());
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit('a'));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(kFinished, machine.feedFollowingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // SOT + [U] + | + 'a' + [Lead] + EOT
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisUTrail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisULead));
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.tellEndOfPrecedingText());
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit('a'));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // SOT + [U] + | + U+1F466 + [Trail]
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisUTrail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisULead));
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.tellEndOfPrecedingText());
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kBoyTrail));
|
| + EXPECT_EQ(kFinished, machine.feedFollowingCodeUnit(kBoyTrail));
|
| + EXPECT_EQ(2, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(2, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // SOT + [U] + | + U+1F466 + [Lead] + 'a'
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisUTrail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisULead));
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.tellEndOfPrecedingText());
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kBoyTrail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(kFinished, machine.feedFollowingCodeUnit('a'));
|
| + EXPECT_EQ(2, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(2, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // SOT + [U] + | + U+1F466 + [Lead] + [Lead]
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisUTrail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisULead));
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.tellEndOfPrecedingText());
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kBoyTrail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(kFinished, machine.feedFollowingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(2, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(2, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // SOT + [U] + | + U+1F466 + [Lead] + EOT
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisUTrail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisULead));
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.tellEndOfPrecedingText());
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kBoyTrail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(2, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(2, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // 'a' + [U] + | + 'a' + 'a'
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisUTrail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisULead));
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.feedPrecedingCodeUnit('a'));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit('a'));
|
| + EXPECT_EQ(kFinished, machine.feedFollowingCodeUnit('a'));
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // 'a' + [U] + | + 'a' + EOT
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisUTrail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisULead));
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.feedPrecedingCodeUnit('a'));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit('a'));
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // 'a' + [U] + | + 'a' + U+1F466
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisUTrail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisULead));
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.feedPrecedingCodeUnit('a'));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit('a'));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(kFinished, machine.feedFollowingCodeUnit(kBoyTrail));
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // 'a' + [U] + | + U+1F466 + 'a'
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisUTrail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisULead));
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.feedPrecedingCodeUnit('a'));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kBoyTrail));
|
| + EXPECT_EQ(kFinished, machine.feedFollowingCodeUnit('a'));
|
| + EXPECT_EQ(2, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(2, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // 'a' + [U] + | + U+1F466 + EOT
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisUTrail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisULead));
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.feedPrecedingCodeUnit('a'));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kBoyTrail));
|
| + EXPECT_EQ(2, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(2, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // 'a' + [U] + | + U+1F466 + U+1F466
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisUTrail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisULead));
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.feedPrecedingCodeUnit('a'));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kBoyTrail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(kFinished, machine.feedFollowingCodeUnit(kBoyTrail));
|
| + EXPECT_EQ(2, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(2, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // 'a' + [U] + | + 'a' + [Trail]
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisUTrail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisULead));
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.feedPrecedingCodeUnit('a'));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit('a'));
|
| + EXPECT_EQ(kFinished, machine.feedFollowingCodeUnit(kBoyTrail));
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // 'a' + [U] + | + 'a' + [Lead] + 'a'
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisUTrail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisULead));
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.feedPrecedingCodeUnit('a'));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit('a'));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(kFinished, machine.feedFollowingCodeUnit('a'));
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // 'a' + [U] + | + 'a' + [Lead] + [Lead]
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisUTrail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisULead));
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.feedPrecedingCodeUnit('a'));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit('a'));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(kFinished, machine.feedFollowingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // 'a' + [U] + | + 'a' + [Lead] + EOT
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisUTrail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisULead));
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.feedPrecedingCodeUnit('a'));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit('a'));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // 'a' + [U] + | + U+1F466 + [Trail]
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisUTrail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisULead));
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.feedPrecedingCodeUnit('a'));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kBoyTrail));
|
| + EXPECT_EQ(kFinished, machine.feedFollowingCodeUnit(kBoyTrail));
|
| + EXPECT_EQ(2, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(2, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // 'a' + [U] + | + U+1F466 + [Lead] + 'a'
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisUTrail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisULead));
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.feedPrecedingCodeUnit('a'));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kBoyTrail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(kFinished, machine.feedFollowingCodeUnit('a'));
|
| + EXPECT_EQ(2, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(2, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // 'a' + [U] + | + U+1F466 + [Lead] + [Lead]
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisUTrail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisULead));
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.feedPrecedingCodeUnit('a'));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kBoyTrail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(kFinished, machine.feedFollowingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(2, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(2, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // 'a' + [U] + | + U+1F466 + [Lead] + EOT
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisUTrail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisULead));
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.feedPrecedingCodeUnit('a'));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kBoyTrail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(2, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(2, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // U+1F466 + [U] + | + 'a' + 'a'
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisUTrail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisULead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kBoyTrail));
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.feedPrecedingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit('a'));
|
| + EXPECT_EQ(kFinished, machine.feedFollowingCodeUnit('a'));
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // U+1F466 + [U] + | + 'a' + EOT
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisUTrail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisULead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kBoyTrail));
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.feedPrecedingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit('a'));
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // U+1F466 + [U] + | + 'a' + U+1F466
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisUTrail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisULead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kBoyTrail));
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.feedPrecedingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit('a'));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(kFinished, machine.feedFollowingCodeUnit(kBoyTrail));
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // U+1F466 + [U] + | + U+1F466 + 'a'
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisUTrail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisULead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kBoyTrail));
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.feedPrecedingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kBoyTrail));
|
| + EXPECT_EQ(kFinished, machine.feedFollowingCodeUnit('a'));
|
| + EXPECT_EQ(2, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(2, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // U+1F466 + [U] + | + U+1F466 + EOT
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisUTrail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisULead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kBoyTrail));
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.feedPrecedingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kBoyTrail));
|
| + EXPECT_EQ(2, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(2, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // U+1F466 + [U] + | + U+1F466 + U+1F466
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisUTrail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisULead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kBoyTrail));
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.feedPrecedingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kBoyTrail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(kFinished, machine.feedFollowingCodeUnit(kBoyTrail));
|
| + EXPECT_EQ(2, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(2, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // U+1F466 + [U] + | + 'a' + [Trail]
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisUTrail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisULead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kBoyTrail));
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.feedPrecedingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit('a'));
|
| + EXPECT_EQ(kFinished, machine.feedFollowingCodeUnit(kBoyTrail));
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // U+1F466 + [U] + | + 'a' + [Lead] + 'a'
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisUTrail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisULead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kBoyTrail));
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.feedPrecedingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit('a'));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(kFinished, machine.feedFollowingCodeUnit('a'));
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // U+1F466 + [U] + | + 'a' + [Lead] + [Lead]
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisUTrail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisULead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kBoyTrail));
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.feedPrecedingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit('a'));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(kFinished, machine.feedFollowingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // U+1F466 + [U] + | + 'a' + [Lead] + EOT
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisUTrail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisULead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kBoyTrail));
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.feedPrecedingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit('a'));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(1, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // U+1F466 + [U] + | + U+1F466 + [Trail]
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisUTrail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisULead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kBoyTrail));
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.feedPrecedingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kBoyTrail));
|
| + EXPECT_EQ(kFinished, machine.feedFollowingCodeUnit(kBoyTrail));
|
| + EXPECT_EQ(2, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(2, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // U+1F466 + [U] + | + U+1F466 + [Lead] + 'a'
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisUTrail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisULead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kBoyTrail));
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.feedPrecedingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kBoyTrail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(kFinished, machine.feedFollowingCodeUnit('a'));
|
| + EXPECT_EQ(2, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(2, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // U+1F466 + [U] + | + U+1F466 + [Lead] + [Lead]
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisUTrail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisULead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kBoyTrail));
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.feedPrecedingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kBoyTrail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(kFinished, machine.feedFollowingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(2, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(2, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // U+1F466 + [U] + | + U+1F466 + [Lead] + EOT
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisUTrail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisULead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kBoyTrail));
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.feedPrecedingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kBoyTrail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(2, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(2, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // TODO(nona): Nice to add preceding broken surrogate case.
|
| +}
|
| +
|
| +TEST(ForwardGraphemeBoundaryStatemachineTest, NotBreakImmediatelyAfter)
|
| +{
|
| + ForwardGraphemeBoundaryStateMachine machine;
|
| +
|
| + // SOT + | + U+231A + U+FE0F + 'a'
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.tellEndOfPrecedingText());
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kWatch));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kVS16));
|
| + EXPECT_EQ(kFinished, machine.feedFollowingCodeUnit('a'));
|
| + EXPECT_EQ(2, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(2, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // SOT + | + U+231A + U+FE0F + EOT
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.tellEndOfPrecedingText());
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kWatch));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kVS16));
|
| + EXPECT_EQ(2, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(2, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // SOT + | + U+231A + U+FE0F + [Trail]
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.tellEndOfPrecedingText());
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kWatch));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kVS16));
|
| + EXPECT_EQ(kFinished, machine.feedFollowingCodeUnit(kBoyTrail));
|
| + EXPECT_EQ(2, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(2, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // SOT + | + U+231A + U+FE0F + [Lead] + 'a'
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.tellEndOfPrecedingText());
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kWatch));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kVS16));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(kFinished, machine.feedFollowingCodeUnit('a'));
|
| + EXPECT_EQ(2, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(2, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // SOT + | + U+231A + U+FE0F + [Lead] + [Lead]
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.tellEndOfPrecedingText());
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kWatch));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kVS16));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(kFinished, machine.feedFollowingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(2, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(2, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // SOT + | + U+231A + U+FE0F + [Lead] + [EOT]
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.tellEndOfPrecedingText());
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kWatch));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kVS16));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(2, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(2, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // SOT + | + U+1F441 + U+FE0F + 'a'
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.tellEndOfPrecedingText());
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kEyeLead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kEyeTrail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kVS16));
|
| + EXPECT_EQ(kFinished, machine.feedFollowingCodeUnit('a'));
|
| + EXPECT_EQ(3, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(3, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // SOT + | + U+1F441 + U+FE0F + EOT
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.tellEndOfPrecedingText());
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kEyeLead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kEyeTrail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kVS16));
|
| + EXPECT_EQ(3, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(3, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // SOT + | + U+1F441 + U+FE0F + [Trail]
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.tellEndOfPrecedingText());
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kEyeLead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kEyeTrail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kVS16));
|
| + EXPECT_EQ(kFinished, machine.feedFollowingCodeUnit(kBoyTrail));
|
| + EXPECT_EQ(3, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(3, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // SOT + | + U+1F441 + U+FE0F + [Lead] + 'a'
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.tellEndOfPrecedingText());
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kEyeLead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kEyeTrail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kVS16));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(kFinished, machine.feedFollowingCodeUnit('a'));
|
| + EXPECT_EQ(3, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(3, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // SOT + | + U+1F441 + U+FE0F + [Lead] + [Lead]
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.tellEndOfPrecedingText());
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kEyeLead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kEyeTrail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kVS16));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(kFinished, machine.feedFollowingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(3, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(3, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // SOT + | + U+1F441 + U+FE0F + [Lead] + [EOT]
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.tellEndOfPrecedingText());
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kEyeLead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kEyeTrail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kVS16));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(3, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(3, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // SOT + | + U+3402 + U+E0100 + 'a'
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.tellEndOfPrecedingText());
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kHan));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kVS17Lead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kVS17Trail));
|
| + EXPECT_EQ(kFinished, machine.feedFollowingCodeUnit('a'));
|
| + EXPECT_EQ(3, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(3, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // SOT + | + U+3402 + U+E0100 + EOT
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.tellEndOfPrecedingText());
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kHan));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kVS17Lead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kVS17Trail));
|
| + EXPECT_EQ(3, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(3, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // SOT + | + U+3402 + U+E0100 + [Trail]
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.tellEndOfPrecedingText());
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kHan));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kVS17Lead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kVS17Trail));
|
| + EXPECT_EQ(kFinished, machine.feedFollowingCodeUnit(kBoyTrail));
|
| + EXPECT_EQ(3, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(3, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // SOT + | + U+3402 + U+E0100 + [Lead] + 'a'
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.tellEndOfPrecedingText());
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kHan));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kVS17Lead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kVS17Trail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(kFinished, machine.feedFollowingCodeUnit('a'));
|
| + EXPECT_EQ(3, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(3, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // SOT + | + U+3402 + U+E0100 + [Lead] + [Lead]
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.tellEndOfPrecedingText());
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kHan));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kVS17Lead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kVS17Trail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(kFinished, machine.feedFollowingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(3, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(3, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // SOT + | + U+3402 + U+E0100 + [Lead] + [EOT]
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.tellEndOfPrecedingText());
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kHan));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kVS17Lead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kVS17Trail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(3, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(3, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // SOT + | + U+2000B + U+E0100 + 'a'
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.tellEndOfPrecedingText());
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kHanLead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kHanTrail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kVS17Lead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kVS17Trail));
|
| + EXPECT_EQ(kFinished, machine.feedFollowingCodeUnit('a'));
|
| + EXPECT_EQ(4, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(4, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // SOT + | + U+2000B + U+E0100 + EOT
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.tellEndOfPrecedingText());
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kHanLead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kHanTrail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kVS17Lead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kVS17Trail));
|
| + EXPECT_EQ(4, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(4, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // SOT + | + U+2000B + U+E0100 + [Trail]
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.tellEndOfPrecedingText());
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kHanLead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kHanTrail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kVS17Lead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kVS17Trail));
|
| + EXPECT_EQ(kFinished, machine.feedFollowingCodeUnit(kBoyTrail));
|
| + EXPECT_EQ(4, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(4, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // SOT + | + U+2000B + U+E0100 + [Lead] + 'a'
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.tellEndOfPrecedingText());
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kHanLead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kHanTrail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kVS17Lead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kVS17Trail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(kFinished, machine.feedFollowingCodeUnit('a'));
|
| + EXPECT_EQ(4, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(4, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // SOT + | + U+2000B + U+E0100 + [Lead] + [Lead]
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.tellEndOfPrecedingText());
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kHanLead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kHanTrail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kVS17Lead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kVS17Trail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(kFinished, machine.feedFollowingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(4, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(4, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // SOT + | + U+2000B + U+E0100 + [Lead] + [EOT]
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.tellEndOfPrecedingText());
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kHanLead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kHanTrail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kVS17Lead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kVS17Trail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(4, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(4, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // 'a' + | + U+231A + U+FE0F + 'a'
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.feedPrecedingCodeUnit('a'));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kWatch));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kVS16));
|
| + EXPECT_EQ(kFinished, machine.feedFollowingCodeUnit('a'));
|
| + EXPECT_EQ(2, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(2, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // 'a' + | + U+231A + U+FE0F + EOT
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.feedPrecedingCodeUnit('a'));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kWatch));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kVS16));
|
| + EXPECT_EQ(2, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(2, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // 'a' + | + U+231A + U+FE0F + [Trail]
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.feedPrecedingCodeUnit('a'));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kWatch));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kVS16));
|
| + EXPECT_EQ(kFinished, machine.feedFollowingCodeUnit(kBoyTrail));
|
| + EXPECT_EQ(2, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(2, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // 'a' + | + U+231A + U+FE0F + [Lead] + 'a'
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.feedPrecedingCodeUnit('a'));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kWatch));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kVS16));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(kFinished, machine.feedFollowingCodeUnit('a'));
|
| + EXPECT_EQ(2, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(2, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // 'a' + | + U+231A + U+FE0F + [Lead] + [Lead]
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.feedPrecedingCodeUnit('a'));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kWatch));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kVS16));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(kFinished, machine.feedFollowingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(2, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(2, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // 'a' + | + U+231A + U+FE0F + [Lead] + [EOT]
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.feedPrecedingCodeUnit('a'));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kWatch));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kVS16));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(2, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(2, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // 'a' + | + U+1F441 + U+FE0F + 'a'
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.feedPrecedingCodeUnit('a'));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kEyeLead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kEyeTrail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kVS16));
|
| + EXPECT_EQ(kFinished, machine.feedFollowingCodeUnit('a'));
|
| + EXPECT_EQ(3, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(3, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // 'a' + | + U+1F441 + U+FE0F + EOT
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.feedPrecedingCodeUnit('a'));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kEyeLead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kEyeTrail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kVS16));
|
| + EXPECT_EQ(3, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(3, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // 'a' + | + U+1F441 + U+FE0F + [Trail]
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.feedPrecedingCodeUnit('a'));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kEyeLead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kEyeTrail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kVS16));
|
| + EXPECT_EQ(kFinished, machine.feedFollowingCodeUnit(kBoyTrail));
|
| + EXPECT_EQ(3, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(3, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // 'a' + | + U+1F441 + U+FE0F + [Lead] + 'a'
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.feedPrecedingCodeUnit('a'));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kEyeLead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kEyeTrail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kVS16));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(kFinished, machine.feedFollowingCodeUnit('a'));
|
| + EXPECT_EQ(3, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(3, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // 'a' + | + U+1F441 + U+FE0F + [Lead] + [Lead]
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.feedPrecedingCodeUnit('a'));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kEyeLead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kEyeTrail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kVS16));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(kFinished, machine.feedFollowingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(3, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(3, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // 'a' + | + U+1F441 + U+FE0F + [Lead] + [EOT]
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.feedPrecedingCodeUnit('a'));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kEyeLead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kEyeTrail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kVS16));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(3, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(3, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // 'a' + | + U+3402 + U+E0100 + 'a'
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.feedPrecedingCodeUnit('a'));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kHan));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kVS17Lead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kVS17Trail));
|
| + EXPECT_EQ(kFinished, machine.feedFollowingCodeUnit('a'));
|
| + EXPECT_EQ(3, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(3, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // 'a' + | + U+3402 + U+E0100 + EOT
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.feedPrecedingCodeUnit('a'));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kHan));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kVS17Lead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kVS17Trail));
|
| + EXPECT_EQ(3, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(3, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // 'a' + | + U+3402 + U+E0100 + [Trail]
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.feedPrecedingCodeUnit('a'));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kHan));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kVS17Lead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kVS17Trail));
|
| + EXPECT_EQ(kFinished, machine.feedFollowingCodeUnit(kBoyTrail));
|
| + EXPECT_EQ(3, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(3, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // 'a' + | + U+3402 + U+E0100 + [Lead] + 'a'
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.feedPrecedingCodeUnit('a'));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kHan));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kVS17Lead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kVS17Trail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(kFinished, machine.feedFollowingCodeUnit('a'));
|
| + EXPECT_EQ(3, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(3, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // 'a' + | + U+3402 + U+E0100 + [Lead] + [Lead]
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.feedPrecedingCodeUnit('a'));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kHan));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kVS17Lead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kVS17Trail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(kFinished, machine.feedFollowingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(3, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(3, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // 'a' + | + U+3402 + U+E0100 + [Lead] + [EOT]
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.feedPrecedingCodeUnit('a'));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kHan));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kVS17Lead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kVS17Trail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(3, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(3, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // 'a' + | + U+2000B + U+E0100 + 'a'
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.feedPrecedingCodeUnit('a'));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kHanLead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kHanTrail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kVS17Lead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kVS17Trail));
|
| + EXPECT_EQ(kFinished, machine.feedFollowingCodeUnit('a'));
|
| + EXPECT_EQ(4, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(4, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // 'a' + | + U+2000B + U+E0100 + EOT
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.feedPrecedingCodeUnit('a'));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kHanLead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kHanTrail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kVS17Lead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kVS17Trail));
|
| + EXPECT_EQ(4, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(4, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // 'a' + | + U+2000B + U+E0100 + [Trail]
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.feedPrecedingCodeUnit('a'));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kHanLead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kHanTrail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kVS17Lead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kVS17Trail));
|
| + EXPECT_EQ(kFinished, machine.feedFollowingCodeUnit(kBoyTrail));
|
| + EXPECT_EQ(4, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(4, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // 'a' + | + U+2000B + U+E0100 + [Lead] + 'a'
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.feedPrecedingCodeUnit('a'));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kHanLead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kHanTrail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kVS17Lead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kVS17Trail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(kFinished, machine.feedFollowingCodeUnit('a'));
|
| + EXPECT_EQ(4, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(4, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // 'a' + | + U+2000B + U+E0100 + [Lead] + [Lead]
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.feedPrecedingCodeUnit('a'));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kHanLead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kHanTrail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kVS17Lead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kVS17Trail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(kFinished, machine.feedFollowingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(4, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(4, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // 'a' + | + U+2000B + U+E0100 + [Lead] + [EOT]
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.feedPrecedingCodeUnit('a'));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kHanLead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kHanTrail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kVS17Lead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kVS17Trail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(4, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(4, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // U+1F466 + | + U+231A + U+FE0F + 'a'
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kBoyTrail));
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.feedPrecedingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kWatch));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kVS16));
|
| + EXPECT_EQ(kFinished, machine.feedFollowingCodeUnit('a'));
|
| + EXPECT_EQ(2, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(2, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // U+1F466 + | + U+231A + U+FE0F + EOT
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kBoyTrail));
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.feedPrecedingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kWatch));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kVS16));
|
| + EXPECT_EQ(2, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(2, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // U+1F466 + | + U+231A + U+FE0F + [Trail]
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kBoyTrail));
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.feedPrecedingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kWatch));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kVS16));
|
| + EXPECT_EQ(kFinished, machine.feedFollowingCodeUnit(kBoyTrail));
|
| + EXPECT_EQ(2, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(2, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // U+1F466 + | + U+231A + U+FE0F + [Lead] + 'a'
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kBoyTrail));
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.feedPrecedingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kWatch));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kVS16));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(kFinished, machine.feedFollowingCodeUnit('a'));
|
| + EXPECT_EQ(2, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(2, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // U+1F466 + | + U+231A + U+FE0F + [Lead] + [Lead]
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kBoyTrail));
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.feedPrecedingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kWatch));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kVS16));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(kFinished, machine.feedFollowingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(2, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(2, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // U+1F466 + | + U+231A + U+FE0F + [Lead] + [EOT]
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kBoyTrail));
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.feedPrecedingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kWatch));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kVS16));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(2, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(2, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // U+1F466 + | + U+1F441 + U+FE0F + 'a'
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kBoyTrail));
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.feedPrecedingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kEyeLead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kEyeTrail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kVS16));
|
| + EXPECT_EQ(kFinished, machine.feedFollowingCodeUnit('a'));
|
| + EXPECT_EQ(3, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(3, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // U+1F466 + | + U+1F441 + U+FE0F + EOT
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kBoyTrail));
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.feedPrecedingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kEyeLead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kEyeTrail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kVS16));
|
| + EXPECT_EQ(3, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(3, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // U+1F466 + | + U+1F441 + U+FE0F + [Trail]
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kBoyTrail));
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.feedPrecedingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kEyeLead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kEyeTrail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kVS16));
|
| + EXPECT_EQ(kFinished, machine.feedFollowingCodeUnit(kBoyTrail));
|
| + EXPECT_EQ(3, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(3, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // U+1F466 + | + U+1F441 + U+FE0F + [Lead] + 'a'
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kBoyTrail));
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.feedPrecedingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kEyeLead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kEyeTrail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kVS16));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(kFinished, machine.feedFollowingCodeUnit('a'));
|
| + EXPECT_EQ(3, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(3, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // U+1F466 + | + U+1F441 + U+FE0F + [Lead] + [Lead]
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kBoyTrail));
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.feedPrecedingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kEyeLead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kEyeTrail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kVS16));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(kFinished, machine.feedFollowingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(3, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(3, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // U+1F466 + | + U+1F441 + U+FE0F + [Lead] + [EOT]
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kBoyTrail));
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.feedPrecedingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kEyeLead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kEyeTrail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kVS16));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(3, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(3, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // U+1F466 + | + U+3402 + U+E0100 + 'a'
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kBoyTrail));
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.feedPrecedingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kHan));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kVS17Lead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kVS17Trail));
|
| + EXPECT_EQ(kFinished, machine.feedFollowingCodeUnit('a'));
|
| + EXPECT_EQ(3, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(3, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // U+1F466 + | + U+3402 + U+E0100 + EOT
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kBoyTrail));
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.feedPrecedingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kHan));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kVS17Lead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kVS17Trail));
|
| + EXPECT_EQ(3, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(3, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // U+1F466 + | + U+3402 + U+E0100 + [Trail]
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kBoyTrail));
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.feedPrecedingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kHan));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kVS17Lead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kVS17Trail));
|
| + EXPECT_EQ(kFinished, machine.feedFollowingCodeUnit(kBoyTrail));
|
| + EXPECT_EQ(3, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(3, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // U+1F466 + | + U+3402 + U+E0100 + [Lead] + 'a'
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kBoyTrail));
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.feedPrecedingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kHan));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kVS17Lead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kVS17Trail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(kFinished, machine.feedFollowingCodeUnit('a'));
|
| + EXPECT_EQ(3, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(3, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // U+1F466 + | + U+3402 + U+E0100 + [Lead] + [Lead]
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kBoyTrail));
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.feedPrecedingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kHan));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kVS17Lead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kVS17Trail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(kFinished, machine.feedFollowingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(3, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(3, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // U+1F466 + | + U+3402 + U+E0100 + [Lead] + [EOT]
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kBoyTrail));
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.feedPrecedingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kHan));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kVS17Lead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kVS17Trail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(3, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(3, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // U+1F466 + | + U+2000B + U+E0100 + 'a'
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kBoyTrail));
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.feedPrecedingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kHanLead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kHanTrail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kVS17Lead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kVS17Trail));
|
| + EXPECT_EQ(kFinished, machine.feedFollowingCodeUnit('a'));
|
| + EXPECT_EQ(4, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(4, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // U+1F466 + | + U+2000B + U+E0100 + EOT
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kBoyTrail));
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.feedPrecedingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kHanLead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kHanTrail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kVS17Lead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kVS17Trail));
|
| + EXPECT_EQ(4, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(4, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // U+1F466 + | + U+2000B + U+E0100 + [Trail]
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kBoyTrail));
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.feedPrecedingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kHanLead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kHanTrail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kVS17Lead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kVS17Trail));
|
| + EXPECT_EQ(kFinished, machine.feedFollowingCodeUnit(kBoyTrail));
|
| + EXPECT_EQ(4, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(4, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // U+1F466 + | + U+2000B + U+E0100 + [Lead] + 'a'
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kBoyTrail));
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.feedPrecedingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kHanLead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kHanTrail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kVS17Lead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kVS17Trail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(kFinished, machine.feedFollowingCodeUnit('a'));
|
| + EXPECT_EQ(4, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(4, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // U+1F466 + | + U+2000B + U+E0100 + [Lead] + [Lead]
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kBoyTrail));
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.feedPrecedingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kHanLead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kHanTrail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kVS17Lead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kVS17Trail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(kFinished, machine.feedFollowingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(4, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(4, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // U+1F466 + | + U+2000B + U+E0100 + [Lead] + [EOT]
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kBoyTrail));
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.feedPrecedingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kHanLead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kHanTrail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kVS17Lead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kVS17Trail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(4, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(4, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // Much longer case.
|
| + // U+1F469 U+200D U+2764 U+FE0F U+200D U+1F48B U+200D U+1F468 is a valid
|
| + // ZWJ emoji sequence. Following sequence is corresponding to this ZWJ emoji
|
| + // sequence.
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.tellEndOfPrecedingText());
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(0xD83D));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(0xDC69));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(0x200D));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(0x2764));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(0xFE0F));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(0x200D));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(0xD83D));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(0xDC8B));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(0x200D));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(0xD83D));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(0xDC68));
|
| + EXPECT_EQ(kFinished, machine.feedFollowingCodeUnit('a'));
|
| + EXPECT_EQ(11, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(11, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // TODO(nona): Nice to add preceding broken surrogate case.
|
| +}
|
| +
|
| +// TODO(nona): Nice to add NotBreakingImmediatelyBefore_withPrecedingRIS case.
|
| +
|
| +TEST(ForwardGraphemeBoundaryStatemachineTest, Flags)
|
| +{
|
| + ForwardGraphemeBoundaryStateMachine machine;
|
| +
|
| + // SOT + [U] + [S] + | + [U] + [S]
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisUTrail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisULead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisSTrail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisSLead));
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.tellEndOfPrecedingText());
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kRisULead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kRisUTrail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kRisSLead));
|
| + EXPECT_EQ(kFinished, machine.feedFollowingCodeUnit(kRisSTrail));
|
| + EXPECT_EQ(4, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(4, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // 'a' + [U] + [S] + | + [U] + [S]
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisUTrail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisULead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisSTrail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisSLead));
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.feedPrecedingCodeUnit('a'));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kRisULead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kRisUTrail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kRisSLead));
|
| + EXPECT_EQ(kFinished, machine.feedFollowingCodeUnit(kRisSTrail));
|
| + EXPECT_EQ(4, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(4, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // U+1F466 + [U] + [S] + | + [U] + [S]
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisUTrail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisULead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisSTrail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisSLead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kBoyTrail));
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.feedPrecedingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kRisULead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kRisUTrail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kRisSLead));
|
| + EXPECT_EQ(kFinished, machine.feedFollowingCodeUnit(kRisSTrail));
|
| + EXPECT_EQ(4, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(4, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // [Lead] + [U] + [S] + | + [U] + [S]
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisUTrail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisULead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisSTrail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisSLead));
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.feedPrecedingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kRisULead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kRisUTrail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kRisSLead));
|
| + EXPECT_EQ(kFinished, machine.feedFollowingCodeUnit(kRisSTrail));
|
| + EXPECT_EQ(4, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(4, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // 'a' + [Trail] + [U] + [S] + | + [U] + [S]
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisUTrail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisULead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisSTrail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisSLead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kBoyTrail));
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.feedPrecedingCodeUnit('a'));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kRisULead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kRisUTrail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kRisSLead));
|
| + EXPECT_EQ(kFinished, machine.feedFollowingCodeUnit(kRisSTrail));
|
| + EXPECT_EQ(4, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(4, machine.finalizeAndGetBoundaryOffset());
|
| + // [Trail] + [Trail] + [U] + [S] + | + [U] + [S]
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisUTrail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisULead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisSTrail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisSLead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kBoyTrail));
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.feedPrecedingCodeUnit(kBoyTrail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kRisULead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kRisUTrail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kRisSLead));
|
| + EXPECT_EQ(kFinished, machine.feedFollowingCodeUnit(kRisSTrail));
|
| + EXPECT_EQ(4, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(4, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // SOT + [Trail] + [U] + [S] + | + [U] + [S]
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisUTrail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisULead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisSTrail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisSLead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kBoyTrail));
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.tellEndOfPrecedingText());
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kRisULead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kRisUTrail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kRisSLead));
|
| + EXPECT_EQ(kFinished, machine.feedFollowingCodeUnit(kRisSTrail));
|
| + EXPECT_EQ(4, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(4, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // SOT + [U] + [S] + [U] + | + [U] + [S]
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisUTrail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisULead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisSTrail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisSLead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisUTrail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisULead));
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.tellEndOfPrecedingText());
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kRisULead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kRisUTrail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kRisSLead));
|
| + EXPECT_EQ(kFinished, machine.feedFollowingCodeUnit(kRisSTrail));
|
| + EXPECT_EQ(2, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(2, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // 'a' + [U] + [S] + [U] + | + [U] + [S]
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisUTrail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisULead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisSTrail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisSLead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisUTrail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisULead));
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.feedPrecedingCodeUnit('a'));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kRisULead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kRisUTrail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kRisSLead));
|
| + EXPECT_EQ(kFinished, machine.feedFollowingCodeUnit(kRisSTrail));
|
| + EXPECT_EQ(2, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(2, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // U+1F466 + [U] + [S] + [U] + | + [U] + [S]
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisUTrail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisULead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisSTrail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisSLead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisUTrail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisULead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kBoyTrail));
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.feedPrecedingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kRisULead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kRisUTrail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kRisSLead));
|
| + EXPECT_EQ(kFinished, machine.feedFollowingCodeUnit(kRisSTrail));
|
| + EXPECT_EQ(2, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(2, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // [Lead] + [U] + [S] + [U] + | + [U] + [S]
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisUTrail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisULead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisSTrail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisSLead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisUTrail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisULead));
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.feedPrecedingCodeUnit(kBoyLead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kRisULead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kRisUTrail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kRisSLead));
|
| + EXPECT_EQ(kFinished, machine.feedFollowingCodeUnit(kRisSTrail));
|
| + EXPECT_EQ(2, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(2, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // 'a' + [Trail] + [U] + [S] + [U] + | + [U] + [S]
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisUTrail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisULead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisSTrail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisSLead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisUTrail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisULead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kBoyTrail));
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.feedPrecedingCodeUnit('a'));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kRisULead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kRisUTrail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kRisSLead));
|
| + EXPECT_EQ(kFinished, machine.feedFollowingCodeUnit(kRisSTrail));
|
| + EXPECT_EQ(2, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(2, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // [Trail] + [Trail] + [U] + [S] + [U] + | + [U] + [S]
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisUTrail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisULead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisSTrail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisSLead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisUTrail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisULead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kBoyTrail));
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.feedPrecedingCodeUnit(kBoyTrail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kRisULead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kRisUTrail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kRisSLead));
|
| + EXPECT_EQ(kFinished, machine.feedFollowingCodeUnit(kRisSTrail));
|
| + EXPECT_EQ(2, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(2, machine.finalizeAndGetBoundaryOffset());
|
| +
|
| + // SOT + [Trail] + [U] + [S] + [U] + | + [U] + [S]
|
| + machine.reset();
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisUTrail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisULead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisSTrail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisSLead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisUTrail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kRisULead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedPrecedingCodeUnit(kBoyTrail));
|
| + EXPECT_EQ(kNeedFollowingCodeUnit, machine.tellEndOfPrecedingText());
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kRisULead));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kRisUTrail));
|
| + EXPECT_EQ(kNeedMoreCodeUnit, machine.feedFollowingCodeUnit(kRisSLead));
|
| + EXPECT_EQ(kFinished, machine.feedFollowingCodeUnit(kRisSTrail));
|
| + EXPECT_EQ(2, machine.finalizeAndGetBoundaryOffset());
|
| + EXPECT_EQ(2, machine.finalizeAndGetBoundaryOffset());
|
| +}
|
| +
|
| +} // namespace blink
|
|
|