OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 "chrome/browser/renderer_context_menu/spelling_menu_observer.h" | 5 #include "chrome/browser/renderer_context_menu/spelling_menu_observer.h" |
6 | 6 |
7 #include <vector> | 7 #include <vector> |
8 | 8 |
9 #include "base/command_line.h" | 9 #include "base/command_line.h" |
10 #include "base/prefs/pref_service.h" | 10 #include "base/prefs/pref_service.h" |
(...skipping 214 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
225 void InitMenu(const char* word, const char* suggestion) { | 225 void InitMenu(const char* word, const char* suggestion) { |
226 content::ContextMenuParams params; | 226 content::ContextMenuParams params; |
227 params.is_editable = true; | 227 params.is_editable = true; |
228 params.misspelled_word = base::ASCIIToUTF16(word); | 228 params.misspelled_word = base::ASCIIToUTF16(word); |
229 params.dictionary_suggestions.clear(); | 229 params.dictionary_suggestions.clear(); |
230 if (suggestion) | 230 if (suggestion) |
231 params.dictionary_suggestions.push_back(base::ASCIIToUTF16(suggestion)); | 231 params.dictionary_suggestions.push_back(base::ASCIIToUTF16(suggestion)); |
232 observer_->InitMenu(params); | 232 observer_->InitMenu(params); |
233 } | 233 } |
234 | 234 |
| 235 void ForceSuggestMode() { |
| 236 menu()->GetPrefs()->SetBoolean(prefs::kSpellCheckUseSpellingService, true); |
| 237 // Force a non-empty and non-"en" locale so SUGGEST is available. |
| 238 menu()->GetPrefs()->SetString(prefs::kSpellCheckDictionary, "fr"); |
| 239 ASSERT_TRUE(SpellingServiceClient::IsAvailable( |
| 240 menu()->GetProfile(), SpellingServiceClient::SUGGEST)); |
| 241 ASSERT_FALSE(SpellingServiceClient::IsAvailable( |
| 242 menu()->GetProfile(), SpellingServiceClient::SPELLCHECK)); |
| 243 } |
| 244 |
235 virtual ~SpellingMenuObserverTest(); | 245 virtual ~SpellingMenuObserverTest(); |
236 MockRenderViewContextMenu* menu() { return menu_.get(); } | 246 MockRenderViewContextMenu* menu() { return menu_.get(); } |
237 SpellingMenuObserver* observer() { return observer_.get(); } | 247 SpellingMenuObserver* observer() { return observer_.get(); } |
238 private: | 248 private: |
239 scoped_ptr<SpellingMenuObserver> observer_; | 249 scoped_ptr<SpellingMenuObserver> observer_; |
240 scoped_ptr<MockRenderViewContextMenu> menu_; | 250 scoped_ptr<MockRenderViewContextMenu> menu_; |
241 DISALLOW_COPY_AND_ASSIGN(SpellingMenuObserverTest); | 251 DISALLOW_COPY_AND_ASSIGN(SpellingMenuObserverTest); |
242 }; | 252 }; |
243 | 253 |
244 SpellingMenuObserverTest::SpellingMenuObserverTest() { | 254 SpellingMenuObserverTest::SpellingMenuObserverTest() { |
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
316 menu()->GetMenuItem(2, &item); | 326 menu()->GetMenuItem(2, &item); |
317 EXPECT_EQ(IDC_CONTENT_CONTEXT_SPELLING_TOGGLE, item.command_id); | 327 EXPECT_EQ(IDC_CONTENT_CONTEXT_SPELLING_TOGGLE, item.command_id); |
318 EXPECT_TRUE(item.enabled); | 328 EXPECT_TRUE(item.enabled); |
319 EXPECT_TRUE(item.checked); | 329 EXPECT_TRUE(item.checked); |
320 EXPECT_FALSE(item.hidden); | 330 EXPECT_FALSE(item.hidden); |
321 } | 331 } |
322 | 332 |
323 // Test that there will be a separator after "no suggestions" if | 333 // Test that there will be a separator after "no suggestions" if |
324 // SpellingServiceClient::SUGGEST is on. | 334 // SpellingServiceClient::SUGGEST is on. |
325 IN_PROC_BROWSER_TEST_F(SpellingMenuObserverTest, SeparatorAfterSuggestions) { | 335 IN_PROC_BROWSER_TEST_F(SpellingMenuObserverTest, SeparatorAfterSuggestions) { |
326 menu()->GetPrefs()->SetBoolean(prefs::kSpellCheckUseSpellingService, true); | 336 ForceSuggestMode(); |
327 CommandLine* command_line = CommandLine::ForCurrentProcess(); | |
328 command_line->AppendSwitch(switches::kUseSpellingSuggestions); | |
329 | |
330 // Force a non-empty locale so SUGGEST is available. | |
331 menu()->GetPrefs()->SetString(prefs::kSpellCheckDictionary, "en"); | |
332 EXPECT_TRUE(SpellingServiceClient::IsAvailable(menu()->GetProfile(), | |
333 SpellingServiceClient::SUGGEST)); | |
334 | |
335 InitMenu("jhhj", NULL); | 337 InitMenu("jhhj", NULL); |
336 | 338 |
337 // The test should see a top separator, "No spelling suggestions", | 339 // The test should see a top separator, "No spelling suggestions", |
338 // "No more Google suggestions" (from SpellingService) and a separator | 340 // "No more Google suggestions" (from SpellingService) and a separator |
339 // as the first four items, then possibly more (not relevant here). | 341 // as the first four items, then possibly more (not relevant here). |
340 EXPECT_LT(4U, menu()->GetMenuSize()); | 342 EXPECT_LT(4U, menu()->GetMenuSize()); |
341 | 343 |
342 MockRenderViewContextMenu::MockMenuItem item; | 344 MockRenderViewContextMenu::MockMenuItem item; |
343 menu()->GetMenuItem(0, &item); | 345 menu()->GetMenuItem(0, &item); |
344 EXPECT_EQ(-1, item.command_id); | 346 EXPECT_EQ(-1, item.command_id); |
(...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
460 InitMenu("asdfkj", "asdf"); | 462 InitMenu("asdfkj", "asdf"); |
461 | 463 |
462 // Expect at least separator and 4 default entries. | 464 // Expect at least separator and 4 default entries. |
463 EXPECT_LT(static_cast<size_t>(5), menu()->GetMenuSize()); | 465 EXPECT_LT(static_cast<size_t>(5), menu()->GetMenuSize()); |
464 // This test only cares that the first one is a separator. | 466 // This test only cares that the first one is a separator. |
465 menu()->GetMenuItem(0, &item); | 467 menu()->GetMenuItem(0, &item); |
466 EXPECT_EQ(-1, item.command_id); | 468 EXPECT_EQ(-1, item.command_id); |
467 | 469 |
468 // Case #3. Misspelled word, suggestion service is on. | 470 // Case #3. Misspelled word, suggestion service is on. |
469 Reset(false); | 471 Reset(false); |
470 menu()->GetPrefs()->SetBoolean(prefs::kSpellCheckUseSpellingService, true); | 472 ForceSuggestMode(); |
471 CommandLine* command_line = CommandLine::ForCurrentProcess(); | |
472 command_line->AppendSwitch(switches::kUseSpellingSuggestions); | |
473 InitMenu("asdfkj", NULL); | 473 InitMenu("asdfkj", NULL); |
474 | 474 |
475 // Should have at least 2 entries. Separator, suggestion. | 475 // Should have at least 2 entries. Separator, suggestion. |
476 EXPECT_LT(2U, menu()->GetMenuSize()); | 476 EXPECT_LT(2U, menu()->GetMenuSize()); |
477 menu()->GetMenuItem(0, &item); | 477 menu()->GetMenuItem(0, &item); |
478 EXPECT_EQ(-1, item.command_id); | 478 EXPECT_EQ(-1, item.command_id); |
479 menu()->GetMenuItem(1, &item); | 479 menu()->GetMenuItem(1, &item); |
480 EXPECT_EQ(IDC_CONTENT_CONTEXT_SPELLING_SUGGESTION, item.command_id); | 480 EXPECT_EQ(IDC_CONTENT_CONTEXT_SPELLING_SUGGESTION, item.command_id); |
481 } | 481 } |
OLD | NEW |