OLD | NEW |
1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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 #import "chrome/browser/ui/cocoa/extensions/chooser_dialog_cocoa_controller.h" | 5 #import "chrome/browser/ui/cocoa/extensions/chooser_dialog_cocoa_controller.h" |
6 | 6 |
7 #import <Cocoa/Cocoa.h> | 7 #import <Cocoa/Cocoa.h> |
8 | 8 |
9 #include <memory> | 9 #include <memory> |
10 #include <vector> | 10 #include <vector> |
11 | 11 |
12 #include "base/strings/utf_string_conversions.h" | 12 #include "base/strings/utf_string_conversions.h" |
13 #include "chrome/browser/chooser_controller/mock_chooser_controller.h" | 13 #include "chrome/browser/chooser_controller/mock_chooser_controller.h" |
14 #import "chrome/browser/ui/cocoa/chooser_content_view_cocoa.h" | 14 #import "chrome/browser/ui/cocoa/chooser_content_view_cocoa.h" |
15 #import "chrome/browser/ui/cocoa/cocoa_profile_test.h" | 15 #import "chrome/browser/ui/cocoa/cocoa_profile_test.h" |
16 #include "chrome/browser/ui/cocoa/cocoa_test_helper.h" | 16 #include "chrome/browser/ui/cocoa/cocoa_test_helper.h" |
17 #import "chrome/browser/ui/cocoa/extensions/chooser_dialog_cocoa.h" | 17 #import "chrome/browser/ui/cocoa/extensions/chooser_dialog_cocoa.h" |
| 18 #include "chrome/browser/ui/cocoa/spinner_view.h" |
18 #include "testing/gmock/include/gmock/gmock.h" | 19 #include "testing/gmock/include/gmock/gmock.h" |
19 #include "testing/gtest/include/gtest/gtest.h" | 20 #include "testing/gtest/include/gtest/gtest.h" |
20 #include "testing/gtest_mac.h" | 21 #include "testing/gtest_mac.h" |
21 | 22 |
22 class ChooserDialogCocoaControllerTest : public CocoaProfileTest { | 23 class ChooserDialogCocoaControllerTest : public CocoaProfileTest { |
23 protected: | 24 protected: |
24 ChooserDialogCocoaControllerTest() {} | 25 ChooserDialogCocoaControllerTest() {} |
25 ~ChooserDialogCocoaControllerTest() override {} | 26 ~ChooserDialogCocoaControllerTest() override {} |
26 | 27 |
27 void SetUp() override { | 28 void SetUp() override { |
(...skipping 14 matching lines...) Expand all Loading... |
42 chooser_dialog_.reset( | 43 chooser_dialog_.reset( |
43 new ChooserDialogCocoa(web_contents, std::move(chooser_controller))); | 44 new ChooserDialogCocoa(web_contents, std::move(chooser_controller))); |
44 ASSERT_TRUE(chooser_dialog_); | 45 ASSERT_TRUE(chooser_dialog_); |
45 chooser_dialog_controller_ = | 46 chooser_dialog_controller_ = |
46 chooser_dialog_->chooser_dialog_cocoa_controller_.get(); | 47 chooser_dialog_->chooser_dialog_cocoa_controller_.get(); |
47 ASSERT_TRUE(chooser_dialog_controller_); | 48 ASSERT_TRUE(chooser_dialog_controller_); |
48 chooser_content_view_ = [chooser_dialog_controller_ chooserContentView]; | 49 chooser_content_view_ = [chooser_dialog_controller_ chooserContentView]; |
49 ASSERT_TRUE(chooser_content_view_); | 50 ASSERT_TRUE(chooser_content_view_); |
50 table_view_ = [chooser_content_view_ tableView]; | 51 table_view_ = [chooser_content_view_ tableView]; |
51 ASSERT_TRUE(table_view_); | 52 ASSERT_TRUE(table_view_); |
| 53 spinner_ = [chooser_content_view_ spinner]; |
| 54 ASSERT_TRUE(spinner_); |
| 55 status_ = [chooser_content_view_ status]; |
| 56 ASSERT_TRUE(status_); |
| 57 rescan_button_ = [chooser_content_view_ rescanButton]; |
| 58 ASSERT_TRUE(rescan_button_); |
52 connect_button_ = [chooser_content_view_ connectButton]; | 59 connect_button_ = [chooser_content_view_ connectButton]; |
53 ASSERT_TRUE(connect_button_); | 60 ASSERT_TRUE(connect_button_); |
54 cancel_button_ = [chooser_content_view_ cancelButton]; | 61 cancel_button_ = [chooser_content_view_ cancelButton]; |
55 ASSERT_TRUE(cancel_button_); | 62 ASSERT_TRUE(cancel_button_); |
56 help_button_ = [chooser_content_view_ helpButton]; | 63 help_button_ = [chooser_content_view_ helpButton]; |
57 ASSERT_TRUE(help_button_); | 64 ASSERT_TRUE(help_button_); |
58 } | 65 } |
59 | 66 |
60 std::unique_ptr<ChooserDialogCocoa> chooser_dialog_; | 67 std::unique_ptr<ChooserDialogCocoa> chooser_dialog_; |
61 | 68 |
62 MockChooserController* chooser_controller_; | 69 MockChooserController* chooser_controller_; |
63 ChooserDialogCocoaController* chooser_dialog_controller_; | 70 ChooserDialogCocoaController* chooser_dialog_controller_; |
64 ChooserContentViewCocoa* chooser_content_view_; | 71 ChooserContentViewCocoa* chooser_content_view_; |
65 NSTableView* table_view_; | 72 NSTableView* table_view_; |
| 73 SpinnerView* spinner_; |
| 74 NSTextField* status_; |
| 75 NSButton* rescan_button_; |
66 NSButton* connect_button_; | 76 NSButton* connect_button_; |
67 NSButton* cancel_button_; | 77 NSButton* cancel_button_; |
68 NSButton* help_button_; | 78 NSButton* help_button_; |
69 | 79 |
70 private: | 80 private: |
71 DISALLOW_COPY_AND_ASSIGN(ChooserDialogCocoaControllerTest); | 81 DISALLOW_COPY_AND_ASSIGN(ChooserDialogCocoaControllerTest); |
72 }; | 82 }; |
73 | 83 |
74 TEST_F(ChooserDialogCocoaControllerTest, InitialState) { | 84 TEST_F(ChooserDialogCocoaControllerTest, InitialState) { |
75 CreateChooserDialog(); | 85 CreateChooserDialog(); |
(...skipping 270 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
346 chooser_controller_->OptionAdded(base::ASCIIToUTF16("c")); | 356 chooser_controller_->OptionAdded(base::ASCIIToUTF16("c")); |
347 | 357 |
348 // Select option 0 and press "Cancel" button. | 358 // Select option 0 and press "Cancel" button. |
349 [table_view_ selectRowIndexes:[NSIndexSet indexSetWithIndex:0] | 359 [table_view_ selectRowIndexes:[NSIndexSet indexSetWithIndex:0] |
350 byExtendingSelection:NO]; | 360 byExtendingSelection:NO]; |
351 EXPECT_CALL(*chooser_controller_, Select(testing::_)).Times(0); | 361 EXPECT_CALL(*chooser_controller_, Select(testing::_)).Times(0); |
352 EXPECT_CALL(*chooser_controller_, Cancel()).Times(1); | 362 EXPECT_CALL(*chooser_controller_, Cancel()).Times(1); |
353 [cancel_button_ performClick:chooser_dialog_controller_]; | 363 [cancel_button_ performClick:chooser_dialog_controller_]; |
354 } | 364 } |
355 | 365 |
| 366 TEST_F(ChooserDialogCocoaControllerTest, AdapterOnAndOffAndOn) { |
| 367 CreateChooserDialog(); |
| 368 |
| 369 chooser_controller_->OnAdapterPresenceChanged( |
| 370 content::BluetoothChooser::AdapterPresence::POWERED_ON); |
| 371 EXPECT_FALSE(table_view_.hidden); |
| 372 // There is no option shown now. But since "No devices found." |
| 373 // needs to be displayed on the |table_view_|, the number of rows is 1. |
| 374 EXPECT_EQ(1, table_view_.numberOfRows); |
| 375 // |table_view_| should be disabled since there is no option shown. |
| 376 ASSERT_FALSE(table_view_.enabled); |
| 377 // No option selected. |
| 378 EXPECT_EQ(-1, table_view_.selectedRow); |
| 379 EXPECT_TRUE(spinner_.hidden); |
| 380 EXPECT_TRUE(status_.hidden); |
| 381 EXPECT_FALSE(rescan_button_.hidden); |
| 382 ASSERT_FALSE(connect_button_.enabled); |
| 383 ASSERT_TRUE(cancel_button_.enabled); |
| 384 |
| 385 // Add options |
| 386 chooser_controller_->OptionAdded(base::ASCIIToUTF16("a")); |
| 387 chooser_controller_->OptionAdded(base::ASCIIToUTF16("b")); |
| 388 chooser_controller_->OptionAdded(base::ASCIIToUTF16("c")); |
| 389 ASSERT_TRUE(table_view_.enabled); |
| 390 EXPECT_EQ(3, table_view_.numberOfRows); |
| 391 // Select option 1. |
| 392 [table_view_ selectRowIndexes:[NSIndexSet indexSetWithIndex:1] |
| 393 byExtendingSelection:NO]; |
| 394 EXPECT_EQ(1, table_view_.selectedRow); |
| 395 ASSERT_TRUE(connect_button_.enabled); |
| 396 ASSERT_TRUE(cancel_button_.enabled); |
| 397 |
| 398 chooser_controller_->OnAdapterPresenceChanged( |
| 399 content::BluetoothChooser::AdapterPresence::POWERED_OFF); |
| 400 EXPECT_FALSE(table_view_.hidden); |
| 401 // Since "Bluetooth turned off." needs to be displayed on the |table_view_|, |
| 402 // the number of rows is 1. |
| 403 EXPECT_EQ(1, table_view_.numberOfRows); |
| 404 // |table_view_| should be disabled since there is no option shown. |
| 405 EXPECT_FALSE(table_view_.enabled); |
| 406 // No option selected. |
| 407 EXPECT_EQ(-1, table_view_.selectedRow); |
| 408 EXPECT_TRUE(spinner_.hidden); |
| 409 EXPECT_TRUE(status_.hidden); |
| 410 EXPECT_TRUE(rescan_button_.hidden); |
| 411 // Since the adapter is turned off, the previously selected option |
| 412 // becomes invalid, the OK button is disabled. |
| 413 EXPECT_EQ(0u, chooser_controller_->NumOptions()); |
| 414 ASSERT_FALSE(connect_button_.enabled); |
| 415 ASSERT_TRUE(cancel_button_.enabled); |
| 416 |
| 417 chooser_controller_->OnAdapterPresenceChanged( |
| 418 content::BluetoothChooser::AdapterPresence::POWERED_ON); |
| 419 EXPECT_EQ(0u, chooser_controller_->NumOptions()); |
| 420 ASSERT_FALSE(connect_button_.enabled); |
| 421 ASSERT_TRUE(cancel_button_.enabled); |
| 422 } |
| 423 |
| 424 TEST_F(ChooserDialogCocoaControllerTest, DiscoveringAndIdle) { |
| 425 CreateChooserDialog(); |
| 426 |
| 427 // Add options |
| 428 chooser_controller_->OptionAdded(base::ASCIIToUTF16("a")); |
| 429 chooser_controller_->OptionAdded(base::ASCIIToUTF16("b")); |
| 430 chooser_controller_->OptionAdded(base::ASCIIToUTF16("c")); |
| 431 EXPECT_FALSE(table_view_.hidden); |
| 432 ASSERT_TRUE(table_view_.enabled); |
| 433 EXPECT_EQ(3, table_view_.numberOfRows); |
| 434 // Select option 1. |
| 435 [table_view_ selectRowIndexes:[NSIndexSet indexSetWithIndex:1] |
| 436 byExtendingSelection:NO]; |
| 437 EXPECT_EQ(1, table_view_.selectedRow); |
| 438 EXPECT_TRUE(spinner_.hidden); |
| 439 EXPECT_TRUE(status_.hidden); |
| 440 EXPECT_TRUE(rescan_button_.hidden); |
| 441 ASSERT_TRUE(connect_button_.enabled); |
| 442 ASSERT_TRUE(cancel_button_.enabled); |
| 443 |
| 444 chooser_controller_->OnDiscoveryStateChanged( |
| 445 content::BluetoothChooser::DiscoveryState::DISCOVERING); |
| 446 EXPECT_TRUE(table_view_.hidden); |
| 447 EXPECT_FALSE(spinner_.hidden); |
| 448 EXPECT_FALSE(status_.hidden); |
| 449 EXPECT_TRUE(rescan_button_.hidden); |
| 450 // OK button is disabled since the chooser is refreshing options. |
| 451 ASSERT_FALSE(connect_button_.enabled); |
| 452 ASSERT_TRUE(cancel_button_.enabled); |
| 453 |
| 454 chooser_controller_->OnDiscoveryStateChanged( |
| 455 content::BluetoothChooser::DiscoveryState::IDLE); |
| 456 EXPECT_FALSE(table_view_.hidden); |
| 457 // There is no option shown now. But since "No devices found." |
| 458 // needs to be displayed on the |table_view_|, the number of rows is 1. |
| 459 EXPECT_EQ(1, table_view_.numberOfRows); |
| 460 // |table_view_| should be disabled since there is no option shown. |
| 461 ASSERT_FALSE(table_view_.enabled); |
| 462 // No option selected. |
| 463 EXPECT_EQ(-1, table_view_.selectedRow); |
| 464 EXPECT_TRUE(spinner_.hidden); |
| 465 EXPECT_TRUE(status_.hidden); |
| 466 EXPECT_FALSE(rescan_button_.hidden); |
| 467 // OK button is disabled since the chooser refreshed options. |
| 468 ASSERT_FALSE(connect_button_.enabled); |
| 469 ASSERT_TRUE(cancel_button_.enabled); |
| 470 } |
| 471 |
| 472 TEST_F(ChooserDialogCocoaControllerTest, PressRescanButton) { |
| 473 CreateChooserDialog(); |
| 474 |
| 475 EXPECT_CALL(*chooser_controller_, RefreshOptions()).Times(1); |
| 476 [rescan_button_ performClick:chooser_dialog_controller_]; |
| 477 } |
| 478 |
356 TEST_F(ChooserDialogCocoaControllerTest, PressHelpButton) { | 479 TEST_F(ChooserDialogCocoaControllerTest, PressHelpButton) { |
357 CreateChooserDialog(); | 480 CreateChooserDialog(); |
358 | 481 |
359 chooser_controller_->OptionAdded(base::ASCIIToUTF16("a")); | 482 chooser_controller_->OptionAdded(base::ASCIIToUTF16("a")); |
360 chooser_controller_->OptionAdded(base::ASCIIToUTF16("b")); | 483 chooser_controller_->OptionAdded(base::ASCIIToUTF16("b")); |
361 chooser_controller_->OptionAdded(base::ASCIIToUTF16("c")); | 484 chooser_controller_->OptionAdded(base::ASCIIToUTF16("c")); |
362 | 485 |
363 // Select option 0 and press "Get help" button. | 486 // Select option 0 and press "Get help" button. |
364 [table_view_ selectRowIndexes:[NSIndexSet indexSetWithIndex:0] | 487 [table_view_ selectRowIndexes:[NSIndexSet indexSetWithIndex:0] |
365 byExtendingSelection:NO]; | 488 byExtendingSelection:NO]; |
366 EXPECT_CALL(*chooser_controller_, Select(testing::_)).Times(0); | 489 EXPECT_CALL(*chooser_controller_, Select(testing::_)).Times(0); |
367 EXPECT_CALL(*chooser_controller_, Cancel()).Times(0); | 490 EXPECT_CALL(*chooser_controller_, Cancel()).Times(0); |
368 EXPECT_CALL(*chooser_controller_, OpenHelpCenterUrl()).Times(1); | 491 EXPECT_CALL(*chooser_controller_, OpenHelpCenterUrl()).Times(1); |
369 [help_button_ performClick:chooser_dialog_controller_]; | 492 [help_button_ performClick:chooser_dialog_controller_]; |
370 } | 493 } |
OLD | NEW |