| OLD | NEW |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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 <stdio.h> | 5 #include <stdio.h> |
| 6 | 6 |
| 7 #include "base/message_loop.h" | 7 #include "base/message_loop.h" |
| 8 #include "base/string16.h" | 8 #include "base/string16.h" |
| 9 #include "base/string_util.h" | 9 #include "base/string_util.h" |
| 10 #include "base/time.h" | 10 #include "base/time.h" |
| (...skipping 20 matching lines...) Expand all Loading... |
| 31 #include "chrome/test/ui_test_utils.h" | 31 #include "chrome/test/ui_test_utils.h" |
| 32 #include "net/base/mock_host_resolver.h" | 32 #include "net/base/mock_host_resolver.h" |
| 33 #include "ui/base/keycodes/keyboard_codes.h" | 33 #include "ui/base/keycodes/keyboard_codes.h" |
| 34 #include "views/event.h" | 34 #include "views/event.h" |
| 35 | 35 |
| 36 #if defined(OS_LINUX) | 36 #if defined(OS_LINUX) |
| 37 #include <gdk/gdk.h> | 37 #include <gdk/gdk.h> |
| 38 #include <gtk/gtk.h> | 38 #include <gtk/gtk.h> |
| 39 #endif | 39 #endif |
| 40 | 40 |
| 41 #if defined(TOOLKIT_VIEWS) |
| 42 #include "views/controls/textfield/native_textfield_views.h" |
| 43 #endif |
| 44 |
| 41 using base::Time; | 45 using base::Time; |
| 42 using base::TimeDelta; | 46 using base::TimeDelta; |
| 43 | 47 |
| 44 namespace { | 48 namespace { |
| 45 | 49 |
| 46 const char kSearchKeyword[] = "foo"; | 50 const char kSearchKeyword[] = "foo"; |
| 47 const wchar_t kSearchKeywordKeys[] = { | 51 const wchar_t kSearchKeywordKeys[] = { |
| 48 ui::VKEY_F, ui::VKEY_O, ui::VKEY_O, 0 | 52 ui::VKEY_F, ui::VKEY_O, ui::VKEY_O, 0 |
| 49 }; | 53 }; |
| 50 const char kSearchURL[] = "http://www.foo.com/search?q={searchTerms}"; | 54 const char kSearchURL[] = "http://www.foo.com/search?q={searchTerms}"; |
| (...skipping 242 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 293 case NotificationType::TEMPLATE_URL_MODEL_LOADED: | 297 case NotificationType::TEMPLATE_URL_MODEL_LOADED: |
| 294 case NotificationType::AUTOCOMPLETE_CONTROLLER_RESULT_UPDATED: | 298 case NotificationType::AUTOCOMPLETE_CONTROLLER_RESULT_UPDATED: |
| 295 case NotificationType::HISTORY_LOADED: | 299 case NotificationType::HISTORY_LOADED: |
| 296 case NotificationType::BOOKMARK_MODEL_LOADED: | 300 case NotificationType::BOOKMARK_MODEL_LOADED: |
| 297 break; | 301 break; |
| 298 default: | 302 default: |
| 299 FAIL() << "Unexpected notification type"; | 303 FAIL() << "Unexpected notification type"; |
| 300 } | 304 } |
| 301 MessageLoopForUI::current()->Quit(); | 305 MessageLoopForUI::current()->Quit(); |
| 302 } | 306 } |
| 307 |
| 308 // Actual Test methods |
| 309 void BrowserAcceleratorsTest() { |
| 310 ASSERT_TRUE(ui_test_utils::BringBrowserWindowToFront(browser())); |
| 311 |
| 312 browser()->FocusLocationBar(); |
| 313 AutocompleteEditView* edit_view = NULL; |
| 314 ASSERT_NO_FATAL_FAILURE(GetAutocompleteEditView(&edit_view)); |
| 315 |
| 316 int tab_count = browser()->tab_count(); |
| 317 |
| 318 // Create a new Tab. |
| 319 browser()->NewTab(); |
| 320 ASSERT_NO_FATAL_FAILURE(WaitForTabOpenOrClose(tab_count + 1)); |
| 321 |
| 322 // Select the first Tab. |
| 323 ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_1, true, false, false)); |
| 324 ASSERT_EQ(0, browser()->selected_index()); |
| 325 |
| 326 browser()->FocusLocationBar(); |
| 327 |
| 328 // Select the second Tab. |
| 329 ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_2, true, false, false)); |
| 330 ASSERT_EQ(1, browser()->selected_index()); |
| 331 |
| 332 browser()->FocusLocationBar(); |
| 333 |
| 334 // Try ctrl-w to close a Tab. |
| 335 ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_W, true, false, false)); |
| 336 ASSERT_NO_FATAL_FAILURE(WaitForTabOpenOrClose(tab_count)); |
| 337 |
| 338 // Try ctrl-l to focus location bar. |
| 339 edit_view->SetUserText(L"Hello world"); |
| 340 EXPECT_FALSE(edit_view->IsSelectAll()); |
| 341 ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_L, true, false, false)); |
| 342 EXPECT_TRUE(edit_view->IsSelectAll()); |
| 343 |
| 344 // Try editing the location bar text. |
| 345 ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_RIGHT, false, false, false)); |
| 346 EXPECT_FALSE(edit_view->IsSelectAll()); |
| 347 ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_S, false, false, false)); |
| 348 EXPECT_EQ(L"Hello worlds", edit_view->GetText()); |
| 349 |
| 350 // Try ctrl-x to cut text. |
| 351 ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_LEFT, true, true, false)); |
| 352 EXPECT_FALSE(edit_view->IsSelectAll()); |
| 353 ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_X, true, false, false)); |
| 354 EXPECT_EQ(L"Hello ", edit_view->GetText()); |
| 355 |
| 356 #if !defined(OS_CHROMEOS) |
| 357 // Try alt-f4 to close the browser. |
| 358 ASSERT_TRUE(ui_test_utils::SendKeyPressAndWait( |
| 359 browser(), ui::VKEY_F4, false, false, true, false, |
| 360 NotificationType::BROWSER_CLOSED, Source<Browser>(browser()))); |
| 361 #endif |
| 362 } |
| 363 |
| 364 void PopupAcceleratorsTest() { |
| 365 ASSERT_TRUE(ui_test_utils::BringBrowserWindowToFront(browser())); |
| 366 |
| 367 // Create a popup. |
| 368 Browser* popup = CreateBrowserForPopup(browser()->profile()); |
| 369 AutocompleteEditView* edit_view = NULL; |
| 370 ASSERT_NO_FATAL_FAILURE( |
| 371 GetAutocompleteEditViewForBrowser(popup, &edit_view)); |
| 372 popup->FocusLocationBar(); |
| 373 EXPECT_TRUE(edit_view->IsSelectAll()); |
| 374 |
| 375 // Try ctrl-w to close the popup. |
| 376 ASSERT_TRUE(ui_test_utils::SendKeyPressAndWait( |
| 377 popup, ui::VKEY_W, true, false, false, false, |
| 378 NotificationType::BROWSER_CLOSED, Source<Browser>(popup))); |
| 379 |
| 380 // Create another popup. |
| 381 popup = CreateBrowserForPopup(browser()->profile()); |
| 382 ASSERT_NO_FATAL_FAILURE( |
| 383 GetAutocompleteEditViewForBrowser(popup, &edit_view)); |
| 384 |
| 385 // Set the edit text to "Hello world". |
| 386 edit_view->SetUserText(L"Hello world"); |
| 387 EXPECT_FALSE(edit_view->IsSelectAll()); |
| 388 popup->FocusLocationBar(); |
| 389 EXPECT_TRUE(edit_view->IsSelectAll()); |
| 390 |
| 391 // Try editing the location bar text -- should be disallowed. |
| 392 ASSERT_NO_FATAL_FAILURE(SendKeyForBrowser(popup, ui::VKEY_RIGHT, false, |
| 393 false, false)); |
| 394 EXPECT_FALSE(edit_view->IsSelectAll()); |
| 395 ASSERT_NO_FATAL_FAILURE(SendKeyForBrowser(popup, ui::VKEY_S, false, false, |
| 396 false)); |
| 397 EXPECT_EQ(L"Hello world", edit_view->GetText()); |
| 398 |
| 399 // Try ctrl-x to cut text -- should be disallowed. |
| 400 ASSERT_NO_FATAL_FAILURE(SendKeyForBrowser(popup, ui::VKEY_LEFT, true, true, |
| 401 false)); |
| 402 EXPECT_FALSE(edit_view->IsSelectAll()); |
| 403 ASSERT_NO_FATAL_FAILURE(SendKeyForBrowser(popup, ui::VKEY_X, true, false, |
| 404 false)); |
| 405 EXPECT_EQ(L"Hello world", edit_view->GetText()); |
| 406 |
| 407 #if !defined(OS_CHROMEOS) |
| 408 // Try alt-f4 to close the popup. |
| 409 ASSERT_TRUE(ui_test_utils::SendKeyPressAndWait( |
| 410 popup, ui::VKEY_F4, false, false, true, false, |
| 411 NotificationType::BROWSER_CLOSED, Source<Browser>(popup))); |
| 412 #endif |
| 413 } |
| 414 |
| 415 void BackspaceInKeywordModeTest() { |
| 416 ASSERT_TRUE(ui_test_utils::BringBrowserWindowToFront(browser())); |
| 417 |
| 418 ASSERT_NO_FATAL_FAILURE(SetupComponents()); |
| 419 browser()->FocusLocationBar(); |
| 420 |
| 421 AutocompleteEditView* edit_view = NULL; |
| 422 ASSERT_NO_FATAL_FAILURE(GetAutocompleteEditView(&edit_view)); |
| 423 |
| 424 // Trigger keyword hint mode. |
| 425 ASSERT_NO_FATAL_FAILURE(SendKeySequence(kSearchKeywordKeys)); |
| 426 ASSERT_TRUE(edit_view->model()->is_keyword_hint()); |
| 427 ASSERT_EQ(kSearchKeyword, WideToUTF8(edit_view->model()->keyword())); |
| 428 |
| 429 // Trigger keyword mode. |
| 430 ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_TAB, false, false, false)); |
| 431 ASSERT_FALSE(edit_view->model()->is_keyword_hint()); |
| 432 ASSERT_EQ(kSearchKeyword, WideToUTF8(edit_view->model()->keyword())); |
| 433 |
| 434 // Backspace without search text should bring back keyword hint mode. |
| 435 ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_BACK, false, false, false)); |
| 436 ASSERT_TRUE(edit_view->model()->is_keyword_hint()); |
| 437 ASSERT_EQ(kSearchKeyword, WideToUTF8(edit_view->model()->keyword())); |
| 438 |
| 439 // Trigger keyword mode again. |
| 440 ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_TAB, false, false, false)); |
| 441 ASSERT_FALSE(edit_view->model()->is_keyword_hint()); |
| 442 ASSERT_EQ(kSearchKeyword, WideToUTF8(edit_view->model()->keyword())); |
| 443 |
| 444 // Input something as search text. |
| 445 ASSERT_NO_FATAL_FAILURE(SendKeySequence(kSearchTextKeys)); |
| 446 |
| 447 // Should stay in keyword mode while deleting search text by pressing |
| 448 // backspace. |
| 449 for (size_t i = 0; i < arraysize(kSearchText) - 1; ++i) { |
| 450 ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_BACK, false, false, false)); |
| 451 ASSERT_FALSE(edit_view->model()->is_keyword_hint()); |
| 452 ASSERT_EQ(kSearchKeyword, WideToUTF8(edit_view->model()->keyword())); |
| 453 } |
| 454 |
| 455 // Input something as search text. |
| 456 ASSERT_NO_FATAL_FAILURE(SendKeySequence(kSearchTextKeys)); |
| 457 |
| 458 // Move cursor to the beginning of the search text. |
| 459 ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_HOME, false, false, false)); |
| 460 // Backspace at the beginning of the search text shall turn off |
| 461 // the keyword mode. |
| 462 ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_BACK, false, false, false)); |
| 463 ASSERT_FALSE(edit_view->model()->is_keyword_hint()); |
| 464 ASSERT_EQ(std::string(), WideToUTF8(edit_view->model()->keyword())); |
| 465 ASSERT_EQ(std::string(kSearchKeyword) + kSearchText, |
| 466 WideToUTF8(edit_view->GetText())); |
| 467 } |
| 468 |
| 469 void EscapeTest() { |
| 470 ASSERT_TRUE(ui_test_utils::BringBrowserWindowToFront(browser())); |
| 471 |
| 472 ASSERT_NO_FATAL_FAILURE(SetupComponents()); |
| 473 ui_test_utils::NavigateToURL(browser(), GURL(chrome::kChromeUIHistoryURL)); |
| 474 browser()->FocusLocationBar(); |
| 475 |
| 476 AutocompleteEditView* edit_view = NULL; |
| 477 ASSERT_NO_FATAL_FAILURE(GetAutocompleteEditView(&edit_view)); |
| 478 |
| 479 std::wstring old_text = edit_view->GetText(); |
| 480 EXPECT_FALSE(old_text.empty()); |
| 481 EXPECT_TRUE(edit_view->IsSelectAll()); |
| 482 |
| 483 // Delete all text in omnibox. |
| 484 ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_BACK, false, false, false)); |
| 485 EXPECT_TRUE(edit_view->GetText().empty()); |
| 486 |
| 487 // Escape shall revert the text in omnibox. |
| 488 ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_ESCAPE, false, false, false)); |
| 489 EXPECT_EQ(old_text, edit_view->GetText()); |
| 490 EXPECT_TRUE(edit_view->IsSelectAll()); |
| 491 } |
| 492 |
| 493 void DesiredTLDTest() { |
| 494 ASSERT_TRUE(ui_test_utils::BringBrowserWindowToFront(browser())); |
| 495 |
| 496 ASSERT_NO_FATAL_FAILURE(SetupComponents()); |
| 497 browser()->FocusLocationBar(); |
| 498 |
| 499 AutocompleteEditView* edit_view = NULL; |
| 500 ASSERT_NO_FATAL_FAILURE(GetAutocompleteEditView(&edit_view)); |
| 501 AutocompletePopupModel* popup_model = edit_view->model()->popup_model(); |
| 502 ASSERT_TRUE(popup_model); |
| 503 |
| 504 // Test ctrl-Enter. |
| 505 ASSERT_NO_FATAL_FAILURE(SendKeySequence(kDesiredTLDKeys)); |
| 506 ASSERT_NO_FATAL_FAILURE(WaitForAutocompleteControllerDone()); |
| 507 ASSERT_TRUE(popup_model->IsOpen()); |
| 508 // ctrl-Enter triggers desired_tld feature, thus www.bar.com shall |
| 509 // be opened. |
| 510 ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_RETURN, true, false, false)); |
| 511 |
| 512 GURL url = browser()->GetSelectedTabContents()->GetURL(); |
| 513 EXPECT_STREQ(kDesiredTLDHostname, url.host().c_str()); |
| 514 } |
| 515 |
| 516 void AltEnterTest() { |
| 517 ASSERT_TRUE(ui_test_utils::BringBrowserWindowToFront(browser())); |
| 518 |
| 519 ASSERT_NO_FATAL_FAILURE(SetupComponents()); |
| 520 browser()->FocusLocationBar(); |
| 521 |
| 522 AutocompleteEditView* edit_view = NULL; |
| 523 ASSERT_NO_FATAL_FAILURE(GetAutocompleteEditView(&edit_view)); |
| 524 |
| 525 edit_view->SetUserText(ASCIIToWide(chrome::kChromeUIHistoryURL)); |
| 526 int tab_count = browser()->tab_count(); |
| 527 // alt-Enter opens a new tab. |
| 528 ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_RETURN, false, false, true)); |
| 529 ASSERT_NO_FATAL_FAILURE(WaitForTabOpenOrClose(tab_count + 1)); |
| 530 } |
| 531 |
| 532 void EnterToSearchTest() { |
| 533 ASSERT_TRUE(ui_test_utils::BringBrowserWindowToFront(browser())); |
| 534 |
| 535 ASSERT_NO_FATAL_FAILURE(SetupHostResolver()); |
| 536 ASSERT_NO_FATAL_FAILURE(SetupSearchEngine()); |
| 537 browser()->FocusLocationBar(); |
| 538 |
| 539 AutocompleteEditView* edit_view = NULL; |
| 540 ASSERT_NO_FATAL_FAILURE(GetAutocompleteEditView(&edit_view)); |
| 541 AutocompletePopupModel* popup_model = edit_view->model()->popup_model(); |
| 542 ASSERT_TRUE(popup_model); |
| 543 |
| 544 // Test Enter to search. |
| 545 ASSERT_NO_FATAL_FAILURE(SendKeySequence(kSearchTextKeys)); |
| 546 ASSERT_NO_FATAL_FAILURE(WaitForAutocompleteControllerDone()); |
| 547 ASSERT_TRUE(popup_model->IsOpen()); |
| 548 |
| 549 // Check if the default match result is Search Primary Provider. |
| 550 ASSERT_EQ(AutocompleteMatch::SEARCH_WHAT_YOU_TYPED, |
| 551 popup_model->result().default_match()->type); |
| 552 |
| 553 // Open the default match. |
| 554 ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_RETURN, false, false, false)); |
| 555 GURL url = browser()->GetSelectedTabContents()->GetURL(); |
| 556 EXPECT_STREQ(kSearchTextURL, url.spec().c_str()); |
| 557 |
| 558 // Test that entering a single character then Enter performs a search. |
| 559 browser()->FocusLocationBar(); |
| 560 EXPECT_TRUE(edit_view->IsSelectAll()); |
| 561 ASSERT_NO_FATAL_FAILURE(SendKeySequence(kSearchSingleCharKeys)); |
| 562 ASSERT_NO_FATAL_FAILURE(WaitForAutocompleteControllerDone()); |
| 563 ASSERT_TRUE(popup_model->IsOpen()); |
| 564 EXPECT_EQ(kSearchSingleChar, WideToUTF8(edit_view->GetText())); |
| 565 |
| 566 // Check if the default match result is Search Primary Provider. |
| 567 ASSERT_EQ(AutocompleteMatch::SEARCH_WHAT_YOU_TYPED, |
| 568 popup_model->result().default_match()->type); |
| 569 |
| 570 // Open the default match. |
| 571 ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_RETURN, false, false, false)); |
| 572 url = browser()->GetSelectedTabContents()->GetURL(); |
| 573 EXPECT_STREQ(kSearchSingleCharURL, url.spec().c_str()); |
| 574 } |
| 575 |
| 576 void EnterToOpenHistoryPageTest() { |
| 577 ASSERT_TRUE(ui_test_utils::BringBrowserWindowToFront(browser())); |
| 578 |
| 579 ASSERT_NO_FATAL_FAILURE(SetupComponents()); |
| 580 browser()->FocusLocationBar(); |
| 581 |
| 582 AutocompleteEditView* edit_view = NULL; |
| 583 ASSERT_NO_FATAL_FAILURE(GetAutocompleteEditView(&edit_view)); |
| 584 AutocompletePopupModel* popup_model = edit_view->model()->popup_model(); |
| 585 ASSERT_TRUE(popup_model); |
| 586 |
| 587 ASSERT_NO_FATAL_FAILURE(SendKeySequence(kSearchTextKeys)); |
| 588 ASSERT_NO_FATAL_FAILURE(WaitForAutocompleteControllerDone()); |
| 589 ASSERT_TRUE(popup_model->IsOpen()); |
| 590 EXPECT_EQ(0U, popup_model->selected_line()); |
| 591 |
| 592 // Move to the history page item. |
| 593 size_t size = popup_model->result().size(); |
| 594 while (true) { |
| 595 if (popup_model->result().match_at(popup_model->selected_line()).type == |
| 596 AutocompleteMatch::OPEN_HISTORY_PAGE) |
| 597 break; |
| 598 size_t old_selected_line = popup_model->selected_line(); |
| 599 ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_DOWN, false, false, false)); |
| 600 ASSERT_EQ(old_selected_line + 1, popup_model->selected_line()); |
| 601 if (popup_model->selected_line() == size - 1) |
| 602 break; |
| 603 } |
| 604 |
| 605 // Make sure the history page item is selected. |
| 606 ASSERT_EQ( |
| 607 AutocompleteMatch::OPEN_HISTORY_PAGE, |
| 608 popup_model->result().match_at(popup_model->selected_line()).type); |
| 609 |
| 610 // Open the history page item. |
| 611 ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_RETURN, false, false, false)); |
| 612 GURL url = browser()->GetSelectedTabContents()->GetURL(); |
| 613 EXPECT_STREQ(kHistoryPageURL, url.spec().c_str()); |
| 614 } |
| 615 |
| 616 void EscapeToDefaultMatchTest() { |
| 617 ASSERT_TRUE(ui_test_utils::BringBrowserWindowToFront(browser())); |
| 618 |
| 619 ASSERT_NO_FATAL_FAILURE(SetupComponents()); |
| 620 browser()->FocusLocationBar(); |
| 621 |
| 622 AutocompleteEditView* edit_view = NULL; |
| 623 ASSERT_NO_FATAL_FAILURE(GetAutocompleteEditView(&edit_view)); |
| 624 AutocompletePopupModel* popup_model = edit_view->model()->popup_model(); |
| 625 ASSERT_TRUE(popup_model); |
| 626 |
| 627 // Input something to trigger inline autocomplete. |
| 628 ASSERT_NO_FATAL_FAILURE(SendKeySequence(kSearchTextKeys)); |
| 629 ASSERT_NO_FATAL_FAILURE(WaitForAutocompleteControllerDone()); |
| 630 ASSERT_TRUE(popup_model->IsOpen()); |
| 631 |
| 632 std::wstring old_text = edit_view->GetText(); |
| 633 |
| 634 // Make sure inline autocomplete is triggerred. |
| 635 EXPECT_GT(old_text.length(), arraysize(kSearchText) - 1); |
| 636 |
| 637 size_t old_selected_line = popup_model->selected_line(); |
| 638 EXPECT_EQ(0U, old_selected_line); |
| 639 |
| 640 // Move to another line with different text. |
| 641 size_t size = popup_model->result().size(); |
| 642 while (popup_model->selected_line() < size - 1) { |
| 643 ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_DOWN, false, false, false)); |
| 644 ASSERT_NE(old_selected_line, popup_model->selected_line()); |
| 645 if (old_text != edit_view->GetText()) |
| 646 break; |
| 647 } |
| 648 |
| 649 EXPECT_NE(old_text, edit_view->GetText()); |
| 650 |
| 651 // Escape shall revert back to the default match item. |
| 652 ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_ESCAPE, false, false, false)); |
| 653 EXPECT_EQ(old_text, edit_view->GetText()); |
| 654 EXPECT_EQ(old_selected_line, popup_model->selected_line()); |
| 655 } |
| 656 |
| 657 void BasicTextOperationsTest() { |
| 658 ASSERT_TRUE(ui_test_utils::BringBrowserWindowToFront(browser())); |
| 659 |
| 660 ASSERT_NO_FATAL_FAILURE(SetupComponents()); |
| 661 ui_test_utils::NavigateToURL(browser(), GURL(chrome::kAboutBlankURL)); |
| 662 browser()->FocusLocationBar(); |
| 663 |
| 664 AutocompleteEditView* edit_view = NULL; |
| 665 ASSERT_NO_FATAL_FAILURE(GetAutocompleteEditView(&edit_view)); |
| 666 |
| 667 std::wstring old_text = edit_view->GetText(); |
| 668 EXPECT_EQ(UTF8ToWide(chrome::kAboutBlankURL), old_text); |
| 669 EXPECT_TRUE(edit_view->IsSelectAll()); |
| 670 |
| 671 std::wstring::size_type start, end; |
| 672 edit_view->GetSelectionBounds(&start, &end); |
| 673 EXPECT_EQ(0U, start); |
| 674 EXPECT_EQ(old_text.size(), end); |
| 675 |
| 676 // Move the cursor to the end. |
| 677 ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_END, false, false, false)); |
| 678 EXPECT_FALSE(edit_view->IsSelectAll()); |
| 679 |
| 680 // Make sure the cursor is placed correctly. |
| 681 edit_view->GetSelectionBounds(&start, &end); |
| 682 EXPECT_EQ(old_text.size(), start); |
| 683 EXPECT_EQ(old_text.size(), end); |
| 684 |
| 685 // Insert one character at the end. Make sure we won't insert anything after |
| 686 // the special ZWS mark used in gtk implementation. |
| 687 ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_A, false, false, false)); |
| 688 EXPECT_EQ(old_text + L"a", edit_view->GetText()); |
| 689 |
| 690 // Delete one character from the end. Make sure we won't delete the special |
| 691 // ZWS mark used in gtk implementation. |
| 692 ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_BACK, false, false, false)); |
| 693 EXPECT_EQ(old_text, edit_view->GetText()); |
| 694 |
| 695 edit_view->SelectAll(true); |
| 696 EXPECT_TRUE(edit_view->IsSelectAll()); |
| 697 edit_view->GetSelectionBounds(&start, &end); |
| 698 EXPECT_EQ(0U, start); |
| 699 EXPECT_EQ(old_text.size(), end); |
| 700 |
| 701 // Delete the content |
| 702 ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_DELETE, false, false, false)); |
| 703 EXPECT_TRUE(edit_view->IsSelectAll()); |
| 704 edit_view->GetSelectionBounds(&start, &end); |
| 705 EXPECT_EQ(0U, start); |
| 706 EXPECT_EQ(0U, end); |
| 707 EXPECT_TRUE(edit_view->GetText().empty()); |
| 708 |
| 709 // Check if RevertAll() can set text and cursor correctly. |
| 710 edit_view->RevertAll(); |
| 711 EXPECT_FALSE(edit_view->IsSelectAll()); |
| 712 EXPECT_EQ(old_text, edit_view->GetText()); |
| 713 edit_view->GetSelectionBounds(&start, &end); |
| 714 EXPECT_EQ(old_text.size(), start); |
| 715 EXPECT_EQ(old_text.size(), end); |
| 716 } |
| 303 }; | 717 }; |
| 304 | 718 |
| 305 // Test if ctrl-* accelerators are workable in omnibox. | 719 // Test if ctrl-* accelerators are workable in omnibox. |
| 306 // See http://crbug.com/19193: omnibox blocks ctrl-* commands | 720 // See http://crbug.com/19193: omnibox blocks ctrl-* commands |
| 307 // | 721 // |
| 308 // Flaky on interactive tests (dbg), http://crbug.com/69433 | 722 // Flaky on interactive tests (dbg), http://crbug.com/69433 |
| 309 IN_PROC_BROWSER_TEST_F(AutocompleteEditViewTest, FLAKY_BrowserAccelerators) { | 723 IN_PROC_BROWSER_TEST_F(AutocompleteEditViewTest, FLAKY_BrowserAccelerators) { |
| 310 ASSERT_TRUE(ui_test_utils::BringBrowserWindowToFront(browser())); | 724 BrowserAcceleratorsTest(); |
| 311 | |
| 312 browser()->FocusLocationBar(); | |
| 313 AutocompleteEditView* edit_view = NULL; | |
| 314 ASSERT_NO_FATAL_FAILURE(GetAutocompleteEditView(&edit_view)); | |
| 315 | |
| 316 int tab_count = browser()->tab_count(); | |
| 317 | |
| 318 // Create a new Tab. | |
| 319 browser()->NewTab(); | |
| 320 ASSERT_NO_FATAL_FAILURE(WaitForTabOpenOrClose(tab_count + 1)); | |
| 321 | |
| 322 // Select the first Tab. | |
| 323 ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_1, true, false, false)); | |
| 324 ASSERT_EQ(0, browser()->selected_index()); | |
| 325 | |
| 326 browser()->FocusLocationBar(); | |
| 327 | |
| 328 // Select the second Tab. | |
| 329 ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_2, true, false, false)); | |
| 330 ASSERT_EQ(1, browser()->selected_index()); | |
| 331 | |
| 332 browser()->FocusLocationBar(); | |
| 333 | |
| 334 // Try ctrl-w to close a Tab. | |
| 335 ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_W, true, false, false)); | |
| 336 ASSERT_NO_FATAL_FAILURE(WaitForTabOpenOrClose(tab_count)); | |
| 337 | |
| 338 // Try ctrl-l to focus location bar. | |
| 339 edit_view->SetUserText(L"Hello world"); | |
| 340 EXPECT_FALSE(edit_view->IsSelectAll()); | |
| 341 ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_L, true, false, false)); | |
| 342 EXPECT_TRUE(edit_view->IsSelectAll()); | |
| 343 | |
| 344 // Try editing the location bar text. | |
| 345 ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_RIGHT, false, false, false)); | |
| 346 EXPECT_FALSE(edit_view->IsSelectAll()); | |
| 347 ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_S, false, false, false)); | |
| 348 EXPECT_EQ(L"Hello worlds", edit_view->GetText()); | |
| 349 | |
| 350 // Try ctrl-x to cut text. | |
| 351 ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_LEFT, true, true, false)); | |
| 352 EXPECT_FALSE(edit_view->IsSelectAll()); | |
| 353 ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_X, true, false, false)); | |
| 354 EXPECT_EQ(L"Hello ", edit_view->GetText()); | |
| 355 | |
| 356 #if !defined(OS_CHROMEOS) | |
| 357 // Try alt-f4 to close the browser. | |
| 358 ASSERT_TRUE(ui_test_utils::SendKeyPressAndWait( | |
| 359 browser(), ui::VKEY_F4, false, false, true, false, | |
| 360 NotificationType::BROWSER_CLOSED, Source<Browser>(browser()))); | |
| 361 #endif | |
| 362 } | 725 } |
| 363 | 726 |
| 364 // Flakily fails and times out on Win only. http://crbug.com/69941 | 727 // Flakily fails and times out on Win only. http://crbug.com/69941 |
| 365 #if defined(OS_WIN) | 728 #if defined(OS_WIN) |
| 366 #define MAYBE_PopupAccelerators DISABLED_PopupAccelerators | 729 #define MAYBE_PopupAccelerators DISABLED_PopupAccelerators |
| 367 #else | 730 #else |
| 368 #define MAYBE_PopupAccelerators PopupAccelerators | 731 #define MAYBE_PopupAccelerators PopupAccelerators |
| 369 #endif | 732 #endif |
| 370 | 733 |
| 371 IN_PROC_BROWSER_TEST_F(AutocompleteEditViewTest, MAYBE_PopupAccelerators) { | 734 IN_PROC_BROWSER_TEST_F(AutocompleteEditViewTest, MAYBE_PopupAccelerators) { |
| 372 ASSERT_TRUE(ui_test_utils::BringBrowserWindowToFront(browser())); | 735 PopupAcceleratorsTest(); |
| 373 | |
| 374 // Create a popup. | |
| 375 Browser* popup = CreateBrowserForPopup(browser()->profile()); | |
| 376 AutocompleteEditView* edit_view = NULL; | |
| 377 ASSERT_NO_FATAL_FAILURE(GetAutocompleteEditViewForBrowser(popup, &edit_view)); | |
| 378 popup->FocusLocationBar(); | |
| 379 EXPECT_TRUE(edit_view->IsSelectAll()); | |
| 380 | |
| 381 // Try ctrl-w to close the popup. | |
| 382 ASSERT_TRUE(ui_test_utils::SendKeyPressAndWait( | |
| 383 popup, ui::VKEY_W, true, false, false, false, | |
| 384 NotificationType::BROWSER_CLOSED, Source<Browser>(popup))); | |
| 385 | |
| 386 // Create another popup. | |
| 387 popup = CreateBrowserForPopup(browser()->profile()); | |
| 388 ASSERT_NO_FATAL_FAILURE(GetAutocompleteEditViewForBrowser(popup, &edit_view)); | |
| 389 | |
| 390 // Set the edit text to "Hello world". | |
| 391 edit_view->SetUserText(L"Hello world"); | |
| 392 EXPECT_FALSE(edit_view->IsSelectAll()); | |
| 393 popup->FocusLocationBar(); | |
| 394 EXPECT_TRUE(edit_view->IsSelectAll()); | |
| 395 | |
| 396 // Try editing the location bar text -- should be disallowed. | |
| 397 ASSERT_NO_FATAL_FAILURE(SendKeyForBrowser(popup, ui::VKEY_RIGHT, false, | |
| 398 false, false)); | |
| 399 EXPECT_FALSE(edit_view->IsSelectAll()); | |
| 400 ASSERT_NO_FATAL_FAILURE(SendKeyForBrowser(popup, ui::VKEY_S, false, false, | |
| 401 false)); | |
| 402 EXPECT_EQ(L"Hello world", edit_view->GetText()); | |
| 403 | |
| 404 // Try ctrl-x to cut text -- should be disallowed. | |
| 405 ASSERT_NO_FATAL_FAILURE(SendKeyForBrowser(popup, ui::VKEY_LEFT, true, true, | |
| 406 false)); | |
| 407 EXPECT_FALSE(edit_view->IsSelectAll()); | |
| 408 ASSERT_NO_FATAL_FAILURE(SendKeyForBrowser(popup, ui::VKEY_X, true, false, | |
| 409 false)); | |
| 410 EXPECT_EQ(L"Hello world", edit_view->GetText()); | |
| 411 | |
| 412 #if !defined(OS_CHROMEOS) | |
| 413 // Try alt-f4 to close the popup. | |
| 414 ASSERT_TRUE(ui_test_utils::SendKeyPressAndWait( | |
| 415 popup, ui::VKEY_F4, false, false, true, false, | |
| 416 NotificationType::BROWSER_CLOSED, Source<Browser>(popup))); | |
| 417 #endif | |
| 418 } | 736 } |
| 419 | 737 |
| 420 IN_PROC_BROWSER_TEST_F(AutocompleteEditViewTest, BackspaceInKeywordMode) { | 738 IN_PROC_BROWSER_TEST_F(AutocompleteEditViewTest, BackspaceInKeywordMode) { |
| 421 ASSERT_TRUE(ui_test_utils::BringBrowserWindowToFront(browser())); | 739 BackspaceInKeywordModeTest(); |
| 422 | |
| 423 ASSERT_NO_FATAL_FAILURE(SetupComponents()); | |
| 424 browser()->FocusLocationBar(); | |
| 425 | |
| 426 AutocompleteEditView* edit_view = NULL; | |
| 427 ASSERT_NO_FATAL_FAILURE(GetAutocompleteEditView(&edit_view)); | |
| 428 | |
| 429 // Trigger keyword hint mode. | |
| 430 ASSERT_NO_FATAL_FAILURE(SendKeySequence(kSearchKeywordKeys)); | |
| 431 ASSERT_TRUE(edit_view->model()->is_keyword_hint()); | |
| 432 ASSERT_EQ(kSearchKeyword, WideToUTF8(edit_view->model()->keyword())); | |
| 433 | |
| 434 // Trigger keyword mode. | |
| 435 ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_TAB, false, false, false)); | |
| 436 ASSERT_FALSE(edit_view->model()->is_keyword_hint()); | |
| 437 ASSERT_EQ(kSearchKeyword, WideToUTF8(edit_view->model()->keyword())); | |
| 438 | |
| 439 // Backspace without search text should bring back keyword hint mode. | |
| 440 ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_BACK, false, false, false)); | |
| 441 ASSERT_TRUE(edit_view->model()->is_keyword_hint()); | |
| 442 ASSERT_EQ(kSearchKeyword, WideToUTF8(edit_view->model()->keyword())); | |
| 443 | |
| 444 // Trigger keyword mode again. | |
| 445 ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_TAB, false, false, false)); | |
| 446 ASSERT_FALSE(edit_view->model()->is_keyword_hint()); | |
| 447 ASSERT_EQ(kSearchKeyword, WideToUTF8(edit_view->model()->keyword())); | |
| 448 | |
| 449 // Input something as search text. | |
| 450 ASSERT_NO_FATAL_FAILURE(SendKeySequence(kSearchTextKeys)); | |
| 451 | |
| 452 // Should stay in keyword mode while deleting search text by pressing | |
| 453 // backspace. | |
| 454 for (size_t i = 0; i < arraysize(kSearchText) - 1; ++i) { | |
| 455 ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_BACK, false, false, false)); | |
| 456 ASSERT_FALSE(edit_view->model()->is_keyword_hint()); | |
| 457 ASSERT_EQ(kSearchKeyword, WideToUTF8(edit_view->model()->keyword())); | |
| 458 } | |
| 459 | |
| 460 // Input something as search text. | |
| 461 ASSERT_NO_FATAL_FAILURE(SendKeySequence(kSearchTextKeys)); | |
| 462 | |
| 463 // Move cursor to the beginning of the search text. | |
| 464 ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_HOME, false, false, false)); | |
| 465 // Backspace at the beginning of the search text shall turn off | |
| 466 // the keyword mode. | |
| 467 ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_BACK, false, false, false)); | |
| 468 ASSERT_FALSE(edit_view->model()->is_keyword_hint()); | |
| 469 ASSERT_EQ(std::string(), WideToUTF8(edit_view->model()->keyword())); | |
| 470 ASSERT_EQ(std::string(kSearchKeyword) + kSearchText, | |
| 471 WideToUTF8(edit_view->GetText())); | |
| 472 } | 740 } |
| 473 | 741 |
| 474 IN_PROC_BROWSER_TEST_F(AutocompleteEditViewTest, Escape) { | 742 IN_PROC_BROWSER_TEST_F(AutocompleteEditViewTest, Escape) { |
| 475 ASSERT_TRUE(ui_test_utils::BringBrowserWindowToFront(browser())); | 743 EscapeTest(); |
| 476 | |
| 477 ASSERT_NO_FATAL_FAILURE(SetupComponents()); | |
| 478 ui_test_utils::NavigateToURL(browser(), GURL(chrome::kChromeUIHistoryURL)); | |
| 479 browser()->FocusLocationBar(); | |
| 480 | |
| 481 AutocompleteEditView* edit_view = NULL; | |
| 482 ASSERT_NO_FATAL_FAILURE(GetAutocompleteEditView(&edit_view)); | |
| 483 | |
| 484 std::wstring old_text = edit_view->GetText(); | |
| 485 EXPECT_FALSE(old_text.empty()); | |
| 486 EXPECT_TRUE(edit_view->IsSelectAll()); | |
| 487 | |
| 488 // Delete all text in omnibox. | |
| 489 ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_BACK, false, false, false)); | |
| 490 EXPECT_TRUE(edit_view->GetText().empty()); | |
| 491 | |
| 492 // Escape shall revert the text in omnibox. | |
| 493 ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_ESCAPE, false, false, false)); | |
| 494 EXPECT_EQ(old_text, edit_view->GetText()); | |
| 495 EXPECT_TRUE(edit_view->IsSelectAll()); | |
| 496 } | 744 } |
| 497 | 745 |
| 498 IN_PROC_BROWSER_TEST_F(AutocompleteEditViewTest, DesiredTLD) { | 746 IN_PROC_BROWSER_TEST_F(AutocompleteEditViewTest, DesiredTLD) { |
| 499 ASSERT_TRUE(ui_test_utils::BringBrowserWindowToFront(browser())); | 747 DesiredTLDTest(); |
| 500 | |
| 501 ASSERT_NO_FATAL_FAILURE(SetupComponents()); | |
| 502 browser()->FocusLocationBar(); | |
| 503 | |
| 504 AutocompleteEditView* edit_view = NULL; | |
| 505 ASSERT_NO_FATAL_FAILURE(GetAutocompleteEditView(&edit_view)); | |
| 506 AutocompletePopupModel* popup_model = edit_view->model()->popup_model(); | |
| 507 ASSERT_TRUE(popup_model); | |
| 508 | |
| 509 // Test ctrl-Enter. | |
| 510 ASSERT_NO_FATAL_FAILURE(SendKeySequence(kDesiredTLDKeys)); | |
| 511 ASSERT_NO_FATAL_FAILURE(WaitForAutocompleteControllerDone()); | |
| 512 ASSERT_TRUE(popup_model->IsOpen()); | |
| 513 // ctrl-Enter triggers desired_tld feature, thus www.bar.com shall be opened. | |
| 514 ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_RETURN, true, false, false)); | |
| 515 | |
| 516 GURL url = browser()->GetSelectedTabContents()->GetURL(); | |
| 517 EXPECT_STREQ(kDesiredTLDHostname, url.host().c_str()); | |
| 518 } | 748 } |
| 519 | 749 |
| 520 IN_PROC_BROWSER_TEST_F(AutocompleteEditViewTest, AltEnter) { | 750 IN_PROC_BROWSER_TEST_F(AutocompleteEditViewTest, AltEnter) { |
| 521 ASSERT_TRUE(ui_test_utils::BringBrowserWindowToFront(browser())); | 751 AltEnterTest(); |
| 522 | |
| 523 ASSERT_NO_FATAL_FAILURE(SetupComponents()); | |
| 524 browser()->FocusLocationBar(); | |
| 525 | |
| 526 AutocompleteEditView* edit_view = NULL; | |
| 527 ASSERT_NO_FATAL_FAILURE(GetAutocompleteEditView(&edit_view)); | |
| 528 | |
| 529 edit_view->SetUserText(ASCIIToWide(chrome::kChromeUIHistoryURL)); | |
| 530 int tab_count = browser()->tab_count(); | |
| 531 // alt-Enter opens a new tab. | |
| 532 ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_RETURN, false, false, true)); | |
| 533 ASSERT_NO_FATAL_FAILURE(WaitForTabOpenOrClose(tab_count + 1)); | |
| 534 } | 752 } |
| 535 | 753 |
| 536 IN_PROC_BROWSER_TEST_F(AutocompleteEditViewTest, EnterToSearch) { | 754 IN_PROC_BROWSER_TEST_F(AutocompleteEditViewTest, EnterToSearch) { |
| 537 ASSERT_TRUE(ui_test_utils::BringBrowserWindowToFront(browser())); | 755 EnterToSearchTest(); |
| 538 | |
| 539 ASSERT_NO_FATAL_FAILURE(SetupHostResolver()); | |
| 540 ASSERT_NO_FATAL_FAILURE(SetupSearchEngine()); | |
| 541 browser()->FocusLocationBar(); | |
| 542 | |
| 543 AutocompleteEditView* edit_view = NULL; | |
| 544 ASSERT_NO_FATAL_FAILURE(GetAutocompleteEditView(&edit_view)); | |
| 545 AutocompletePopupModel* popup_model = edit_view->model()->popup_model(); | |
| 546 ASSERT_TRUE(popup_model); | |
| 547 | |
| 548 // Test Enter to search. | |
| 549 ASSERT_NO_FATAL_FAILURE(SendKeySequence(kSearchTextKeys)); | |
| 550 ASSERT_NO_FATAL_FAILURE(WaitForAutocompleteControllerDone()); | |
| 551 ASSERT_TRUE(popup_model->IsOpen()); | |
| 552 | |
| 553 // Check if the default match result is Search Primary Provider. | |
| 554 ASSERT_EQ(AutocompleteMatch::SEARCH_WHAT_YOU_TYPED, | |
| 555 popup_model->result().default_match()->type); | |
| 556 | |
| 557 // Open the default match. | |
| 558 ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_RETURN, false, false, false)); | |
| 559 GURL url = browser()->GetSelectedTabContents()->GetURL(); | |
| 560 EXPECT_STREQ(kSearchTextURL, url.spec().c_str()); | |
| 561 | |
| 562 // Test that entering a single character then Enter performs a search. | |
| 563 browser()->FocusLocationBar(); | |
| 564 EXPECT_TRUE(edit_view->IsSelectAll()); | |
| 565 ASSERT_NO_FATAL_FAILURE(SendKeySequence(kSearchSingleCharKeys)); | |
| 566 ASSERT_NO_FATAL_FAILURE(WaitForAutocompleteControllerDone()); | |
| 567 ASSERT_TRUE(popup_model->IsOpen()); | |
| 568 EXPECT_EQ(kSearchSingleChar, WideToUTF8(edit_view->GetText())); | |
| 569 | |
| 570 // Check if the default match result is Search Primary Provider. | |
| 571 ASSERT_EQ(AutocompleteMatch::SEARCH_WHAT_YOU_TYPED, | |
| 572 popup_model->result().default_match()->type); | |
| 573 | |
| 574 // Open the default match. | |
| 575 ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_RETURN, false, false, false)); | |
| 576 url = browser()->GetSelectedTabContents()->GetURL(); | |
| 577 EXPECT_STREQ(kSearchSingleCharURL, url.spec().c_str()); | |
| 578 } | 756 } |
| 579 | 757 |
| 580 // See http://crbug.com/20934: Omnibox keyboard behavior wrong for | 758 // See http://crbug.com/20934: Omnibox keyboard behavior wrong for |
| 581 // "See recent pages in history" | 759 // "See recent pages in history" |
| 582 IN_PROC_BROWSER_TEST_F(AutocompleteEditViewTest, EnterToOpenHistoryPage) { | 760 IN_PROC_BROWSER_TEST_F(AutocompleteEditViewTest, EnterToOpenHistoryPage) { |
| 583 ASSERT_TRUE(ui_test_utils::BringBrowserWindowToFront(browser())); | 761 EnterToOpenHistoryPageTest(); |
| 584 | |
| 585 ASSERT_NO_FATAL_FAILURE(SetupComponents()); | |
| 586 browser()->FocusLocationBar(); | |
| 587 | |
| 588 AutocompleteEditView* edit_view = NULL; | |
| 589 ASSERT_NO_FATAL_FAILURE(GetAutocompleteEditView(&edit_view)); | |
| 590 AutocompletePopupModel* popup_model = edit_view->model()->popup_model(); | |
| 591 ASSERT_TRUE(popup_model); | |
| 592 | |
| 593 ASSERT_NO_FATAL_FAILURE(SendKeySequence(kSearchTextKeys)); | |
| 594 ASSERT_NO_FATAL_FAILURE(WaitForAutocompleteControllerDone()); | |
| 595 ASSERT_TRUE(popup_model->IsOpen()); | |
| 596 EXPECT_EQ(0U, popup_model->selected_line()); | |
| 597 | |
| 598 // Move to the history page item. | |
| 599 size_t size = popup_model->result().size(); | |
| 600 while (true) { | |
| 601 if (popup_model->result().match_at(popup_model->selected_line()).type == | |
| 602 AutocompleteMatch::OPEN_HISTORY_PAGE) | |
| 603 break; | |
| 604 size_t old_selected_line = popup_model->selected_line(); | |
| 605 ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_DOWN, false, false, false)); | |
| 606 ASSERT_EQ(old_selected_line + 1, popup_model->selected_line()); | |
| 607 if (popup_model->selected_line() == size - 1) | |
| 608 break; | |
| 609 } | |
| 610 | |
| 611 // Make sure the history page item is selected. | |
| 612 ASSERT_EQ(AutocompleteMatch::OPEN_HISTORY_PAGE, | |
| 613 popup_model->result().match_at(popup_model->selected_line()).type); | |
| 614 | |
| 615 // Open the history page item. | |
| 616 ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_RETURN, false, false, false)); | |
| 617 GURL url = browser()->GetSelectedTabContents()->GetURL(); | |
| 618 EXPECT_STREQ(kHistoryPageURL, url.spec().c_str()); | |
| 619 } | 762 } |
| 620 | 763 |
| 621 IN_PROC_BROWSER_TEST_F(AutocompleteEditViewTest, EscapeToDefaultMatch) { | 764 IN_PROC_BROWSER_TEST_F(AutocompleteEditViewTest, EscapeToDefaultMatch) { |
| 622 ASSERT_TRUE(ui_test_utils::BringBrowserWindowToFront(browser())); | 765 EscapeToDefaultMatchTest(); |
| 623 | |
| 624 ASSERT_NO_FATAL_FAILURE(SetupComponents()); | |
| 625 browser()->FocusLocationBar(); | |
| 626 | |
| 627 AutocompleteEditView* edit_view = NULL; | |
| 628 ASSERT_NO_FATAL_FAILURE(GetAutocompleteEditView(&edit_view)); | |
| 629 AutocompletePopupModel* popup_model = edit_view->model()->popup_model(); | |
| 630 ASSERT_TRUE(popup_model); | |
| 631 | |
| 632 // Input something to trigger inline autocomplete. | |
| 633 ASSERT_NO_FATAL_FAILURE(SendKeySequence(kSearchTextKeys)); | |
| 634 ASSERT_NO_FATAL_FAILURE(WaitForAutocompleteControllerDone()); | |
| 635 ASSERT_TRUE(popup_model->IsOpen()); | |
| 636 | |
| 637 std::wstring old_text = edit_view->GetText(); | |
| 638 | |
| 639 // Make sure inline autocomplete is triggerred. | |
| 640 EXPECT_GT(old_text.length(), arraysize(kSearchText) - 1); | |
| 641 | |
| 642 size_t old_selected_line = popup_model->selected_line(); | |
| 643 EXPECT_EQ(0U, old_selected_line); | |
| 644 | |
| 645 // Move to another line with different text. | |
| 646 size_t size = popup_model->result().size(); | |
| 647 while (popup_model->selected_line() < size - 1) { | |
| 648 ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_DOWN, false, false, false)); | |
| 649 ASSERT_NE(old_selected_line, popup_model->selected_line()); | |
| 650 if (old_text != edit_view->GetText()) | |
| 651 break; | |
| 652 } | |
| 653 | |
| 654 EXPECT_NE(old_text, edit_view->GetText()); | |
| 655 | |
| 656 // Escape shall revert back to the default match item. | |
| 657 ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_ESCAPE, false, false, false)); | |
| 658 EXPECT_EQ(old_text, edit_view->GetText()); | |
| 659 EXPECT_EQ(old_selected_line, popup_model->selected_line()); | |
| 660 } | 766 } |
| 661 | 767 |
| 662 IN_PROC_BROWSER_TEST_F(AutocompleteEditViewTest, BasicTextOperations) { | 768 IN_PROC_BROWSER_TEST_F(AutocompleteEditViewTest, BasicTextOperations) { |
| 663 ASSERT_TRUE(ui_test_utils::BringBrowserWindowToFront(browser())); | 769 BasicTextOperationsTest(); |
| 664 | |
| 665 ASSERT_NO_FATAL_FAILURE(SetupComponents()); | |
| 666 ui_test_utils::NavigateToURL(browser(), GURL(chrome::kAboutBlankURL)); | |
| 667 browser()->FocusLocationBar(); | |
| 668 | |
| 669 AutocompleteEditView* edit_view = NULL; | |
| 670 ASSERT_NO_FATAL_FAILURE(GetAutocompleteEditView(&edit_view)); | |
| 671 | |
| 672 std::wstring old_text = edit_view->GetText(); | |
| 673 EXPECT_EQ(UTF8ToWide(chrome::kAboutBlankURL), old_text); | |
| 674 EXPECT_TRUE(edit_view->IsSelectAll()); | |
| 675 | |
| 676 std::wstring::size_type start, end; | |
| 677 edit_view->GetSelectionBounds(&start, &end); | |
| 678 EXPECT_EQ(0U, start); | |
| 679 EXPECT_EQ(old_text.size(), end); | |
| 680 | |
| 681 // Move the cursor to the end. | |
| 682 ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_END, false, false, false)); | |
| 683 EXPECT_FALSE(edit_view->IsSelectAll()); | |
| 684 | |
| 685 // Make sure the cursor is placed correctly. | |
| 686 edit_view->GetSelectionBounds(&start, &end); | |
| 687 EXPECT_EQ(old_text.size(), start); | |
| 688 EXPECT_EQ(old_text.size(), end); | |
| 689 | |
| 690 // Insert one character at the end. Make sure we won't insert anything after | |
| 691 // the special ZWS mark used in gtk implementation. | |
| 692 ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_A, false, false, false)); | |
| 693 EXPECT_EQ(old_text + L"a", edit_view->GetText()); | |
| 694 | |
| 695 // Delete one character from the end. Make sure we won't delete the special | |
| 696 // ZWS mark used in gtk implementation. | |
| 697 ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_BACK, false, false, false)); | |
| 698 EXPECT_EQ(old_text, edit_view->GetText()); | |
| 699 | |
| 700 edit_view->SelectAll(true); | |
| 701 EXPECT_TRUE(edit_view->IsSelectAll()); | |
| 702 edit_view->GetSelectionBounds(&start, &end); | |
| 703 EXPECT_EQ(0U, start); | |
| 704 EXPECT_EQ(old_text.size(), end); | |
| 705 | |
| 706 // Delete the content | |
| 707 ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_DELETE, false, false, false)); | |
| 708 EXPECT_TRUE(edit_view->IsSelectAll()); | |
| 709 edit_view->GetSelectionBounds(&start, &end); | |
| 710 EXPECT_EQ(0U, start); | |
| 711 EXPECT_EQ(0U, end); | |
| 712 EXPECT_TRUE(edit_view->GetText().empty()); | |
| 713 | |
| 714 // Check if RevertAll() can set text and cursor correctly. | |
| 715 edit_view->RevertAll(); | |
| 716 EXPECT_FALSE(edit_view->IsSelectAll()); | |
| 717 EXPECT_EQ(old_text, edit_view->GetText()); | |
| 718 edit_view->GetSelectionBounds(&start, &end); | |
| 719 EXPECT_EQ(old_text.size(), start); | |
| 720 EXPECT_EQ(old_text.size(), end); | |
| 721 } | 770 } |
| 722 | 771 |
| 723 #if defined(OS_LINUX) | 772 #if defined(OS_LINUX) |
| 773 // TODO(oshima): enable these tests for views-implmentation when |
| 774 // these featuers are supported. |
| 775 |
| 724 IN_PROC_BROWSER_TEST_F(AutocompleteEditViewTest, UndoRedoLinux) { | 776 IN_PROC_BROWSER_TEST_F(AutocompleteEditViewTest, UndoRedoLinux) { |
| 725 ASSERT_TRUE(ui_test_utils::BringBrowserWindowToFront(browser())); | 777 ASSERT_TRUE(ui_test_utils::BringBrowserWindowToFront(browser())); |
| 726 | 778 |
| 727 ASSERT_NO_FATAL_FAILURE(SetupComponents()); | 779 ASSERT_NO_FATAL_FAILURE(SetupComponents()); |
| 728 ui_test_utils::NavigateToURL(browser(), GURL(chrome::kAboutBlankURL)); | 780 ui_test_utils::NavigateToURL(browser(), GURL(chrome::kAboutBlankURL)); |
| 729 browser()->FocusLocationBar(); | 781 browser()->FocusLocationBar(); |
| 730 | 782 |
| 731 AutocompleteEditView* edit_view = NULL; | 783 AutocompleteEditView* edit_view = NULL; |
| 732 ASSERT_NO_FATAL_FAILURE(GetAutocompleteEditView(&edit_view)); | 784 ASSERT_NO_FATAL_FAILURE(GetAutocompleteEditView(&edit_view)); |
| 733 | 785 |
| (...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 850 | 902 |
| 851 // Paste text. | 903 // Paste text. |
| 852 ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_V, true, false, false)); | 904 ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_V, true, false, false)); |
| 853 ASSERT_NO_FATAL_FAILURE(WaitForAutocompleteControllerDone()); | 905 ASSERT_NO_FATAL_FAILURE(WaitForAutocompleteControllerDone()); |
| 854 ASSERT_TRUE(popup_model->IsOpen()); | 906 ASSERT_TRUE(popup_model->IsOpen()); |
| 855 | 907 |
| 856 // Inline autocomplete shouldn't be triggered. | 908 // Inline autocomplete shouldn't be triggered. |
| 857 ASSERT_EQ(L"abc", edit_view->GetText()); | 909 ASSERT_EQ(L"abc", edit_view->GetText()); |
| 858 } | 910 } |
| 859 #endif | 911 #endif |
| 912 |
| 913 #if defined(TOOLKIT_VIEWS) |
| 914 class AutocompleteEditViewViewsTest : public AutocompleteEditViewTest { |
| 915 public: |
| 916 AutocompleteEditViewViewsTest() { |
| 917 views::NativeTextfieldViews::SetEnableTextfieldViews(true); |
| 918 } |
| 919 }; |
| 920 |
| 921 IN_PROC_BROWSER_TEST_F(AutocompleteEditViewViewsTest, |
| 922 FLAKY_BrowserAccelerators) { |
| 923 BrowserAcceleratorsTest(); |
| 924 } |
| 925 |
| 926 IN_PROC_BROWSER_TEST_F(AutocompleteEditViewViewsTest, MAYBE_PopupAccelerators) { |
| 927 PopupAcceleratorsTest(); |
| 928 } |
| 929 |
| 930 IN_PROC_BROWSER_TEST_F(AutocompleteEditViewViewsTest, BackspaceInKeywordMode) { |
| 931 BackspaceInKeywordModeTest(); |
| 932 } |
| 933 |
| 934 IN_PROC_BROWSER_TEST_F(AutocompleteEditViewViewsTest, Escape) { |
| 935 EscapeTest(); |
| 936 } |
| 937 |
| 938 IN_PROC_BROWSER_TEST_F(AutocompleteEditViewViewsTest, DesiredTLD) { |
| 939 DesiredTLDTest(); |
| 940 } |
| 941 |
| 942 IN_PROC_BROWSER_TEST_F(AutocompleteEditViewViewsTest, AltEnter) { |
| 943 AltEnterTest(); |
| 944 } |
| 945 |
| 946 IN_PROC_BROWSER_TEST_F(AutocompleteEditViewViewsTest, EnterToSearch) { |
| 947 EnterToSearchTest(); |
| 948 } |
| 949 |
| 950 IN_PROC_BROWSER_TEST_F(AutocompleteEditViewViewsTest, EnterToOpenHistoryPage) { |
| 951 EnterToOpenHistoryPageTest(); |
| 952 } |
| 953 |
| 954 IN_PROC_BROWSER_TEST_F(AutocompleteEditViewViewsTest, EscapeToDefaultMatch) { |
| 955 EscapeToDefaultMatchTest(); |
| 956 } |
| 957 |
| 958 IN_PROC_BROWSER_TEST_F(AutocompleteEditViewViewsTest, BasicTextOperations) { |
| 959 BasicTextOperationsTest(); |
| 960 } |
| 961 |
| 962 #endif |
| OLD | NEW |