| OLD | NEW |
| 1 // Copyright 2017 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "core/editing/spellcheck/IdleSpellCheckCallback.h" | 5 #include "core/editing/spellcheck/IdleSpellCheckCallback.h" |
| 6 | 6 |
| 7 #include "core/editing/spellcheck/SpellCheckTestBase.h" | 7 #include "core/editing/spellcheck/SpellCheckTestBase.h" |
| 8 #include "core/editing/spellcheck/SpellChecker.h" | 8 #include "core/editing/spellcheck/SpellChecker.h" |
| 9 #include "core/frame/LocalFrame.h" | 9 #include "core/frame/LocalFrame.h" |
| 10 #include "platform/RuntimeEnabledFeatures.h" | 10 #include "platform/RuntimeEnabledFeatures.h" |
| (...skipping 10 matching lines...) Expand all Loading... |
| 21 | 21 |
| 22 void TransitTo(State state) { | 22 void TransitTo(State state) { |
| 23 switch (state) { | 23 switch (state) { |
| 24 case State::kInactive: | 24 case State::kInactive: |
| 25 IdleChecker().Deactivate(); | 25 IdleChecker().Deactivate(); |
| 26 break; | 26 break; |
| 27 case State::kHotModeRequested: | 27 case State::kHotModeRequested: |
| 28 IdleChecker().SetNeedsInvocation(); | 28 IdleChecker().SetNeedsInvocation(); |
| 29 break; | 29 break; |
| 30 case State::kColdModeTimerStarted: | 30 case State::kColdModeTimerStarted: |
| 31 DCHECK(RuntimeEnabledFeatures::idleTimeColdModeSpellCheckingEnabled()); |
| 31 break; | 32 break; |
| 32 case State::kColdModeRequested: | 33 case State::kColdModeRequested: |
| 34 DCHECK(RuntimeEnabledFeatures::idleTimeColdModeSpellCheckingEnabled()); |
| 33 IdleChecker().SkipColdModeTimerForTesting(); | 35 IdleChecker().SkipColdModeTimerForTesting(); |
| 34 break; | 36 break; |
| 35 case State::kInHotModeInvocation: | 37 case State::kInHotModeInvocation: |
| 36 case State::kInColdModeInvocation: | 38 case State::kInColdModeInvocation: |
| 37 NOTREACHED(); | 39 NOTREACHED(); |
| 38 } | 40 } |
| 39 } | 41 } |
| 40 }; | 42 }; |
| 41 | 43 |
| 42 // Test cases for lifecycle state transitions. | 44 // Test cases for lifecycle state transitions. |
| 43 | 45 |
| 44 TEST_F(IdleSpellCheckCallbackTest, Initialization) { | 46 TEST_F(IdleSpellCheckCallbackTest, InitializationWithColdMode) { |
| 45 if (!RuntimeEnabledFeatures::idleTimeSpellCheckingEnabled()) | 47 if (!RuntimeEnabledFeatures::idleTimeSpellCheckingEnabled()) |
| 46 return; | 48 return; |
| 49 if (!RuntimeEnabledFeatures::idleTimeColdModeSpellCheckingEnabled()) |
| 50 return; |
| 47 | 51 |
| 48 EXPECT_EQ(State::kColdModeTimerStarted, IdleChecker().GetState()); | 52 EXPECT_EQ(State::kColdModeTimerStarted, IdleChecker().GetState()); |
| 49 } | 53 } |
| 50 | 54 |
| 55 TEST_F(IdleSpellCheckCallbackTest, InitializationWithoutColdMode) { |
| 56 if (!RuntimeEnabledFeatures::idleTimeSpellCheckingEnabled()) |
| 57 return; |
| 58 if (RuntimeEnabledFeatures::idleTimeColdModeSpellCheckingEnabled()) |
| 59 return; |
| 60 |
| 61 EXPECT_EQ(State::kInactive, IdleChecker().GetState()); |
| 62 } |
| 63 |
| 51 TEST_F(IdleSpellCheckCallbackTest, RequestWhenInactive) { | 64 TEST_F(IdleSpellCheckCallbackTest, RequestWhenInactive) { |
| 52 if (!RuntimeEnabledFeatures::idleTimeSpellCheckingEnabled()) | 65 if (!RuntimeEnabledFeatures::idleTimeSpellCheckingEnabled()) |
| 53 return; | 66 return; |
| 54 | 67 |
| 55 TransitTo(State::kInactive); | 68 TransitTo(State::kInactive); |
| 56 IdleChecker().SetNeedsInvocation(); | 69 IdleChecker().SetNeedsInvocation(); |
| 57 EXPECT_EQ(State::kHotModeRequested, IdleChecker().GetState()); | 70 EXPECT_EQ(State::kHotModeRequested, IdleChecker().GetState()); |
| 58 EXPECT_NE(-1, IdleChecker().IdleCallbackHandle()); | 71 EXPECT_NE(-1, IdleChecker().IdleCallbackHandle()); |
| 59 } | 72 } |
| 60 | 73 |
| 61 TEST_F(IdleSpellCheckCallbackTest, RequestWhenHotModeRequested) { | 74 TEST_F(IdleSpellCheckCallbackTest, RequestWhenHotModeRequested) { |
| 62 if (!RuntimeEnabledFeatures::idleTimeSpellCheckingEnabled()) | 75 if (!RuntimeEnabledFeatures::idleTimeSpellCheckingEnabled()) |
| 63 return; | 76 return; |
| 64 | 77 |
| 65 TransitTo(State::kHotModeRequested); | 78 TransitTo(State::kHotModeRequested); |
| 66 int handle = IdleChecker().IdleCallbackHandle(); | 79 int handle = IdleChecker().IdleCallbackHandle(); |
| 67 IdleChecker().SetNeedsInvocation(); | 80 IdleChecker().SetNeedsInvocation(); |
| 68 EXPECT_EQ(State::kHotModeRequested, IdleChecker().GetState()); | 81 EXPECT_EQ(State::kHotModeRequested, IdleChecker().GetState()); |
| 69 EXPECT_EQ(handle, IdleChecker().IdleCallbackHandle()); | 82 EXPECT_EQ(handle, IdleChecker().IdleCallbackHandle()); |
| 70 EXPECT_NE(-1, IdleChecker().IdleCallbackHandle()); | 83 EXPECT_NE(-1, IdleChecker().IdleCallbackHandle()); |
| 71 } | 84 } |
| 72 | 85 |
| 73 TEST_F(IdleSpellCheckCallbackTest, RequestWhenColdModeTimerStarted) { | 86 TEST_F(IdleSpellCheckCallbackTest, RequestWhenColdModeTimerStarted) { |
| 74 if (!RuntimeEnabledFeatures::idleTimeSpellCheckingEnabled()) | 87 if (!RuntimeEnabledFeatures::idleTimeSpellCheckingEnabled()) |
| 75 return; | 88 return; |
| 89 if (!RuntimeEnabledFeatures::idleTimeColdModeSpellCheckingEnabled()) |
| 90 return; |
| 76 | 91 |
| 77 TransitTo(State::kColdModeTimerStarted); | 92 TransitTo(State::kColdModeTimerStarted); |
| 78 IdleChecker().SetNeedsInvocation(); | 93 IdleChecker().SetNeedsInvocation(); |
| 79 EXPECT_EQ(State::kHotModeRequested, IdleChecker().GetState()); | 94 EXPECT_EQ(State::kHotModeRequested, IdleChecker().GetState()); |
| 80 EXPECT_NE(-1, IdleChecker().IdleCallbackHandle()); | 95 EXPECT_NE(-1, IdleChecker().IdleCallbackHandle()); |
| 81 } | 96 } |
| 82 | 97 |
| 83 TEST_F(IdleSpellCheckCallbackTest, RequestWhenColdModeRequested) { | 98 TEST_F(IdleSpellCheckCallbackTest, RequestWhenColdModeRequested) { |
| 84 if (!RuntimeEnabledFeatures::idleTimeSpellCheckingEnabled()) | 99 if (!RuntimeEnabledFeatures::idleTimeSpellCheckingEnabled()) |
| 85 return; | 100 return; |
| 101 if (!RuntimeEnabledFeatures::idleTimeColdModeSpellCheckingEnabled()) |
| 102 return; |
| 86 | 103 |
| 87 TransitTo(State::kColdModeRequested); | 104 TransitTo(State::kColdModeRequested); |
| 88 int handle = IdleChecker().IdleCallbackHandle(); | 105 int handle = IdleChecker().IdleCallbackHandle(); |
| 89 IdleChecker().SetNeedsInvocation(); | 106 IdleChecker().SetNeedsInvocation(); |
| 90 EXPECT_EQ(State::kHotModeRequested, IdleChecker().GetState()); | 107 EXPECT_EQ(State::kHotModeRequested, IdleChecker().GetState()); |
| 91 EXPECT_NE(handle, IdleChecker().IdleCallbackHandle()); | 108 EXPECT_NE(handle, IdleChecker().IdleCallbackHandle()); |
| 92 EXPECT_NE(-1, IdleChecker().IdleCallbackHandle()); | 109 EXPECT_NE(-1, IdleChecker().IdleCallbackHandle()); |
| 93 } | 110 } |
| 94 | 111 |
| 112 TEST_F(IdleSpellCheckCallbackTest, HotModeTransitToInactive) { |
| 113 if (!RuntimeEnabledFeatures::idleTimeSpellCheckingEnabled()) |
| 114 return; |
| 115 if (RuntimeEnabledFeatures::idleTimeColdModeSpellCheckingEnabled()) |
| 116 return; |
| 117 |
| 118 TransitTo(State::kHotModeRequested); |
| 119 IdleChecker().ForceInvocationForTesting(); |
| 120 EXPECT_EQ(State::kInactive, IdleChecker().GetState()); |
| 121 } |
| 122 |
| 95 TEST_F(IdleSpellCheckCallbackTest, HotModeTransitToColdMode) { | 123 TEST_F(IdleSpellCheckCallbackTest, HotModeTransitToColdMode) { |
| 96 if (!RuntimeEnabledFeatures::idleTimeSpellCheckingEnabled()) | 124 if (!RuntimeEnabledFeatures::idleTimeSpellCheckingEnabled()) |
| 97 return; | 125 return; |
| 126 if (!RuntimeEnabledFeatures::idleTimeColdModeSpellCheckingEnabled()) |
| 127 return; |
| 98 | 128 |
| 99 TransitTo(State::kHotModeRequested); | 129 TransitTo(State::kHotModeRequested); |
| 100 IdleChecker().ForceInvocationForTesting(); | 130 IdleChecker().ForceInvocationForTesting(); |
| 101 EXPECT_EQ(State::kColdModeTimerStarted, IdleChecker().GetState()); | 131 EXPECT_EQ(State::kColdModeTimerStarted, IdleChecker().GetState()); |
| 102 } | 132 } |
| 103 | 133 |
| 104 TEST_F(IdleSpellCheckCallbackTest, ColdModeTimerStartedToRequested) { | 134 TEST_F(IdleSpellCheckCallbackTest, ColdModeTimerStartedToRequested) { |
| 105 if (!RuntimeEnabledFeatures::idleTimeSpellCheckingEnabled()) | 135 if (!RuntimeEnabledFeatures::idleTimeSpellCheckingEnabled()) |
| 106 return; | 136 return; |
| 137 if (!RuntimeEnabledFeatures::idleTimeColdModeSpellCheckingEnabled()) |
| 138 return; |
| 107 | 139 |
| 108 TransitTo(State::kColdModeTimerStarted); | 140 TransitTo(State::kColdModeTimerStarted); |
| 109 IdleChecker().SkipColdModeTimerForTesting(); | 141 IdleChecker().SkipColdModeTimerForTesting(); |
| 110 EXPECT_EQ(State::kColdModeRequested, IdleChecker().GetState()); | 142 EXPECT_EQ(State::kColdModeRequested, IdleChecker().GetState()); |
| 111 EXPECT_NE(-1, IdleChecker().IdleCallbackHandle()); | 143 EXPECT_NE(-1, IdleChecker().IdleCallbackHandle()); |
| 112 } | 144 } |
| 113 | 145 |
| 114 TEST_F(IdleSpellCheckCallbackTest, ColdModeStayAtColdMode) { | 146 TEST_F(IdleSpellCheckCallbackTest, ColdModeStayAtColdMode) { |
| 115 if (!RuntimeEnabledFeatures::idleTimeSpellCheckingEnabled()) | 147 if (!RuntimeEnabledFeatures::idleTimeSpellCheckingEnabled()) |
| 116 return; | 148 return; |
| 149 if (!RuntimeEnabledFeatures::idleTimeColdModeSpellCheckingEnabled()) |
| 150 return; |
| 117 | 151 |
| 118 TransitTo(State::kColdModeRequested); | 152 TransitTo(State::kColdModeRequested); |
| 119 IdleChecker().SetNeedsMoreColdModeInvocationForTesting(); | 153 IdleChecker().SetNeedsMoreColdModeInvocationForTesting(); |
| 120 IdleChecker().ForceInvocationForTesting(); | 154 IdleChecker().ForceInvocationForTesting(); |
| 121 EXPECT_EQ(State::kColdModeTimerStarted, IdleChecker().GetState()); | 155 EXPECT_EQ(State::kColdModeTimerStarted, IdleChecker().GetState()); |
| 122 } | 156 } |
| 123 | 157 |
| 124 TEST_F(IdleSpellCheckCallbackTest, ColdModeToInactive) { | 158 TEST_F(IdleSpellCheckCallbackTest, ColdModeToInactive) { |
| 125 if (!RuntimeEnabledFeatures::idleTimeSpellCheckingEnabled()) | 159 if (!RuntimeEnabledFeatures::idleTimeSpellCheckingEnabled()) |
| 126 return; | 160 return; |
| 161 if (!RuntimeEnabledFeatures::idleTimeColdModeSpellCheckingEnabled()) |
| 162 return; |
| 127 | 163 |
| 128 TransitTo(State::kColdModeRequested); | 164 TransitTo(State::kColdModeRequested); |
| 129 IdleChecker().ForceInvocationForTesting(); | 165 IdleChecker().ForceInvocationForTesting(); |
| 130 EXPECT_EQ(State::kInactive, IdleChecker().GetState()); | 166 EXPECT_EQ(State::kInactive, IdleChecker().GetState()); |
| 131 } | 167 } |
| 132 | 168 |
| 133 TEST_F(IdleSpellCheckCallbackTest, DetachWhenInactive) { | 169 TEST_F(IdleSpellCheckCallbackTest, DetachWhenInactive) { |
| 134 if (!RuntimeEnabledFeatures::idleTimeSpellCheckingEnabled()) | 170 if (!RuntimeEnabledFeatures::idleTimeSpellCheckingEnabled()) |
| 135 return; | 171 return; |
| 136 | 172 |
| 137 TransitTo(State::kInactive); | 173 TransitTo(State::kInactive); |
| 138 GetDocument().Shutdown(); | 174 GetDocument().Shutdown(); |
| 139 EXPECT_EQ(State::kInactive, IdleChecker().GetState()); | 175 EXPECT_EQ(State::kInactive, IdleChecker().GetState()); |
| 140 } | 176 } |
| 141 | 177 |
| 142 TEST_F(IdleSpellCheckCallbackTest, DetachWhenHotModeRequested) { | 178 TEST_F(IdleSpellCheckCallbackTest, DetachWhenHotModeRequested) { |
| 143 if (!RuntimeEnabledFeatures::idleTimeSpellCheckingEnabled()) | 179 if (!RuntimeEnabledFeatures::idleTimeSpellCheckingEnabled()) |
| 144 return; | 180 return; |
| 145 | 181 |
| 146 TransitTo(State::kHotModeRequested); | 182 TransitTo(State::kHotModeRequested); |
| 147 GetDocument().Shutdown(); | 183 GetDocument().Shutdown(); |
| 148 EXPECT_EQ(State::kInactive, IdleChecker().GetState()); | 184 EXPECT_EQ(State::kInactive, IdleChecker().GetState()); |
| 149 } | 185 } |
| 150 | 186 |
| 151 TEST_F(IdleSpellCheckCallbackTest, DetachWhenColdModeTimerStarted) { | 187 TEST_F(IdleSpellCheckCallbackTest, DetachWhenColdModeTimerStarted) { |
| 152 if (!RuntimeEnabledFeatures::idleTimeSpellCheckingEnabled()) | 188 if (!RuntimeEnabledFeatures::idleTimeSpellCheckingEnabled()) |
| 153 return; | 189 return; |
| 190 if (!RuntimeEnabledFeatures::idleTimeColdModeSpellCheckingEnabled()) |
| 191 return; |
| 154 | 192 |
| 155 TransitTo(State::kColdModeTimerStarted); | 193 TransitTo(State::kColdModeTimerStarted); |
| 156 GetDocument().Shutdown(); | 194 GetDocument().Shutdown(); |
| 157 EXPECT_EQ(State::kInactive, IdleChecker().GetState()); | 195 EXPECT_EQ(State::kInactive, IdleChecker().GetState()); |
| 158 } | 196 } |
| 159 | 197 |
| 160 TEST_F(IdleSpellCheckCallbackTest, DetachWhenColdModeRequested) { | 198 TEST_F(IdleSpellCheckCallbackTest, DetachWhenColdModeRequested) { |
| 161 if (!RuntimeEnabledFeatures::idleTimeSpellCheckingEnabled()) | 199 if (!RuntimeEnabledFeatures::idleTimeSpellCheckingEnabled()) |
| 162 return; | 200 return; |
| 201 if (!RuntimeEnabledFeatures::idleTimeColdModeSpellCheckingEnabled()) |
| 202 return; |
| 163 | 203 |
| 164 TransitTo(State::kColdModeRequested); | 204 TransitTo(State::kColdModeRequested); |
| 165 GetDocument().Shutdown(); | 205 GetDocument().Shutdown(); |
| 166 EXPECT_EQ(State::kInactive, IdleChecker().GetState()); | 206 EXPECT_EQ(State::kInactive, IdleChecker().GetState()); |
| 167 } | 207 } |
| 168 | 208 |
| 169 } // namespace blink | 209 } // namespace blink |
| OLD | NEW |