Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(407)

Side by Side Diff: chrome_frame/test/ui_test.cc

Issue 3656002: Rewrite text field context menu tests using accessiblity framework.... (Closed) Base URL: http://src.chromium.org/svn/trunk/src/
Patch Set: '' Created 10 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « chrome_frame/test/data/context_menu.html ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 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 <mshtmcid.h> 5 #include <mshtmcid.h>
6 #include <string> 6 #include <string>
7 7
8 #include "base/scoped_variant_win.h"
8 #include "base/test/test_file_util.h" 9 #include "base/test/test_file_util.h"
9 #include "base/utf_string_conversions.h" 10 #include "base/utf_string_conversions.h"
10 #include "base/win/scoped_bstr.h" 11 #include "base/win/scoped_bstr.h"
11 #include "base/win/scoped_variant.h" 12 #include "base/win/scoped_variant.h"
12 #include "base/win/windows_version.h" 13 #include "base/win/windows_version.h"
13 #include "chrome/common/url_constants.h" 14 #include "chrome/common/url_constants.h"
14 #include "chrome_frame/test/chrome_frame_test_utils.h" 15 #include "chrome_frame/test/chrome_frame_test_utils.h"
15 #include "chrome_frame/test/chrome_frame_ui_test_utils.h" 16 #include "chrome_frame/test/chrome_frame_ui_test_utils.h"
16 #include "chrome_frame/test/mock_ie_event_sink_actions.h" 17 #include "chrome_frame/test/mock_ie_event_sink_actions.h"
17 #include "chrome_frame/test/mock_ie_event_sink_test.h" 18 #include "chrome_frame/test/mock_ie_event_sink_test.h"
(...skipping 326 matching lines...) Expand 10 before | Expand all | Expand 10 after
344 EXPECT_CALL(ie_mock_, OnLoad(_, StrEq(GetSimplePageUrl()))) 345 EXPECT_CALL(ie_mock_, OnLoad(_, StrEq(GetSimplePageUrl())))
345 .WillOnce(CloseBrowserMock(&ie_mock_)); 346 .WillOnce(CloseBrowserMock(&ie_mock_));
346 347
347 LaunchIEAndNavigate(GetSimplePageUrl()); 348 LaunchIEAndNavigate(GetSimplePageUrl());
348 } 349 }
349 350
350 // Test fixture for tests related to the context menu UI. Since the context 351 // Test fixture for tests related to the context menu UI. Since the context
351 // menus for CF and IE are different, these tests are not parameterized. 352 // menus for CF and IE are different, these tests are not parameterized.
352 class ContextMenuTest : public MockIEEventSinkTest, public testing::Test { 353 class ContextMenuTest : public MockIEEventSinkTest, public testing::Test {
353 public: 354 public:
354 ContextMenuTest() {} 355 ContextMenuTest(): kTextFieldInitValue(L"SomeInitializedTextValue") {}
355 356
356 virtual void SetUp() { 357 virtual void SetUp() {
358 context_menu_page_url = GetTestUrl(L"context_menu.html");
359 // Clear clipboard to make sure there is no effect from previous tests.
360 SetClipboardText(L"");
357 // These are UI-related tests, so we do not care about the exact 361 // These are UI-related tests, so we do not care about the exact
358 // navigations that occur. 362 // navigations that occur.
359 ie_mock_.ExpectAnyNavigations(); 363 ie_mock_.ExpectAnyNavigations();
360 EXPECT_CALL(ie_mock_, OnLoad(_, _)).Times(testing::AnyNumber()); 364 EXPECT_CALL(ie_mock_, OnLoad(_, _)).Times(testing::AnyNumber());
361 EXPECT_CALL(acc_observer_, OnAccDocLoad(_)).Times(testing::AnyNumber()); 365 EXPECT_CALL(acc_observer_, OnAccDocLoad(_)).Times(testing::AnyNumber());
362 } 366 }
363 367
364 // Common helper function for "Save xxx As" tests. 368 // Common helper function for "Save xxx As" tests.
365 void DoSaveAsTest(const wchar_t* role, const wchar_t* menu_item_name, 369 void DoSaveAsTest(const wchar_t* role, const wchar_t* menu_item_name,
366 const wchar_t* file_ext) { 370 const wchar_t* file_ext) {
(...skipping 24 matching lines...) Expand all
391 AccDoDefaultAction(AccObjectMatcher(L"Save", L"push button")))); 395 AccDoDefaultAction(AccObjectMatcher(L"Save", L"push button"))));
392 396
393 EXPECT_CALL(win_observer_mock, OnWindowClose(_)) 397 EXPECT_CALL(win_observer_mock, OnWindowClose(_))
394 .WillOnce(CloseWhenFileSaved(&ie_mock_, temp_file_path, 5000)); 398 .WillOnce(CloseWhenFileSaved(&ie_mock_, temp_file_path, 5000));
395 399
396 LaunchIEAndNavigate(GetTestUrl(L"save_as_context_menu.html")); 400 LaunchIEAndNavigate(GetTestUrl(L"save_as_context_menu.html"));
397 ASSERT_TRUE(file_util::DieFileDie(temp_file_path, false)); 401 ASSERT_TRUE(file_util::DieFileDie(temp_file_path, false));
398 } 402 }
399 403
400 protected: 404 protected:
405 // Html page that holds a text field for context menu testing.
406 std::wstring context_menu_page_url;
407 // This is the text value used to test cut/copy/paste etc.
408 const std::wstring kTextFieldInitValue;
409
401 testing::NiceMock<MockAccEventObserver> acc_observer_; 410 testing::NiceMock<MockAccEventObserver> acc_observer_;
402 }; 411 };
403 412
404 // Test reloading from the context menu. 413 // Test reloading from the context menu.
405 TEST_F(ContextMenuTest, CFReload) { 414 TEST_F(ContextMenuTest, CFReload) {
406 server_mock_.ExpectAndServeAnyRequests(CFInvocation::MetaTag()); 415 server_mock_.ExpectAndServeAnyRequests(CFInvocation::MetaTag());
407 InSequence expect_in_sequence_for_scope; 416 InSequence expect_in_sequence_for_scope;
408 417
409 EXPECT_CALL(acc_observer_, OnAccDocLoad(_)) 418 EXPECT_CALL(acc_observer_, OnAccDocLoad(_))
410 .WillOnce(OpenContextMenuAsync()); 419 .WillOnce(OpenContextMenuAsync());
(...skipping 229 matching lines...) Expand 10 before | Expand all | Expand 10 after
640 OpenContextMenuAsync())); 649 OpenContextMenuAsync()));
641 EXPECT_CALL(acc_observer_, OnMenuPopup(_)) 650 EXPECT_CALL(acc_observer_, OnMenuPopup(_))
642 .WillOnce(AccLeftClick(AccObjectMatcher(L"Forward"))); 651 .WillOnce(AccLeftClick(AccObjectMatcher(L"Forward")));
643 652
644 EXPECT_CALL(ie_mock_, OnLoad(IN_IE, StrEq(page2))) 653 EXPECT_CALL(ie_mock_, OnLoad(IN_IE, StrEq(page2)))
645 .WillOnce(CloseBrowserMock(&ie_mock_)); 654 .WillOnce(CloseBrowserMock(&ie_mock_));
646 655
647 LaunchIEAndNavigate(page1); 656 LaunchIEAndNavigate(page1);
648 } 657 }
649 658
659 // Test CF link context menu - Open link in new window.
660 TEST_F(ContextMenuTest, CFOpenLinkInNewWindow) {
661 server_mock_.ExpectAndServeAnyRequests(CFInvocation::MetaTag());
662 MockIEEventSink new_window_mock;
663 new_window_mock.ExpectAnyNavigations();
664
665 // Invoke 'Open link in new window' context menu item.
666 EXPECT_CALL(acc_observer_, OnAccDocLoad(_))
667 .WillOnce(AccRightClick(AccObjectMatcher(L"", L"link")))
668 .WillOnce(testing::Return());
669 EXPECT_CALL(acc_observer_, OnMenuPopup(_))
670 .WillOnce(AccLeftClick(AccObjectMatcher(L"Open link in new window*")));
671
672 ie_mock_.ExpectNewWindow(&new_window_mock);
673 EXPECT_CALL(new_window_mock, OnLoad(IN_CF, StrEq(GetSimplePageUrl())))
674 .WillOnce(CloseBrowserMock(&new_window_mock));
675 EXPECT_CALL(new_window_mock, OnQuit())
676 .WillOnce(CloseBrowserMock(&ie_mock_));
677
678 LaunchIEAndNavigate(GetLinkPageUrl());
679 }
680
681 // Test CF link context menu - Copy link address.
682 TEST_F(ContextMenuTest, CFCopyLinkAddress) {
683 server_mock_.ExpectAndServeAnyRequests(CFInvocation::MetaTag());
684
685 // Invoke 'Copy link address' context menu item.
686 EXPECT_CALL(acc_observer_, OnAccDocLoad(_))
687 .WillOnce(AccRightClick(AccObjectMatcher(L"", L"link")));
688 EXPECT_CALL(acc_observer_, OnMenuPopup(_))
689 .WillOnce(testing::DoAll(
690 AccLeftClick(AccObjectMatcher(L"Copy link address*")),
691 CloseBrowserMock(&ie_mock_)));
692
693 LaunchIEAndNavigate(GetLinkPageUrl());
694
695 EXPECT_STREQ(GetSimplePageUrl().c_str(), GetClipboardText().c_str());
696 }
697
698 // Test CF text field context menu - cut.
699 TEST_F(ContextMenuTest, CFTxtFieldCut) {
700 server_mock_.ExpectAndServeAnyRequests(CFInvocation::MetaTag());
amit 2010/11/09 23:45:27 There's a lot of common code between the following
mdu 2010/11/10 01:21:16 To do this we have to split ContextMenuTest into t
701 AccObjectMatcher txtfield_matcher(L"", L"editable text");
702
703 // Invoke "Cut" context menu item of text field.
704 EXPECT_CALL(acc_observer_, OnAccDocLoad(_))
705 .WillOnce(testing::DoAll(
706 AccRightClick(txtfield_matcher),
707 AccWatchForOneValueChange(&acc_observer_, txtfield_matcher)));
708 EXPECT_CALL(acc_observer_, OnMenuPopup(_))
709 .WillOnce(AccLeftClick(AccObjectMatcher(L"Cut*")));
710
711 // Verify that text field is empty after cut operation.
712 EXPECT_CALL(acc_observer_, OnAccValueChange(_, _, StrEq(L"")))
713 .WillOnce(CloseBrowserMock(&ie_mock_));
714
715 LaunchIEAndNavigate(context_menu_page_url);
716 // Verify that the text value has been cut to clipboard.
717 EXPECT_STREQ(kTextFieldInitValue.c_str(), GetClipboardText().c_str());
718 }
719
720 // Test CF text field context menu - copy.
721 TEST_F(ContextMenuTest, CFTxtFieldCopy) {
722 server_mock_.ExpectAndServeAnyRequests(CFInvocation::MetaTag());
723 AccObjectMatcher txtfield_matcher(L"", L"editable text");
724
725 // Invoke "Copy" context menu item of text field.
726 EXPECT_CALL(acc_observer_, OnAccDocLoad(_))
727 .WillOnce(testing::DoAll(
728 AccRightClick(txtfield_matcher),
729 AccWatchForOneValueChange(&acc_observer_, txtfield_matcher)));
730 EXPECT_CALL(acc_observer_, OnMenuPopup(_))
731 .WillOnce(testing::DoAll(
732 AccLeftClick(AccObjectMatcher(L"Copy*")),
733 CloseBrowserMock(&ie_mock_)));
734
735 // Verify that there is no change on text field value after copy operation.
736 EXPECT_CALL(acc_observer_, OnAccValueChange(_, _, _))
737 .Times(testing::AtMost(0));
738
739 LaunchIEAndNavigate(context_menu_page_url);
740 // Verify that the text value has been copied to clipboard.
741 EXPECT_STREQ(kTextFieldInitValue.c_str(), GetClipboardText().c_str());
742 }
743
744 // Test CF text field context menu - paste.
745 TEST_F(ContextMenuTest, CFTxtFieldPaste) {
746 server_mock_.ExpectAndServeAnyRequests(CFInvocation::MetaTag());
747 AccObjectMatcher txtfield_matcher(L"", L"editable text");
748
749 // Invoke "Paste" context menu item of text field.
750 EXPECT_CALL(acc_observer_, OnAccDocLoad(_))
751 .WillOnce(testing::DoAll(
752 AccRightClick(txtfield_matcher),
753 AccWatchForOneValueChange(&acc_observer_, txtfield_matcher)));
754 EXPECT_CALL(acc_observer_, OnMenuPopup(_))
755 .WillOnce(AccLeftClick(AccObjectMatcher(L"Paste*")));
756 // Verify that value has been pasted to text field.
757 EXPECT_CALL(acc_observer_, OnAccValueChange(_, _, StrEq(kTextFieldInitValue)))
758 .WillOnce(CloseBrowserMock(&ie_mock_));
759
760 // Set some text value to clipboard, this is to emulate the 'copy' action.
761 SetClipboardText(kTextFieldInitValue);
762
763 LaunchIEAndNavigate(context_menu_page_url);
764 }
765
766 // Test CF text field context menu - delete.
767 TEST_F(ContextMenuTest, CFTxtFieldDelete) {
768 server_mock_.ExpectAndServeAnyRequests(CFInvocation::MetaTag());
769 AccObjectMatcher txtfield_matcher(L"", L"editable text");
770
771 // Invoke 'Delete' context menu item of text field.
772 EXPECT_CALL(acc_observer_, OnAccDocLoad(_))
773 .WillOnce(testing::DoAll(
774 AccRightClick(txtfield_matcher),
775 AccWatchForOneValueChange(&acc_observer_, txtfield_matcher)));
776 EXPECT_CALL(acc_observer_, OnMenuPopup(_))
777 .WillOnce(AccLeftClick(AccObjectMatcher(L"Delete*")));
778 // Verify that value has been deleted from text field.
779 EXPECT_CALL(acc_observer_, OnAccValueChange(_, _, StrEq(L"")))
780 .WillOnce(CloseBrowserMock(&ie_mock_));
781
782 LaunchIEAndNavigate(context_menu_page_url);
783 }
784
785 // Test CF text field context menu - select all.
786 TEST_F(ContextMenuTest, CFTxtFieldSelectAll) {
787 server_mock_.ExpectAndServeAnyRequests(CFInvocation::MetaTag());
788
789 // Invoke 'Select all' context menu item of text field.
790 EXPECT_CALL(acc_observer_, OnAccDocLoad(_))
791 .WillOnce(AccRightClick(AccObjectMatcher(L"", L"editable text")));
792 EXPECT_CALL(acc_observer_, OnMenuPopup(_))
793 .WillOnce(testing::DoAll(
794 AccLeftClick(AccObjectMatcher(L"Select all*")),
795 PostMessageToCF(&ie_mock_, L"selectall")));
796 // Client side script verifies that the text field value has been selected,
797 // then send 'OK' message.
798 EXPECT_CALL(ie_mock_, OnMessage(testing::StrCaseEq(L"OK"), _, _))
799 .WillOnce(CloseBrowserMock(&ie_mock_));
800
801 LaunchIEAndNavigate(context_menu_page_url + L"?action=selectall");
802 }
803
804 // Test CF text field context menu - undo.
805 TEST_F(ContextMenuTest, CFTxtFieldUndo) {
806 server_mock_.ExpectAndServeAnyRequests(CFInvocation::MetaTag());
807 AccObjectMatcher txtfield_matcher(L"", L"editable text");
808
809 // Change the value of text field to 'A', then invoke 'Undo' context menu item
810 // of text field.
811 EXPECT_CALL(acc_observer_, OnAccDocLoad(_))
812 .WillOnce(testing::DoAll(
813 AccSendCharMessage(txtfield_matcher, L'A'),
814 AccRightClick(txtfield_matcher)));
815 EXPECT_CALL(acc_observer_, OnMenuPopup(_))
816 .WillOnce(testing::DoAll(
817 AccWatchForOneValueChange(&acc_observer_, txtfield_matcher),
818 AccLeftClick(AccObjectMatcher(L"Undo*"))));
819
820 // Verify that value has been reset to initial value after undo operation.
821 EXPECT_CALL(acc_observer_, OnAccValueChange(_, _, StrEq(kTextFieldInitValue)))
822 .WillOnce(CloseBrowserMock(&ie_mock_));
823
824 LaunchIEAndNavigate(context_menu_page_url);
825 }
826
827 // Test CF text field context menu - redo.
828 TEST_F(ContextMenuTest, CFTxtFieldRedo) {
829 server_mock_.ExpectAndServeAnyRequests(CFInvocation::MetaTag());
830 AccObjectMatcher txtfield_matcher(L"", L"editable text");
831 InSequence expect_in_sequence_for_scope;
832
833 // Change text field value to 'A', then undo it.
834 EXPECT_CALL(acc_observer_, OnAccDocLoad(_))
835 .WillOnce(testing::DoAll(
836 AccSendCharMessage(txtfield_matcher, L'A'),
837 AccRightClick(txtfield_matcher)));
838 EXPECT_CALL(acc_observer_, OnMenuPopup(_))
839 .WillOnce(testing::DoAll(
840 AccWatchForOneValueChange(&acc_observer_, txtfield_matcher),
841 AccLeftClick(AccObjectMatcher(L"Undo*"))));
842
843 // After undo operation is done, invoke 'Redo' context menu item.
844 EXPECT_CALL(acc_observer_, OnAccValueChange(_, _, StrEq(kTextFieldInitValue)))
845 .WillOnce(testing::DoAll(
846 AccRightClick(txtfield_matcher),
847 AccWatchForOneValueChange(&acc_observer_, txtfield_matcher)));
848 EXPECT_CALL(acc_observer_, OnMenuPopup(_))
849 .WillOnce(AccLeftClick(AccObjectMatcher(L"Redo*")));
850
851 // After redo operation is done, verify that text field value is reset to its
852 // changed value 'A'.
853 EXPECT_CALL(acc_observer_, OnAccValueChange(_, _, StrEq(L"A")))
854 .WillOnce(CloseBrowserMock(&ie_mock_));
855
856 LaunchIEAndNavigate(context_menu_page_url);
857 }
858
650 } // namespace chrome_frame_test 859 } // namespace chrome_frame_test
OLDNEW
« no previous file with comments | « chrome_frame/test/data/context_menu.html ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698