| OLD | NEW |
| (Empty) | |
| 1 // Copyright 2017 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. |
| 4 |
| 5 #include "core/editing/spellcheck/IdleSpellCheckCallback.h" |
| 6 |
| 7 #include "core/editing/spellcheck/SpellCheckTestBase.h" |
| 8 #include "core/editing/spellcheck/SpellChecker.h" |
| 9 #include "core/frame/LocalFrame.h" |
| 10 #include "platform/RuntimeEnabledFeatures.h" |
| 11 |
| 12 namespace blink { |
| 13 |
| 14 using State = IdleSpellCheckCallback::State; |
| 15 |
| 16 class IdleSpellCheckCallbackTest : public SpellCheckTestBase { |
| 17 protected: |
| 18 IdleSpellCheckCallback& idleChecker() { |
| 19 return frame().idleSpellCheckCallback(); |
| 20 } |
| 21 |
| 22 void SetUp() override { |
| 23 SpellCheckTestBase::SetUp(); |
| 24 idleChecker().documentAttached(frame().document()); |
| 25 } |
| 26 |
| 27 void transitTo(State state) { |
| 28 switch (state) { |
| 29 case State::kInactive: |
| 30 idleChecker().deactivate(); |
| 31 break; |
| 32 case State::kHotModeRequested: |
| 33 idleChecker().setNeedsInvocation(); |
| 34 break; |
| 35 case State::kColdModeTimerStarted: |
| 36 break; |
| 37 case State::kColdModeRequested: |
| 38 idleChecker().skipColdModeTimerForTesting(); |
| 39 break; |
| 40 default: |
| 41 NOTREACHED(); |
| 42 } |
| 43 } |
| 44 }; |
| 45 |
| 46 // Test cases for lifecycle state transitions. |
| 47 |
| 48 TEST_F(IdleSpellCheckCallbackTest, Initialization) { |
| 49 EXPECT_EQ(State::kColdModeTimerStarted, idleChecker().state()); |
| 50 } |
| 51 |
| 52 TEST_F(IdleSpellCheckCallbackTest, RequestWhenInactive) { |
| 53 transitTo(State::kInactive); |
| 54 idleChecker().setNeedsInvocation(); |
| 55 EXPECT_EQ(State::kHotModeRequested, idleChecker().state()); |
| 56 EXPECT_NE(-1, idleChecker().idleCallbackHandle()); |
| 57 } |
| 58 |
| 59 TEST_F(IdleSpellCheckCallbackTest, RequestWhenHotModeRequested) { |
| 60 transitTo(State::kHotModeRequested); |
| 61 int handle = idleChecker().idleCallbackHandle(); |
| 62 idleChecker().setNeedsInvocation(); |
| 63 EXPECT_EQ(State::kHotModeRequested, idleChecker().state()); |
| 64 EXPECT_EQ(handle, idleChecker().idleCallbackHandle()); |
| 65 EXPECT_NE(-1, idleChecker().idleCallbackHandle()); |
| 66 } |
| 67 |
| 68 TEST_F(IdleSpellCheckCallbackTest, RequestWhenColdModeTimerStarted) { |
| 69 transitTo(State::kColdModeTimerStarted); |
| 70 idleChecker().setNeedsInvocation(); |
| 71 EXPECT_EQ(State::kHotModeRequested, idleChecker().state()); |
| 72 EXPECT_NE(-1, idleChecker().idleCallbackHandle()); |
| 73 } |
| 74 |
| 75 TEST_F(IdleSpellCheckCallbackTest, RequestWhenColdModeRequested) { |
| 76 transitTo(State::kColdModeRequested); |
| 77 int handle = idleChecker().idleCallbackHandle(); |
| 78 idleChecker().setNeedsInvocation(); |
| 79 EXPECT_EQ(State::kHotModeRequested, idleChecker().state()); |
| 80 EXPECT_EQ(handle, idleChecker().idleCallbackHandle()); |
| 81 EXPECT_NE(-1, idleChecker().idleCallbackHandle()); |
| 82 } |
| 83 |
| 84 TEST_F(IdleSpellCheckCallbackTest, HotModeTransitToColdMode) { |
| 85 transitTo(State::kHotModeRequested); |
| 86 idleChecker().forceInvocationForTesting(); |
| 87 EXPECT_EQ(State::kColdModeTimerStarted, idleChecker().state()); |
| 88 } |
| 89 |
| 90 TEST_F(IdleSpellCheckCallbackTest, ColdModeTimerStartedToRequested) { |
| 91 transitTo(State::kColdModeTimerStarted); |
| 92 idleChecker().skipColdModeTimerForTesting(); |
| 93 EXPECT_EQ(State::kColdModeRequested, idleChecker().state()); |
| 94 EXPECT_NE(-1, idleChecker().idleCallbackHandle()); |
| 95 } |
| 96 |
| 97 TEST_F(IdleSpellCheckCallbackTest, ColdModeStayAtColdMode) { |
| 98 transitTo(State::kColdModeRequested); |
| 99 idleChecker().setNeedsMoreColdModeInvocationForTesting(); |
| 100 idleChecker().forceInvocationForTesting(); |
| 101 EXPECT_EQ(State::kColdModeTimerStarted, idleChecker().state()); |
| 102 } |
| 103 |
| 104 TEST_F(IdleSpellCheckCallbackTest, ColdModeToInactive) { |
| 105 transitTo(State::kColdModeRequested); |
| 106 idleChecker().forceInvocationForTesting(); |
| 107 EXPECT_EQ(State::kInactive, idleChecker().state()); |
| 108 } |
| 109 |
| 110 TEST_F(IdleSpellCheckCallbackTest, DetachWhenInactive) { |
| 111 transitTo(State::kInactive); |
| 112 document().shutdown(); |
| 113 EXPECT_EQ(State::kInactive, idleChecker().state()); |
| 114 } |
| 115 |
| 116 TEST_F(IdleSpellCheckCallbackTest, DetachWhenHotModeRequested) { |
| 117 transitTo(State::kHotModeRequested); |
| 118 document().shutdown(); |
| 119 EXPECT_EQ(State::kInactive, idleChecker().state()); |
| 120 } |
| 121 |
| 122 TEST_F(IdleSpellCheckCallbackTest, DetachWhenColdModeTimerStarted) { |
| 123 transitTo(State::kColdModeTimerStarted); |
| 124 document().shutdown(); |
| 125 EXPECT_EQ(State::kInactive, idleChecker().state()); |
| 126 } |
| 127 |
| 128 TEST_F(IdleSpellCheckCallbackTest, DetachWhenColdModeRequested) { |
| 129 transitTo(State::kColdModeRequested); |
| 130 document().shutdown(); |
| 131 EXPECT_EQ(State::kInactive, idleChecker().state()); |
| 132 } |
| 133 |
| 134 } // namespace blink |
| OLD | NEW |