| Index: chrome/browser/ui/cocoa/extensions/chooser_dialog_cocoa_controller_unittest.mm | 
| diff --git a/chrome/browser/ui/cocoa/extensions/chooser_dialog_cocoa_controller_unittest.mm b/chrome/browser/ui/cocoa/extensions/chooser_dialog_cocoa_controller_unittest.mm | 
| index 0255362f488bb5922532aa7e3c2c7edad1f797bb..683a74413f45cc3848727bb718a28a1a18961db9 100644 | 
| --- a/chrome/browser/ui/cocoa/extensions/chooser_dialog_cocoa_controller_unittest.mm | 
| +++ b/chrome/browser/ui/cocoa/extensions/chooser_dialog_cocoa_controller_unittest.mm | 
| @@ -22,6 +22,11 @@ | 
| #include "testing/gtest_mac.h" | 
| #include "ui/base/l10n/l10n_util_mac.h" | 
| #include "ui/base/resource/resource_bundle.h" | 
| +#include "ui/gfx/color_palette.h" | 
| +#include "ui/gfx/image/image.h" | 
| +#include "ui/gfx/image/image_unittest_util.h" | 
| +#include "ui/gfx/paint_vector_icon.h" | 
| +#include "ui/gfx/vector_icons_public.h" | 
| #include "ui/resources/grit/ui_resources.h" | 
|  | 
| namespace { | 
| @@ -53,7 +58,7 @@ class ChooserDialogCocoaControllerTest : public CocoaProfileTest { | 
| std::unique_ptr<MockChooserController> chooser_controller( | 
| new MockChooserController(web_contents->GetMainFrame())); | 
| ASSERT_TRUE(chooser_controller); | 
| -    chooser_controller_ = chooser_controller.get(); | 
| +    mock_chooser_controller_ = chooser_controller.get(); | 
| chooser_dialog_.reset( | 
| new ChooserDialogCocoa(web_contents, std::move(chooser_controller))); | 
| ASSERT_TRUE(chooser_dialog_); | 
| @@ -78,21 +83,31 @@ class ChooserDialogCocoaControllerTest : public CocoaProfileTest { | 
| ASSERT_TRUE(help_button_); | 
| } | 
|  | 
| +  void ExpectNoRowImage(int row) { | 
| +    ASSERT_FALSE( | 
| +        [chooser_content_view_ tableRowViewImage:static_cast<NSInteger>(row)]); | 
| +  } | 
| + | 
| void ExpectSignalStrengthLevelImageIs(int row, | 
| int expected_signal_strength_level) { | 
| NSImageView* image_view = | 
| [chooser_content_view_ tableRowViewImage:static_cast<NSInteger>(row)]; | 
| +    ASSERT_TRUE(image_view); | 
| +    EXPECT_NSEQ( | 
| +        rb_.GetNativeImageNamed( | 
| +               kSignalStrengthLevelImageIds[expected_signal_strength_level]) | 
| +            .ToNSImage(), | 
| +        [image_view image]); | 
| +  } | 
|  | 
| -    if (expected_signal_strength_level == -1) { | 
| -      ASSERT_FALSE(image_view); | 
| -    } else { | 
| -      ASSERT_TRUE(image_view); | 
| -      EXPECT_NSEQ( | 
| -          rb_.GetNativeImageNamed( | 
| -                 kSignalStrengthLevelImageIds[expected_signal_strength_level]) | 
| -              .ToNSImage(), | 
| -          [image_view image]); | 
| -    } | 
| +  void ExpectRowImageIsConnectedImage(int row) { | 
| +    NSImageView* image_view = | 
| +        [chooser_content_view_ tableRowViewImage:static_cast<NSInteger>(row)]; | 
| +    ASSERT_TRUE(image_view); | 
| +    EXPECT_TRUE(gfx::test::AreImagesEqual( | 
| +        gfx::Image(gfx::CreateVectorIcon(gfx::VectorIconId::BLUETOOTH_CONNECTED, | 
| +                                         gfx::kChromeIconGrey)), | 
| +        gfx::Image([[image_view image] copy]))); | 
| } | 
|  | 
| void ExpectRowTextIs(int row, NSString* expected_text) { | 
| @@ -101,11 +116,23 @@ class ChooserDialogCocoaControllerTest : public CocoaProfileTest { | 
| tableRowViewText:static_cast<NSInteger>(row)] stringValue]); | 
| } | 
|  | 
| +  bool IsRowPaired(int row) { | 
| +    NSTextField* paired_status = [chooser_content_view_ | 
| +        tableRowViewPairedStatus:static_cast<NSInteger>(row)]; | 
| +    if (paired_status) { | 
| +      EXPECT_NSEQ(l10n_util::GetNSString(IDS_DEVICE_CHOOSER_PAIRED_STATUS_TEXT), | 
| +                  [paired_status stringValue]); | 
| +      return true; | 
| +    } else { | 
| +      return false; | 
| +    } | 
| +  } | 
| + | 
| ui::ResourceBundle& rb_; | 
|  | 
| std::unique_ptr<ChooserDialogCocoa> chooser_dialog_; | 
|  | 
| -  MockChooserController* chooser_controller_; | 
| +  MockChooserController* mock_chooser_controller_; | 
| ChooserDialogCocoaController* chooser_dialog_controller_; | 
| ChooserContentViewCocoa* chooser_content_view_; | 
| NSTableView* table_view_; | 
| @@ -127,483 +154,584 @@ TEST_F(ChooserDialogCocoaControllerTest, InitialState) { | 
| // the number of rows is 1. | 
| EXPECT_EQ(1, table_view_.numberOfRows); | 
| EXPECT_EQ(1, table_view_.numberOfColumns); | 
| -  // No signal strength level image shown. | 
| -  ExpectSignalStrengthLevelImageIs(0, MockChooserController::kNoImage); | 
| +  // No image shown. | 
| +  ExpectNoRowImage(0); | 
| ExpectRowTextIs( | 
| 0, l10n_util::GetNSString(IDS_DEVICE_CHOOSER_NO_DEVICES_FOUND_PROMPT)); | 
| +  EXPECT_FALSE(IsRowPaired(0)); | 
| // |table_view_| should be disabled since there is no option shown. | 
| -  ASSERT_FALSE(table_view_.enabled); | 
| +  EXPECT_FALSE(table_view_.enabled); | 
| // No option selected. | 
| EXPECT_EQ(-1, table_view_.selectedRow); | 
| // |connect_button_| should be disabled since no option selected. | 
| -  ASSERT_FALSE(connect_button_.enabled); | 
| -  ASSERT_TRUE(cancel_button_.enabled); | 
| -  ASSERT_TRUE(help_button_.enabled); | 
| +  EXPECT_FALSE(connect_button_.enabled); | 
| +  EXPECT_TRUE(cancel_button_.enabled); | 
| +  EXPECT_TRUE(help_button_.enabled); | 
| } | 
|  | 
| TEST_F(ChooserDialogCocoaControllerTest, AddOption) { | 
| CreateChooserDialog(); | 
|  | 
| -  chooser_controller_->OptionAdded(base::ASCIIToUTF16("a"), | 
| -                                   MockChooserController::kNoImage); | 
| +  mock_chooser_controller_->OptionAdded( | 
| +      base::ASCIIToUTF16("a"), | 
| +      MockChooserController::kNoSignalStrengthLevelImage, | 
| +      MockChooserController::ConnectedPairedStatus::CONNECTED | | 
| +          MockChooserController::ConnectedPairedStatus::PAIRED); | 
| EXPECT_EQ(1, table_view_.numberOfRows); | 
| EXPECT_EQ(1, table_view_.numberOfColumns); | 
| // |table_view_| should be enabled since there is an option. | 
| -  ASSERT_TRUE(table_view_.enabled); | 
| +  EXPECT_TRUE(table_view_.enabled); | 
| EXPECT_EQ(-1, table_view_.selectedRow); | 
| -  ExpectSignalStrengthLevelImageIs(0, MockChooserController::kNoImage); | 
| +  ExpectRowImageIsConnectedImage(0); | 
| ExpectRowTextIs(0, @"a"); | 
| -  ASSERT_FALSE(connect_button_.enabled); | 
| -  ASSERT_TRUE(cancel_button_.enabled); | 
| -  ASSERT_TRUE(help_button_.enabled); | 
| - | 
| -  chooser_controller_->OptionAdded( | 
| -      base::ASCIIToUTF16("b"), MockChooserController::kSignalStrengthLevel0Bar); | 
| +  EXPECT_TRUE(IsRowPaired(0)); | 
| +  EXPECT_FALSE(connect_button_.enabled); | 
| +  EXPECT_TRUE(cancel_button_.enabled); | 
| +  EXPECT_TRUE(help_button_.enabled); | 
| + | 
| +  mock_chooser_controller_->OptionAdded( | 
| +      base::ASCIIToUTF16("b"), MockChooserController::kSignalStrengthLevel0Bar, | 
| +      MockChooserController::ConnectedPairedStatus::NONE); | 
| EXPECT_EQ(2, table_view_.numberOfRows); | 
| EXPECT_EQ(1, table_view_.numberOfColumns); | 
| -  ASSERT_TRUE(table_view_.enabled); | 
| +  EXPECT_TRUE(table_view_.enabled); | 
| EXPECT_EQ(-1, table_view_.selectedRow); | 
| ExpectSignalStrengthLevelImageIs( | 
| 1, MockChooserController::kSignalStrengthLevel0Bar); | 
| ExpectRowTextIs(1, @"b"); | 
| +  EXPECT_FALSE(IsRowPaired(1)); | 
|  | 
| -  chooser_controller_->OptionAdded( | 
| -      base::ASCIIToUTF16("c"), MockChooserController::kSignalStrengthLevel1Bar); | 
| +  mock_chooser_controller_->OptionAdded( | 
| +      base::ASCIIToUTF16("c"), MockChooserController::kSignalStrengthLevel1Bar, | 
| +      MockChooserController::ConnectedPairedStatus::NONE); | 
| EXPECT_EQ(3, table_view_.numberOfRows); | 
| EXPECT_EQ(1, table_view_.numberOfColumns); | 
| -  ASSERT_TRUE(table_view_.enabled); | 
| +  EXPECT_TRUE(table_view_.enabled); | 
| EXPECT_EQ(-1, table_view_.selectedRow); | 
| ExpectSignalStrengthLevelImageIs( | 
| 2, MockChooserController::kSignalStrengthLevel1Bar); | 
| ExpectRowTextIs(2, @"c"); | 
| +  EXPECT_FALSE(IsRowPaired(2)); | 
|  | 
| -  chooser_controller_->OptionAdded( | 
| -      base::ASCIIToUTF16("d"), MockChooserController::kSignalStrengthLevel2Bar); | 
| +  mock_chooser_controller_->OptionAdded( | 
| +      base::ASCIIToUTF16("d"), MockChooserController::kSignalStrengthLevel2Bar, | 
| +      MockChooserController::ConnectedPairedStatus::NONE); | 
| ExpectSignalStrengthLevelImageIs( | 
| 3, MockChooserController::kSignalStrengthLevel2Bar); | 
| ExpectRowTextIs(3, @"d"); | 
| +  EXPECT_FALSE(IsRowPaired(3)); | 
|  | 
| -  chooser_controller_->OptionAdded( | 
| -      base::ASCIIToUTF16("e"), MockChooserController::kSignalStrengthLevel3Bar); | 
| +  mock_chooser_controller_->OptionAdded( | 
| +      base::ASCIIToUTF16("e"), MockChooserController::kSignalStrengthLevel3Bar, | 
| +      MockChooserController::ConnectedPairedStatus::NONE); | 
| ExpectSignalStrengthLevelImageIs( | 
| 4, MockChooserController::kSignalStrengthLevel3Bar); | 
| ExpectRowTextIs(4, @"e"); | 
| +  EXPECT_FALSE(IsRowPaired(4)); | 
|  | 
| -  chooser_controller_->OptionAdded( | 
| -      base::ASCIIToUTF16("f"), MockChooserController::kSignalStrengthLevel4Bar); | 
| +  mock_chooser_controller_->OptionAdded( | 
| +      base::ASCIIToUTF16("f"), MockChooserController::kSignalStrengthLevel4Bar, | 
| +      MockChooserController::ConnectedPairedStatus::NONE); | 
| ExpectSignalStrengthLevelImageIs( | 
| 5, MockChooserController::kSignalStrengthLevel4Bar); | 
| ExpectRowTextIs(5, @"f"); | 
| +  EXPECT_FALSE(IsRowPaired(5)); | 
| } | 
|  | 
| TEST_F(ChooserDialogCocoaControllerTest, RemoveOption) { | 
| CreateChooserDialog(); | 
|  | 
| -  chooser_controller_->OptionAdded(base::ASCIIToUTF16("a"), | 
| -                                   MockChooserController::kNoImage); | 
| -  chooser_controller_->OptionAdded( | 
| -      base::ASCIIToUTF16("b"), MockChooserController::kSignalStrengthLevel0Bar); | 
| -  chooser_controller_->OptionAdded( | 
| -      base::ASCIIToUTF16("c"), MockChooserController::kSignalStrengthLevel1Bar); | 
| - | 
| -  chooser_controller_->OptionRemoved(base::ASCIIToUTF16("b")); | 
| +  mock_chooser_controller_->OptionAdded( | 
| +      base::ASCIIToUTF16("a"), | 
| +      MockChooserController::kNoSignalStrengthLevelImage, | 
| +      MockChooserController::ConnectedPairedStatus::CONNECTED | | 
| +          MockChooserController::ConnectedPairedStatus::PAIRED); | 
| +  mock_chooser_controller_->OptionAdded( | 
| +      base::ASCIIToUTF16("b"), MockChooserController::kSignalStrengthLevel0Bar, | 
| +      MockChooserController::ConnectedPairedStatus::NONE); | 
| +  mock_chooser_controller_->OptionAdded( | 
| +      base::ASCIIToUTF16("c"), MockChooserController::kSignalStrengthLevel1Bar, | 
| +      MockChooserController::ConnectedPairedStatus::NONE); | 
| + | 
| +  mock_chooser_controller_->OptionRemoved(base::ASCIIToUTF16("b")); | 
| EXPECT_EQ(2, table_view_.numberOfRows); | 
| EXPECT_EQ(1, table_view_.numberOfColumns); | 
| -  ASSERT_TRUE(table_view_.enabled); | 
| +  EXPECT_TRUE(table_view_.enabled); | 
| EXPECT_EQ(-1, table_view_.selectedRow); | 
| -  ExpectSignalStrengthLevelImageIs(0, MockChooserController::kNoImage); | 
| +  ExpectRowImageIsConnectedImage(0); | 
| ExpectRowTextIs(0, @"a"); | 
| +  EXPECT_TRUE(IsRowPaired(0)); | 
| ExpectSignalStrengthLevelImageIs( | 
| 1, MockChooserController::kSignalStrengthLevel1Bar); | 
| ExpectRowTextIs(1, @"c"); | 
| +  EXPECT_FALSE(IsRowPaired(1)); | 
|  | 
| // Remove a non-existent option, the number of rows should not change. | 
| -  chooser_controller_->OptionRemoved(base::ASCIIToUTF16("non-existent")); | 
| +  mock_chooser_controller_->OptionRemoved(base::ASCIIToUTF16("non-existent")); | 
| EXPECT_EQ(2, table_view_.numberOfRows); | 
| EXPECT_EQ(1, table_view_.numberOfColumns); | 
| -  ASSERT_TRUE(table_view_.enabled); | 
| +  EXPECT_TRUE(table_view_.enabled); | 
| EXPECT_EQ(-1, table_view_.selectedRow); | 
| ExpectRowTextIs(0, @"a"); | 
| ExpectRowTextIs(1, @"c"); | 
|  | 
| -  chooser_controller_->OptionRemoved(base::ASCIIToUTF16("c")); | 
| +  mock_chooser_controller_->OptionRemoved(base::ASCIIToUTF16("c")); | 
| EXPECT_EQ(1, table_view_.numberOfRows); | 
| EXPECT_EQ(1, table_view_.numberOfColumns); | 
| -  ASSERT_TRUE(table_view_.enabled); | 
| +  EXPECT_TRUE(table_view_.enabled); | 
| EXPECT_EQ(-1, table_view_.selectedRow); | 
| ExpectRowTextIs(0, @"a"); | 
|  | 
| -  chooser_controller_->OptionRemoved(base::ASCIIToUTF16("a")); | 
| +  mock_chooser_controller_->OptionRemoved(base::ASCIIToUTF16("a")); | 
| // There is no option shown now. But since "No devices found." | 
| // needs to be displayed on the |table_view_|, the number of rows is 1. | 
| EXPECT_EQ(1, table_view_.numberOfRows); | 
| EXPECT_EQ(1, table_view_.numberOfColumns); | 
| // |table_view_| should be disabled since all options are removed. | 
| -  ASSERT_FALSE(table_view_.enabled); | 
| +  EXPECT_FALSE(table_view_.enabled); | 
| EXPECT_EQ(-1, table_view_.selectedRow); | 
| -  ExpectSignalStrengthLevelImageIs(0, MockChooserController::kNoImage); | 
| +  ExpectNoRowImage(0); | 
| ExpectRowTextIs( | 
| 0, l10n_util::GetNSString(IDS_DEVICE_CHOOSER_NO_DEVICES_FOUND_PROMPT)); | 
| +  EXPECT_FALSE(IsRowPaired(0)); | 
| } | 
|  | 
| TEST_F(ChooserDialogCocoaControllerTest, UpdateOption) { | 
| CreateChooserDialog(); | 
|  | 
| -  chooser_controller_->OptionAdded(base::ASCIIToUTF16("a"), | 
| -                                   MockChooserController::kNoImage); | 
| -  chooser_controller_->OptionAdded( | 
| -      base::ASCIIToUTF16("b"), MockChooserController::kSignalStrengthLevel0Bar); | 
| -  chooser_controller_->OptionAdded( | 
| -      base::ASCIIToUTF16("c"), MockChooserController::kSignalStrengthLevel1Bar); | 
| - | 
| -  chooser_controller_->OptionUpdated( | 
| +  mock_chooser_controller_->OptionAdded( | 
| +      base::ASCIIToUTF16("a"), | 
| +      MockChooserController::kNoSignalStrengthLevelImage, | 
| +      MockChooserController::ConnectedPairedStatus::CONNECTED | | 
| +          MockChooserController::ConnectedPairedStatus::PAIRED); | 
| +  mock_chooser_controller_->OptionAdded( | 
| +      base::ASCIIToUTF16("b"), MockChooserController::kSignalStrengthLevel0Bar, | 
| +      MockChooserController::ConnectedPairedStatus::NONE); | 
| +  mock_chooser_controller_->OptionAdded( | 
| +      base::ASCIIToUTF16("c"), MockChooserController::kSignalStrengthLevel1Bar, | 
| +      MockChooserController::ConnectedPairedStatus::NONE); | 
| + | 
| +  mock_chooser_controller_->OptionUpdated( | 
| base::ASCIIToUTF16("b"), base::ASCIIToUTF16("d"), | 
| -      MockChooserController::kSignalStrengthLevel2Bar); | 
| +      MockChooserController::kNoSignalStrengthLevelImage, | 
| +      MockChooserController::ConnectedPairedStatus::CONNECTED | | 
| +          MockChooserController::ConnectedPairedStatus::PAIRED); | 
|  | 
| EXPECT_EQ(3, table_view_.numberOfRows); | 
| EXPECT_EQ(1, table_view_.numberOfColumns); | 
| -  ASSERT_TRUE(table_view_.enabled); | 
| +  EXPECT_TRUE(table_view_.enabled); | 
| EXPECT_EQ(-1, table_view_.selectedRow); | 
| -  ExpectSignalStrengthLevelImageIs(0, MockChooserController::kNoImage); | 
| +  ExpectRowImageIsConnectedImage(0); | 
| ExpectRowTextIs(0, @"a"); | 
| -  ExpectSignalStrengthLevelImageIs( | 
| -      1, MockChooserController::kSignalStrengthLevel2Bar); | 
| +  EXPECT_TRUE(IsRowPaired(0)); | 
| +  ExpectRowImageIsConnectedImage(1); | 
| ExpectRowTextIs(1, @"d"); | 
| +  EXPECT_TRUE(IsRowPaired(1)); | 
| ExpectSignalStrengthLevelImageIs( | 
| 2, MockChooserController::kSignalStrengthLevel1Bar); | 
| ExpectRowTextIs(2, @"c"); | 
| +  EXPECT_FALSE(IsRowPaired(2)); | 
| } | 
|  | 
| TEST_F(ChooserDialogCocoaControllerTest, AddAndRemoveOption) { | 
| CreateChooserDialog(); | 
|  | 
| -  chooser_controller_->OptionAdded(base::ASCIIToUTF16("a"), | 
| -                                   MockChooserController::kNoImage); | 
| +  mock_chooser_controller_->OptionAdded( | 
| +      base::ASCIIToUTF16("a"), | 
| +      MockChooserController::kNoSignalStrengthLevelImage, | 
| +      MockChooserController::ConnectedPairedStatus::CONNECTED | | 
| +          MockChooserController::ConnectedPairedStatus::PAIRED); | 
| EXPECT_EQ(1, table_view_.numberOfRows); | 
| -  chooser_controller_->OptionAdded( | 
| -      base::ASCIIToUTF16("b"), MockChooserController::kSignalStrengthLevel0Bar); | 
| +  mock_chooser_controller_->OptionAdded( | 
| +      base::ASCIIToUTF16("b"), MockChooserController::kSignalStrengthLevel0Bar, | 
| +      MockChooserController::ConnectedPairedStatus::NONE); | 
| EXPECT_EQ(2, table_view_.numberOfRows); | 
| -  chooser_controller_->OptionRemoved(base::ASCIIToUTF16("b")); | 
| +  mock_chooser_controller_->OptionRemoved(base::ASCIIToUTF16("b")); | 
| EXPECT_EQ(1, table_view_.numberOfRows); | 
| -  chooser_controller_->OptionAdded( | 
| -      base::ASCIIToUTF16("c"), MockChooserController::kSignalStrengthLevel1Bar); | 
| +  mock_chooser_controller_->OptionAdded( | 
| +      base::ASCIIToUTF16("c"), MockChooserController::kSignalStrengthLevel1Bar, | 
| +      MockChooserController::ConnectedPairedStatus::NONE); | 
| EXPECT_EQ(2, table_view_.numberOfRows); | 
| -  chooser_controller_->OptionAdded( | 
| -      base::ASCIIToUTF16("d"), MockChooserController::kSignalStrengthLevel2Bar); | 
| +  mock_chooser_controller_->OptionAdded( | 
| +      base::ASCIIToUTF16("d"), MockChooserController::kSignalStrengthLevel2Bar, | 
| +      MockChooserController::ConnectedPairedStatus::NONE); | 
| EXPECT_EQ(3, table_view_.numberOfRows); | 
| -  chooser_controller_->OptionRemoved(base::ASCIIToUTF16("d")); | 
| +  mock_chooser_controller_->OptionRemoved(base::ASCIIToUTF16("d")); | 
| EXPECT_EQ(2, table_view_.numberOfRows); | 
| -  chooser_controller_->OptionRemoved(base::ASCIIToUTF16("c")); | 
| +  mock_chooser_controller_->OptionRemoved(base::ASCIIToUTF16("c")); | 
| EXPECT_EQ(1, table_view_.numberOfRows); | 
| } | 
|  | 
| TEST_F(ChooserDialogCocoaControllerTest, UpdateAndRemoveTheUpdatedOption) { | 
| CreateChooserDialog(); | 
|  | 
| -  chooser_controller_->OptionAdded(base::ASCIIToUTF16("a"), | 
| -                                   MockChooserController::kNoImage); | 
| -  chooser_controller_->OptionAdded( | 
| -      base::ASCIIToUTF16("b"), MockChooserController::kSignalStrengthLevel0Bar); | 
| -  chooser_controller_->OptionAdded( | 
| -      base::ASCIIToUTF16("c"), MockChooserController::kSignalStrengthLevel1Bar); | 
| - | 
| -  chooser_controller_->OptionUpdated( | 
| +  mock_chooser_controller_->OptionAdded( | 
| +      base::ASCIIToUTF16("a"), | 
| +      MockChooserController::kNoSignalStrengthLevelImage, | 
| +      MockChooserController::ConnectedPairedStatus::CONNECTED | | 
| +          MockChooserController::ConnectedPairedStatus::PAIRED); | 
| +  mock_chooser_controller_->OptionAdded( | 
| +      base::ASCIIToUTF16("b"), MockChooserController::kSignalStrengthLevel0Bar, | 
| +      MockChooserController::ConnectedPairedStatus::NONE); | 
| +  mock_chooser_controller_->OptionAdded( | 
| +      base::ASCIIToUTF16("c"), MockChooserController::kSignalStrengthLevel1Bar, | 
| +      MockChooserController::ConnectedPairedStatus::NONE); | 
| + | 
| +  mock_chooser_controller_->OptionUpdated( | 
| base::ASCIIToUTF16("b"), base::ASCIIToUTF16("d"), | 
| -      MockChooserController::kSignalStrengthLevel2Bar); | 
| +      MockChooserController::kNoSignalStrengthLevelImage, | 
| +      MockChooserController::ConnectedPairedStatus::CONNECTED | | 
| +          MockChooserController::ConnectedPairedStatus::PAIRED); | 
|  | 
| -  chooser_controller_->OptionRemoved(base::ASCIIToUTF16("d")); | 
| +  mock_chooser_controller_->OptionRemoved(base::ASCIIToUTF16("d")); | 
|  | 
| EXPECT_EQ(2, table_view_.numberOfRows); | 
| EXPECT_EQ(1, table_view_.numberOfColumns); | 
| -  ASSERT_TRUE(table_view_.enabled); | 
| +  EXPECT_TRUE(table_view_.enabled); | 
| EXPECT_EQ(-1, table_view_.selectedRow); | 
| -  ExpectSignalStrengthLevelImageIs(0, MockChooserController::kNoImage); | 
| +  ExpectRowImageIsConnectedImage(0); | 
| ExpectRowTextIs(0, @"a"); | 
| +  EXPECT_TRUE(IsRowPaired(0)); | 
| ExpectSignalStrengthLevelImageIs( | 
| 1, MockChooserController::kSignalStrengthLevel1Bar); | 
| ExpectRowTextIs(1, @"c"); | 
| +  EXPECT_FALSE(IsRowPaired(1)); | 
| } | 
|  | 
| TEST_F(ChooserDialogCocoaControllerTest, SelectAndDeselectAnOption) { | 
| CreateChooserDialog(); | 
|  | 
| -  chooser_controller_->OptionAdded(base::ASCIIToUTF16("a"), | 
| -                                   MockChooserController::kNoImage); | 
| -  chooser_controller_->OptionAdded( | 
| -      base::ASCIIToUTF16("b"), MockChooserController::kSignalStrengthLevel0Bar); | 
| -  chooser_controller_->OptionAdded( | 
| -      base::ASCIIToUTF16("c"), MockChooserController::kSignalStrengthLevel1Bar); | 
| +  mock_chooser_controller_->OptionAdded( | 
| +      base::ASCIIToUTF16("a"), | 
| +      MockChooserController::kNoSignalStrengthLevelImage, | 
| +      MockChooserController::ConnectedPairedStatus::CONNECTED | | 
| +          MockChooserController::ConnectedPairedStatus::PAIRED); | 
| +  mock_chooser_controller_->OptionAdded( | 
| +      base::ASCIIToUTF16("b"), MockChooserController::kSignalStrengthLevel0Bar, | 
| +      MockChooserController::ConnectedPairedStatus::NONE); | 
| +  mock_chooser_controller_->OptionAdded( | 
| +      base::ASCIIToUTF16("c"), MockChooserController::kSignalStrengthLevel1Bar, | 
| +      MockChooserController::ConnectedPairedStatus::NONE); | 
|  | 
| // Select option 0. | 
| [table_view_ selectRowIndexes:[NSIndexSet indexSetWithIndex:0] | 
| byExtendingSelection:NO]; | 
| EXPECT_EQ(0, table_view_.selectedRow); | 
| -  ASSERT_TRUE(connect_button_.enabled); | 
| +  EXPECT_TRUE(connect_button_.enabled); | 
|  | 
| // Deselect option 0. | 
| [table_view_ deselectRow:0]; | 
| EXPECT_EQ(-1, table_view_.selectedRow); | 
| -  ASSERT_FALSE(connect_button_.enabled); | 
| +  EXPECT_FALSE(connect_button_.enabled); | 
|  | 
| // Select option 1. | 
| [table_view_ selectRowIndexes:[NSIndexSet indexSetWithIndex:1] | 
| byExtendingSelection:NO]; | 
| EXPECT_EQ(1, table_view_.selectedRow); | 
| -  ASSERT_TRUE(connect_button_.enabled); | 
| +  EXPECT_TRUE(connect_button_.enabled); | 
|  | 
| // Deselect option 1. | 
| [table_view_ deselectRow:1]; | 
| EXPECT_EQ(-1, table_view_.selectedRow); | 
| -  ASSERT_FALSE(connect_button_.enabled); | 
| +  EXPECT_FALSE(connect_button_.enabled); | 
| } | 
|  | 
| TEST_F(ChooserDialogCocoaControllerTest, | 
| SelectAnOptionAndThenSelectAnotherOption) { | 
| CreateChooserDialog(); | 
|  | 
| -  chooser_controller_->OptionAdded(base::ASCIIToUTF16("a"), | 
| -                                   MockChooserController::kNoImage); | 
| -  chooser_controller_->OptionAdded( | 
| -      base::ASCIIToUTF16("b"), MockChooserController::kSignalStrengthLevel0Bar); | 
| -  chooser_controller_->OptionAdded( | 
| -      base::ASCIIToUTF16("c"), MockChooserController::kSignalStrengthLevel1Bar); | 
| +  mock_chooser_controller_->OptionAdded( | 
| +      base::ASCIIToUTF16("a"), | 
| +      MockChooserController::kNoSignalStrengthLevelImage, | 
| +      MockChooserController::ConnectedPairedStatus::CONNECTED | | 
| +          MockChooserController::ConnectedPairedStatus::PAIRED); | 
| +  mock_chooser_controller_->OptionAdded( | 
| +      base::ASCIIToUTF16("b"), MockChooserController::kSignalStrengthLevel0Bar, | 
| +      MockChooserController::ConnectedPairedStatus::NONE); | 
| +  mock_chooser_controller_->OptionAdded( | 
| +      base::ASCIIToUTF16("c"), MockChooserController::kSignalStrengthLevel1Bar, | 
| +      MockChooserController::ConnectedPairedStatus::NONE); | 
|  | 
| // Select option 0. | 
| [table_view_ selectRowIndexes:[NSIndexSet indexSetWithIndex:0] | 
| byExtendingSelection:NO]; | 
| EXPECT_EQ(0, table_view_.selectedRow); | 
| -  ASSERT_TRUE(connect_button_.enabled); | 
| +  EXPECT_TRUE(connect_button_.enabled); | 
|  | 
| // Select option 1. | 
| [table_view_ selectRowIndexes:[NSIndexSet indexSetWithIndex:1] | 
| byExtendingSelection:NO]; | 
| EXPECT_EQ(1, table_view_.selectedRow); | 
| -  ASSERT_TRUE(connect_button_.enabled); | 
| +  EXPECT_TRUE(connect_button_.enabled); | 
|  | 
| // Select option 2. | 
| [table_view_ selectRowIndexes:[NSIndexSet indexSetWithIndex:2] | 
| byExtendingSelection:NO]; | 
| EXPECT_EQ(2, table_view_.selectedRow); | 
| -  ASSERT_TRUE(connect_button_.enabled); | 
| +  EXPECT_TRUE(connect_button_.enabled); | 
| } | 
|  | 
| TEST_F(ChooserDialogCocoaControllerTest, SelectAnOptionAndRemoveAnotherOption) { | 
| CreateChooserDialog(); | 
|  | 
| -  chooser_controller_->OptionAdded(base::ASCIIToUTF16("a"), | 
| -                                   MockChooserController::kNoImage); | 
| -  chooser_controller_->OptionAdded( | 
| -      base::ASCIIToUTF16("b"), MockChooserController::kSignalStrengthLevel0Bar); | 
| -  chooser_controller_->OptionAdded( | 
| -      base::ASCIIToUTF16("c"), MockChooserController::kSignalStrengthLevel1Bar); | 
| +  mock_chooser_controller_->OptionAdded( | 
| +      base::ASCIIToUTF16("a"), | 
| +      MockChooserController::kNoSignalStrengthLevelImage, | 
| +      MockChooserController::ConnectedPairedStatus::CONNECTED | | 
| +          MockChooserController::ConnectedPairedStatus::PAIRED); | 
| +  mock_chooser_controller_->OptionAdded( | 
| +      base::ASCIIToUTF16("b"), MockChooserController::kSignalStrengthLevel0Bar, | 
| +      MockChooserController::ConnectedPairedStatus::NONE); | 
| +  mock_chooser_controller_->OptionAdded( | 
| +      base::ASCIIToUTF16("c"), MockChooserController::kSignalStrengthLevel1Bar, | 
| +      MockChooserController::ConnectedPairedStatus::NONE); | 
|  | 
| // Select option 1. | 
| [table_view_ selectRowIndexes:[NSIndexSet indexSetWithIndex:1] | 
| byExtendingSelection:NO]; | 
| EXPECT_EQ(3, table_view_.numberOfRows); | 
| EXPECT_EQ(1, table_view_.selectedRow); | 
| -  ASSERT_TRUE(connect_button_.enabled); | 
| +  EXPECT_TRUE(connect_button_.enabled); | 
|  | 
| // Remove option 0. The list becomes: b c. And the index of the previously | 
| // selected item "b" becomes 0. | 
| -  chooser_controller_->OptionRemoved(base::ASCIIToUTF16("a")); | 
| +  mock_chooser_controller_->OptionRemoved(base::ASCIIToUTF16("a")); | 
| EXPECT_EQ(2, table_view_.numberOfRows); | 
| EXPECT_EQ(0, table_view_.selectedRow); | 
| -  ASSERT_TRUE(connect_button_.enabled); | 
| +  EXPECT_TRUE(connect_button_.enabled); | 
|  | 
| // Remove option 1. The list becomes: b. | 
| -  chooser_controller_->OptionRemoved(base::ASCIIToUTF16("c")); | 
| +  mock_chooser_controller_->OptionRemoved(base::ASCIIToUTF16("c")); | 
| EXPECT_EQ(1, table_view_.numberOfRows); | 
| EXPECT_EQ(0, table_view_.selectedRow); | 
| -  ASSERT_TRUE(connect_button_.enabled); | 
| +  EXPECT_TRUE(connect_button_.enabled); | 
| } | 
|  | 
| TEST_F(ChooserDialogCocoaControllerTest, | 
| SelectAnOptionAndRemoveTheSelectedOption) { | 
| CreateChooserDialog(); | 
|  | 
| -  chooser_controller_->OptionAdded(base::ASCIIToUTF16("a"), | 
| -                                   MockChooserController::kNoImage); | 
| -  chooser_controller_->OptionAdded( | 
| -      base::ASCIIToUTF16("b"), MockChooserController::kSignalStrengthLevel0Bar); | 
| -  chooser_controller_->OptionAdded( | 
| -      base::ASCIIToUTF16("c"), MockChooserController::kSignalStrengthLevel1Bar); | 
| +  mock_chooser_controller_->OptionAdded( | 
| +      base::ASCIIToUTF16("a"), | 
| +      MockChooserController::kNoSignalStrengthLevelImage, | 
| +      MockChooserController::ConnectedPairedStatus::CONNECTED | | 
| +          MockChooserController::ConnectedPairedStatus::PAIRED); | 
| +  mock_chooser_controller_->OptionAdded( | 
| +      base::ASCIIToUTF16("b"), MockChooserController::kSignalStrengthLevel0Bar, | 
| +      MockChooserController::ConnectedPairedStatus::NONE); | 
| +  mock_chooser_controller_->OptionAdded( | 
| +      base::ASCIIToUTF16("c"), MockChooserController::kSignalStrengthLevel1Bar, | 
| +      MockChooserController::ConnectedPairedStatus::NONE); | 
|  | 
| // Select option 1. | 
| [table_view_ selectRowIndexes:[NSIndexSet indexSetWithIndex:1] | 
| byExtendingSelection:NO]; | 
| EXPECT_EQ(3, table_view_.numberOfRows); | 
| EXPECT_EQ(1, table_view_.selectedRow); | 
| -  ASSERT_TRUE(connect_button_.enabled); | 
| +  EXPECT_TRUE(connect_button_.enabled); | 
|  | 
| // Remove option 1 | 
| -  chooser_controller_->OptionRemoved(base::ASCIIToUTF16("b")); | 
| +  mock_chooser_controller_->OptionRemoved(base::ASCIIToUTF16("b")); | 
| EXPECT_EQ(2, table_view_.numberOfRows); | 
| // No option selected. | 
| EXPECT_EQ(-1, table_view_.selectedRow); | 
| // Since no option selected, the "Connect" button should be disabled. | 
| -  ASSERT_FALSE(connect_button_.enabled); | 
| +  EXPECT_FALSE(connect_button_.enabled); | 
| } | 
|  | 
| TEST_F(ChooserDialogCocoaControllerTest, | 
| SelectAnOptionAndUpdateTheSelectedOption) { | 
| CreateChooserDialog(); | 
|  | 
| -  chooser_controller_->OptionAdded(base::ASCIIToUTF16("a"), | 
| -                                   MockChooserController::kNoImage); | 
| -  chooser_controller_->OptionAdded( | 
| -      base::ASCIIToUTF16("b"), MockChooserController::kSignalStrengthLevel0Bar); | 
| -  chooser_controller_->OptionAdded( | 
| -      base::ASCIIToUTF16("c"), MockChooserController::kSignalStrengthLevel1Bar); | 
| +  mock_chooser_controller_->OptionAdded( | 
| +      base::ASCIIToUTF16("a"), | 
| +      MockChooserController::kNoSignalStrengthLevelImage, | 
| +      MockChooserController::ConnectedPairedStatus::CONNECTED | | 
| +          MockChooserController::ConnectedPairedStatus::PAIRED); | 
| +  mock_chooser_controller_->OptionAdded( | 
| +      base::ASCIIToUTF16("b"), MockChooserController::kSignalStrengthLevel0Bar, | 
| +      MockChooserController::ConnectedPairedStatus::NONE); | 
| +  mock_chooser_controller_->OptionAdded( | 
| +      base::ASCIIToUTF16("c"), MockChooserController::kSignalStrengthLevel1Bar, | 
| +      MockChooserController::ConnectedPairedStatus::NONE); | 
|  | 
| // Select option 1. | 
| [table_view_ selectRowIndexes:[NSIndexSet indexSetWithIndex:1] | 
| byExtendingSelection:NO]; | 
|  | 
| // Update option 1. | 
| -  chooser_controller_->OptionUpdated( | 
| +  mock_chooser_controller_->OptionUpdated( | 
| base::ASCIIToUTF16("b"), base::ASCIIToUTF16("d"), | 
| -      MockChooserController::kSignalStrengthLevel2Bar); | 
| +      MockChooserController::kNoSignalStrengthLevelImage, | 
| +      MockChooserController::ConnectedPairedStatus::CONNECTED | | 
| +          MockChooserController::ConnectedPairedStatus::PAIRED); | 
|  | 
| EXPECT_EQ(1, table_view_.selectedRow); | 
| -  ExpectSignalStrengthLevelImageIs(0, MockChooserController::kNoImage); | 
| +  ExpectRowImageIsConnectedImage(0); | 
| ExpectRowTextIs(0, @"a"); | 
| -  ExpectSignalStrengthLevelImageIs( | 
| -      1, MockChooserController::kSignalStrengthLevel2Bar); | 
| +  EXPECT_TRUE(IsRowPaired(0)); | 
| +  ExpectRowImageIsConnectedImage(1); | 
| ExpectRowTextIs(1, @"d"); | 
| +  EXPECT_TRUE(IsRowPaired(1)); | 
| ExpectSignalStrengthLevelImageIs( | 
| 2, MockChooserController::kSignalStrengthLevel1Bar); | 
| ExpectRowTextIs(2, @"c"); | 
| -  ASSERT_TRUE(connect_button_.enabled); | 
| +  EXPECT_FALSE(IsRowPaired(2)); | 
| +  EXPECT_TRUE(connect_button_.enabled); | 
| } | 
|  | 
| TEST_F(ChooserDialogCocoaControllerTest, | 
| AddAnOptionAndSelectItAndRemoveTheSelectedOption) { | 
| CreateChooserDialog(); | 
|  | 
| -  chooser_controller_->OptionAdded(base::ASCIIToUTF16("a"), | 
| -                                   MockChooserController::kNoImage); | 
| +  mock_chooser_controller_->OptionAdded( | 
| +      base::ASCIIToUTF16("a"), | 
| +      MockChooserController::kNoSignalStrengthLevelImage, | 
| +      MockChooserController::ConnectedPairedStatus::CONNECTED | | 
| +          MockChooserController::ConnectedPairedStatus::PAIRED); | 
|  | 
| // Select option 0. | 
| [table_view_ selectRowIndexes:[NSIndexSet indexSetWithIndex:0] | 
| byExtendingSelection:NO]; | 
| EXPECT_EQ(1, table_view_.numberOfRows); | 
| EXPECT_EQ(0, table_view_.selectedRow); | 
| -  ASSERT_TRUE(connect_button_.enabled); | 
| +  EXPECT_TRUE(connect_button_.enabled); | 
|  | 
| // Remove option 0. | 
| -  chooser_controller_->OptionRemoved(base::ASCIIToUTF16("a")); | 
| +  mock_chooser_controller_->OptionRemoved(base::ASCIIToUTF16("a")); | 
| // There is no option shown now. But since "No devices found." | 
| // needs to be displayed on the |table_view_|, the number of rows is 1. | 
| EXPECT_EQ(1, table_view_.numberOfRows); | 
| // No option selected. | 
| EXPECT_EQ(-1, table_view_.selectedRow); | 
| // |table_view_| should be disabled since there is no option shown. | 
| -  ASSERT_FALSE(table_view_.enabled); | 
| -  ExpectSignalStrengthLevelImageIs(0, MockChooserController::kNoImage); | 
| +  EXPECT_FALSE(table_view_.enabled); | 
| +  ExpectNoRowImage(0); | 
| ExpectRowTextIs( | 
| 0, l10n_util::GetNSString(IDS_DEVICE_CHOOSER_NO_DEVICES_FOUND_PROMPT)); | 
| +  EXPECT_FALSE(IsRowPaired(0)); | 
| // Since no option selected, the "Connect" button should be disabled. | 
| -  ASSERT_FALSE(connect_button_.enabled); | 
| +  EXPECT_FALSE(connect_button_.enabled); | 
| } | 
|  | 
| TEST_F(ChooserDialogCocoaControllerTest, NoOptionSelectedAndPressCancelButton) { | 
| CreateChooserDialog(); | 
|  | 
| -  chooser_controller_->OptionAdded(base::ASCIIToUTF16("a"), | 
| -                                   MockChooserController::kNoImage); | 
| -  chooser_controller_->OptionAdded( | 
| -      base::ASCIIToUTF16("b"), MockChooserController::kSignalStrengthLevel0Bar); | 
| -  chooser_controller_->OptionAdded( | 
| -      base::ASCIIToUTF16("c"), MockChooserController::kSignalStrengthLevel1Bar); | 
| - | 
| -  EXPECT_CALL(*chooser_controller_, Select(testing::_)).Times(0); | 
| -  EXPECT_CALL(*chooser_controller_, Cancel()).Times(1); | 
| +  mock_chooser_controller_->OptionAdded( | 
| +      base::ASCIIToUTF16("a"), | 
| +      MockChooserController::kNoSignalStrengthLevelImage, | 
| +      MockChooserController::ConnectedPairedStatus::CONNECTED | | 
| +          MockChooserController::ConnectedPairedStatus::PAIRED); | 
| +  mock_chooser_controller_->OptionAdded( | 
| +      base::ASCIIToUTF16("b"), MockChooserController::kSignalStrengthLevel0Bar, | 
| +      MockChooserController::ConnectedPairedStatus::NONE); | 
| +  mock_chooser_controller_->OptionAdded( | 
| +      base::ASCIIToUTF16("c"), MockChooserController::kSignalStrengthLevel1Bar, | 
| +      MockChooserController::ConnectedPairedStatus::NONE); | 
| + | 
| +  EXPECT_CALL(*mock_chooser_controller_, Select(testing::_)).Times(0); | 
| +  EXPECT_CALL(*mock_chooser_controller_, Cancel()).Times(1); | 
| [cancel_button_ performClick:chooser_dialog_controller_]; | 
| } | 
|  | 
| TEST_F(ChooserDialogCocoaControllerTest, SelectAnOptionAndPressConnectButton) { | 
| CreateChooserDialog(); | 
|  | 
| -  chooser_controller_->OptionAdded(base::ASCIIToUTF16("a"), | 
| -                                   MockChooserController::kNoImage); | 
| -  chooser_controller_->OptionAdded( | 
| -      base::ASCIIToUTF16("b"), MockChooserController::kSignalStrengthLevel0Bar); | 
| -  chooser_controller_->OptionAdded( | 
| -      base::ASCIIToUTF16("c"), MockChooserController::kSignalStrengthLevel1Bar); | 
| +  mock_chooser_controller_->OptionAdded( | 
| +      base::ASCIIToUTF16("a"), | 
| +      MockChooserController::kNoSignalStrengthLevelImage, | 
| +      MockChooserController::ConnectedPairedStatus::CONNECTED | | 
| +          MockChooserController::ConnectedPairedStatus::PAIRED); | 
| +  mock_chooser_controller_->OptionAdded( | 
| +      base::ASCIIToUTF16("b"), MockChooserController::kSignalStrengthLevel0Bar, | 
| +      MockChooserController::ConnectedPairedStatus::NONE); | 
| +  mock_chooser_controller_->OptionAdded( | 
| +      base::ASCIIToUTF16("c"), MockChooserController::kSignalStrengthLevel1Bar, | 
| +      MockChooserController::ConnectedPairedStatus::NONE); | 
|  | 
| // Select option 0 and press "Connect" button. | 
| [table_view_ selectRowIndexes:[NSIndexSet indexSetWithIndex:0] | 
| byExtendingSelection:NO]; | 
| -  EXPECT_CALL(*chooser_controller_, Select(0)).Times(1); | 
| -  EXPECT_CALL(*chooser_controller_, Cancel()).Times(0); | 
| +  EXPECT_CALL(*mock_chooser_controller_, Select(0)).Times(1); | 
| +  EXPECT_CALL(*mock_chooser_controller_, Cancel()).Times(0); | 
| [connect_button_ performClick:chooser_dialog_controller_]; | 
|  | 
| // Select option 2 and press "Connect" button. | 
| [table_view_ selectRowIndexes:[NSIndexSet indexSetWithIndex:2] | 
| byExtendingSelection:NO]; | 
| -  EXPECT_CALL(*chooser_controller_, Select(2)).Times(1); | 
| -  EXPECT_CALL(*chooser_controller_, Cancel()).Times(0); | 
| +  EXPECT_CALL(*mock_chooser_controller_, Select(2)).Times(1); | 
| +  EXPECT_CALL(*mock_chooser_controller_, Cancel()).Times(0); | 
| [connect_button_ performClick:chooser_dialog_controller_]; | 
| } | 
|  | 
| TEST_F(ChooserDialogCocoaControllerTest, SelectAnOptionAndPressCancelButton) { | 
| CreateChooserDialog(); | 
|  | 
| -  chooser_controller_->OptionAdded(base::ASCIIToUTF16("a"), | 
| -                                   MockChooserController::kNoImage); | 
| -  chooser_controller_->OptionAdded( | 
| -      base::ASCIIToUTF16("b"), MockChooserController::kSignalStrengthLevel0Bar); | 
| -  chooser_controller_->OptionAdded( | 
| -      base::ASCIIToUTF16("c"), MockChooserController::kSignalStrengthLevel1Bar); | 
| +  mock_chooser_controller_->OptionAdded( | 
| +      base::ASCIIToUTF16("a"), | 
| +      MockChooserController::kNoSignalStrengthLevelImage, | 
| +      MockChooserController::ConnectedPairedStatus::CONNECTED | | 
| +          MockChooserController::ConnectedPairedStatus::PAIRED); | 
| +  mock_chooser_controller_->OptionAdded( | 
| +      base::ASCIIToUTF16("b"), MockChooserController::kSignalStrengthLevel0Bar, | 
| +      MockChooserController::ConnectedPairedStatus::NONE); | 
| +  mock_chooser_controller_->OptionAdded( | 
| +      base::ASCIIToUTF16("c"), MockChooserController::kSignalStrengthLevel1Bar, | 
| +      MockChooserController::ConnectedPairedStatus::NONE); | 
|  | 
| // Select option 0 and press "Cancel" button. | 
| [table_view_ selectRowIndexes:[NSIndexSet indexSetWithIndex:0] | 
| byExtendingSelection:NO]; | 
| -  EXPECT_CALL(*chooser_controller_, Select(testing::_)).Times(0); | 
| -  EXPECT_CALL(*chooser_controller_, Cancel()).Times(1); | 
| +  EXPECT_CALL(*mock_chooser_controller_, Select(testing::_)).Times(0); | 
| +  EXPECT_CALL(*mock_chooser_controller_, Cancel()).Times(1); | 
| [cancel_button_ performClick:chooser_dialog_controller_]; | 
| } | 
|  | 
| TEST_F(ChooserDialogCocoaControllerTest, AdapterOnAndOffAndOn) { | 
| CreateChooserDialog(); | 
|  | 
| -  chooser_controller_->OnAdapterPresenceChanged( | 
| +  mock_chooser_controller_->OnAdapterPresenceChanged( | 
| content::BluetoothChooser::AdapterPresence::POWERED_ON); | 
| EXPECT_FALSE(table_view_.hidden); | 
| // There is no option shown now. But since "No devices found." | 
| // needs to be displayed on the |table_view_|, the number of rows is 1. | 
| EXPECT_EQ(1, table_view_.numberOfRows); | 
| // |table_view_| should be disabled since there is no option shown. | 
| -  ASSERT_FALSE(table_view_.enabled); | 
| +  EXPECT_FALSE(table_view_.enabled); | 
| // No option selected. | 
| EXPECT_EQ(-1, table_view_.selectedRow); | 
| -  ExpectSignalStrengthLevelImageIs(0, MockChooserController::kNoImage); | 
| +  ExpectNoRowImage(0); | 
| ExpectRowTextIs( | 
| 0, l10n_util::GetNSString(IDS_DEVICE_CHOOSER_NO_DEVICES_FOUND_PROMPT)); | 
| +  EXPECT_FALSE(IsRowPaired(0)); | 
| EXPECT_TRUE(spinner_.hidden); | 
| EXPECT_TRUE(status_.hidden); | 
| EXPECT_FALSE(rescan_button_.hidden); | 
| -  ASSERT_FALSE(connect_button_.enabled); | 
| -  ASSERT_TRUE(cancel_button_.enabled); | 
| +  EXPECT_FALSE(connect_button_.enabled); | 
| +  EXPECT_TRUE(cancel_button_.enabled); | 
|  | 
| // Add options | 
| -  chooser_controller_->OptionAdded(base::ASCIIToUTF16("a"), | 
| -                                   MockChooserController::kNoImage); | 
| -  chooser_controller_->OptionAdded( | 
| -      base::ASCIIToUTF16("b"), MockChooserController::kSignalStrengthLevel0Bar); | 
| -  chooser_controller_->OptionAdded( | 
| -      base::ASCIIToUTF16("c"), MockChooserController::kSignalStrengthLevel1Bar); | 
| -  ASSERT_TRUE(table_view_.enabled); | 
| +  mock_chooser_controller_->OptionAdded( | 
| +      base::ASCIIToUTF16("a"), | 
| +      MockChooserController::kNoSignalStrengthLevelImage, | 
| +      MockChooserController::ConnectedPairedStatus::CONNECTED | | 
| +          MockChooserController::ConnectedPairedStatus::PAIRED); | 
| +  mock_chooser_controller_->OptionAdded( | 
| +      base::ASCIIToUTF16("b"), MockChooserController::kSignalStrengthLevel0Bar, | 
| +      MockChooserController::ConnectedPairedStatus::NONE); | 
| +  mock_chooser_controller_->OptionAdded( | 
| +      base::ASCIIToUTF16("c"), MockChooserController::kSignalStrengthLevel1Bar, | 
| +      MockChooserController::ConnectedPairedStatus::NONE); | 
| +  EXPECT_TRUE(table_view_.enabled); | 
| EXPECT_EQ(3, table_view_.numberOfRows); | 
| // Select option 1. | 
| [table_view_ selectRowIndexes:[NSIndexSet indexSetWithIndex:1] | 
| byExtendingSelection:NO]; | 
| EXPECT_EQ(1, table_view_.selectedRow); | 
| -  ASSERT_TRUE(connect_button_.enabled); | 
| -  ASSERT_TRUE(cancel_button_.enabled); | 
| +  EXPECT_TRUE(connect_button_.enabled); | 
| +  EXPECT_TRUE(cancel_button_.enabled); | 
|  | 
| -  chooser_controller_->OnAdapterPresenceChanged( | 
| +  mock_chooser_controller_->OnAdapterPresenceChanged( | 
| content::BluetoothChooser::AdapterPresence::POWERED_OFF); | 
| EXPECT_FALSE(table_view_.hidden); | 
| // Since "Bluetooth turned off." needs to be displayed on the |table_view_|, | 
| @@ -613,40 +741,47 @@ TEST_F(ChooserDialogCocoaControllerTest, AdapterOnAndOffAndOn) { | 
| EXPECT_FALSE(table_view_.enabled); | 
| // No option selected. | 
| EXPECT_EQ(-1, table_view_.selectedRow); | 
| -  ExpectSignalStrengthLevelImageIs(0, MockChooserController::kNoImage); | 
| +  ExpectNoRowImage(0); | 
| ExpectRowTextIs( | 
| 0, l10n_util::GetNSString(IDS_BLUETOOTH_DEVICE_CHOOSER_ADAPTER_OFF)); | 
| +  EXPECT_FALSE(IsRowPaired(0)); | 
| EXPECT_TRUE(spinner_.hidden); | 
| EXPECT_TRUE(status_.hidden); | 
| EXPECT_TRUE(rescan_button_.hidden); | 
| // Since the adapter is turned off, the previously selected option | 
| // becomes invalid, the OK button is disabled. | 
| -  EXPECT_EQ(0u, chooser_controller_->NumOptions()); | 
| -  ASSERT_FALSE(connect_button_.enabled); | 
| -  ASSERT_TRUE(cancel_button_.enabled); | 
| +  EXPECT_EQ(0u, mock_chooser_controller_->NumOptions()); | 
| +  EXPECT_FALSE(connect_button_.enabled); | 
| +  EXPECT_TRUE(cancel_button_.enabled); | 
|  | 
| -  chooser_controller_->OnAdapterPresenceChanged( | 
| +  mock_chooser_controller_->OnAdapterPresenceChanged( | 
| content::BluetoothChooser::AdapterPresence::POWERED_ON); | 
| -  ExpectSignalStrengthLevelImageIs(0, MockChooserController::kNoImage); | 
| +  ExpectNoRowImage(0); | 
| ExpectRowTextIs( | 
| 0, l10n_util::GetNSString(IDS_DEVICE_CHOOSER_NO_DEVICES_FOUND_PROMPT)); | 
| -  EXPECT_EQ(0u, chooser_controller_->NumOptions()); | 
| -  ASSERT_FALSE(connect_button_.enabled); | 
| -  ASSERT_TRUE(cancel_button_.enabled); | 
| +  EXPECT_FALSE(IsRowPaired(0)); | 
| +  EXPECT_EQ(0u, mock_chooser_controller_->NumOptions()); | 
| +  EXPECT_FALSE(connect_button_.enabled); | 
| +  EXPECT_TRUE(cancel_button_.enabled); | 
| } | 
|  | 
| TEST_F(ChooserDialogCocoaControllerTest, DiscoveringAndNoOptionAddedAndIdle) { | 
| CreateChooserDialog(); | 
|  | 
| // Add options | 
| -  chooser_controller_->OptionAdded(base::ASCIIToUTF16("a"), | 
| -                                   MockChooserController::kNoImage); | 
| -  chooser_controller_->OptionAdded( | 
| -      base::ASCIIToUTF16("b"), MockChooserController::kSignalStrengthLevel0Bar); | 
| -  chooser_controller_->OptionAdded( | 
| -      base::ASCIIToUTF16("c"), MockChooserController::kSignalStrengthLevel1Bar); | 
| +  mock_chooser_controller_->OptionAdded( | 
| +      base::ASCIIToUTF16("a"), | 
| +      MockChooserController::kNoSignalStrengthLevelImage, | 
| +      MockChooserController::ConnectedPairedStatus::CONNECTED | | 
| +          MockChooserController::ConnectedPairedStatus::PAIRED); | 
| +  mock_chooser_controller_->OptionAdded( | 
| +      base::ASCIIToUTF16("b"), MockChooserController::kSignalStrengthLevel0Bar, | 
| +      MockChooserController::ConnectedPairedStatus::NONE); | 
| +  mock_chooser_controller_->OptionAdded( | 
| +      base::ASCIIToUTF16("c"), MockChooserController::kSignalStrengthLevel1Bar, | 
| +      MockChooserController::ConnectedPairedStatus::NONE); | 
| EXPECT_FALSE(table_view_.hidden); | 
| -  ASSERT_TRUE(table_view_.enabled); | 
| +  EXPECT_TRUE(table_view_.enabled); | 
| EXPECT_EQ(3, table_view_.numberOfRows); | 
| // Select option 1. | 
| [table_view_ selectRowIndexes:[NSIndexSet indexSetWithIndex:1] | 
| @@ -655,114 +790,128 @@ TEST_F(ChooserDialogCocoaControllerTest, DiscoveringAndNoOptionAddedAndIdle) { | 
| EXPECT_TRUE(spinner_.hidden); | 
| EXPECT_TRUE(status_.hidden); | 
| EXPECT_TRUE(rescan_button_.hidden); | 
| -  ASSERT_TRUE(connect_button_.enabled); | 
| -  ASSERT_TRUE(cancel_button_.enabled); | 
| +  EXPECT_TRUE(connect_button_.enabled); | 
| +  EXPECT_TRUE(cancel_button_.enabled); | 
|  | 
| -  chooser_controller_->OnDiscoveryStateChanged( | 
| +  mock_chooser_controller_->OnDiscoveryStateChanged( | 
| content::BluetoothChooser::DiscoveryState::DISCOVERING); | 
| EXPECT_TRUE(table_view_.hidden); | 
| EXPECT_FALSE(spinner_.hidden); | 
| EXPECT_FALSE(status_.hidden); | 
| EXPECT_TRUE(rescan_button_.hidden); | 
| // OK button is disabled since the chooser is refreshing options. | 
| -  ASSERT_FALSE(connect_button_.enabled); | 
| -  ASSERT_TRUE(cancel_button_.enabled); | 
| +  EXPECT_FALSE(connect_button_.enabled); | 
| +  EXPECT_TRUE(cancel_button_.enabled); | 
|  | 
| -  chooser_controller_->OnDiscoveryStateChanged( | 
| +  mock_chooser_controller_->OnDiscoveryStateChanged( | 
| content::BluetoothChooser::DiscoveryState::IDLE); | 
| EXPECT_FALSE(table_view_.hidden); | 
| // There is no option shown now. But since "No devices found." | 
| // needs to be displayed on the |table_view_|, the number of rows is 1. | 
| EXPECT_EQ(1, table_view_.numberOfRows); | 
| // |table_view_| should be disabled since there is no option shown. | 
| -  ASSERT_FALSE(table_view_.enabled); | 
| +  EXPECT_FALSE(table_view_.enabled); | 
| // No option selected. | 
| EXPECT_EQ(-1, table_view_.selectedRow); | 
| -  ExpectSignalStrengthLevelImageIs(0, MockChooserController::kNoImage); | 
| +  ExpectNoRowImage(0); | 
| ExpectRowTextIs( | 
| 0, l10n_util::GetNSString(IDS_DEVICE_CHOOSER_NO_DEVICES_FOUND_PROMPT)); | 
| +  EXPECT_FALSE(IsRowPaired(0)); | 
| EXPECT_TRUE(spinner_.hidden); | 
| EXPECT_TRUE(status_.hidden); | 
| EXPECT_FALSE(rescan_button_.hidden); | 
| // OK button is disabled since the chooser refreshed options. | 
| -  ASSERT_FALSE(connect_button_.enabled); | 
| -  ASSERT_TRUE(cancel_button_.enabled); | 
| +  EXPECT_FALSE(connect_button_.enabled); | 
| +  EXPECT_TRUE(cancel_button_.enabled); | 
| } | 
|  | 
| TEST_F(ChooserDialogCocoaControllerTest, | 
| DiscoveringAndOneOptionAddedAndSelectedAndIdle) { | 
| CreateChooserDialog(); | 
|  | 
| -  chooser_controller_->OptionAdded(base::ASCIIToUTF16("a"), | 
| -                                   MockChooserController::kNoImage); | 
| -  chooser_controller_->OptionAdded( | 
| -      base::ASCIIToUTF16("b"), MockChooserController::kSignalStrengthLevel0Bar); | 
| -  chooser_controller_->OptionAdded( | 
| -      base::ASCIIToUTF16("c"), MockChooserController::kSignalStrengthLevel1Bar); | 
| +  mock_chooser_controller_->OptionAdded( | 
| +      base::ASCIIToUTF16("a"), | 
| +      MockChooserController::kNoSignalStrengthLevelImage, | 
| +      MockChooserController::ConnectedPairedStatus::CONNECTED | | 
| +          MockChooserController::ConnectedPairedStatus::PAIRED); | 
| +  mock_chooser_controller_->OptionAdded( | 
| +      base::ASCIIToUTF16("b"), MockChooserController::kSignalStrengthLevel0Bar, | 
| +      MockChooserController::ConnectedPairedStatus::NONE); | 
| +  mock_chooser_controller_->OptionAdded( | 
| +      base::ASCIIToUTF16("c"), MockChooserController::kSignalStrengthLevel1Bar, | 
| +      MockChooserController::ConnectedPairedStatus::NONE); | 
| [table_view_ selectRowIndexes:[NSIndexSet indexSetWithIndex:1] | 
| byExtendingSelection:NO]; | 
|  | 
| -  chooser_controller_->OnDiscoveryStateChanged( | 
| +  mock_chooser_controller_->OnDiscoveryStateChanged( | 
| content::BluetoothChooser::DiscoveryState::DISCOVERING); | 
| -  chooser_controller_->OptionAdded( | 
| -      base::ASCIIToUTF16("d"), MockChooserController::kSignalStrengthLevel2Bar); | 
| +  mock_chooser_controller_->OptionAdded( | 
| +      base::ASCIIToUTF16("d"), MockChooserController::kSignalStrengthLevel2Bar, | 
| +      MockChooserController::ConnectedPairedStatus::NONE); | 
| EXPECT_FALSE(table_view_.hidden); | 
| // |table_view_| should be enabled since there is an option. | 
| -  ASSERT_TRUE(table_view_.enabled); | 
| +  EXPECT_TRUE(table_view_.enabled); | 
| EXPECT_EQ(1, table_view_.numberOfRows); | 
| // No option selected. | 
| EXPECT_EQ(-1, table_view_.selectedRow); | 
| ExpectSignalStrengthLevelImageIs( | 
| 0, MockChooserController::kSignalStrengthLevel2Bar); | 
| ExpectRowTextIs(0, @"d"); | 
| +  EXPECT_FALSE(IsRowPaired(0)); | 
| EXPECT_TRUE(spinner_.hidden); | 
| EXPECT_FALSE(status_.hidden); | 
| EXPECT_TRUE(rescan_button_.hidden); | 
| // OK button is disabled since no option is selected. | 
| -  ASSERT_FALSE(connect_button_.enabled); | 
| -  ASSERT_TRUE(cancel_button_.enabled); | 
| +  EXPECT_FALSE(connect_button_.enabled); | 
| +  EXPECT_TRUE(cancel_button_.enabled); | 
| [table_view_ selectRowIndexes:[NSIndexSet indexSetWithIndex:0] | 
| byExtendingSelection:NO]; | 
| EXPECT_EQ(0, table_view_.selectedRow); | 
| -  ASSERT_TRUE(connect_button_.enabled); | 
| -  ASSERT_TRUE(cancel_button_.enabled); | 
| +  EXPECT_TRUE(connect_button_.enabled); | 
| +  EXPECT_TRUE(cancel_button_.enabled); | 
|  | 
| -  chooser_controller_->OnDiscoveryStateChanged( | 
| +  mock_chooser_controller_->OnDiscoveryStateChanged( | 
| content::BluetoothChooser::DiscoveryState::IDLE); | 
| EXPECT_FALSE(table_view_.hidden); | 
| -  ASSERT_TRUE(table_view_.enabled); | 
| +  EXPECT_TRUE(table_view_.enabled); | 
| EXPECT_EQ(1, table_view_.numberOfRows); | 
| EXPECT_EQ(0, table_view_.selectedRow); | 
| ExpectRowTextIs(0, @"d"); | 
| +  EXPECT_FALSE(IsRowPaired(0)); | 
| EXPECT_TRUE(spinner_.hidden); | 
| EXPECT_TRUE(status_.hidden); | 
| EXPECT_FALSE(rescan_button_.hidden); | 
| -  ASSERT_TRUE(connect_button_.enabled); | 
| -  ASSERT_TRUE(cancel_button_.enabled); | 
| +  EXPECT_TRUE(connect_button_.enabled); | 
| +  EXPECT_TRUE(cancel_button_.enabled); | 
| } | 
|  | 
| TEST_F(ChooserDialogCocoaControllerTest, PressRescanButton) { | 
| CreateChooserDialog(); | 
|  | 
| -  EXPECT_CALL(*chooser_controller_, RefreshOptions()).Times(1); | 
| +  EXPECT_CALL(*mock_chooser_controller_, RefreshOptions()).Times(1); | 
| [rescan_button_ performClick:chooser_dialog_controller_]; | 
| } | 
|  | 
| TEST_F(ChooserDialogCocoaControllerTest, PressHelpButton) { | 
| CreateChooserDialog(); | 
|  | 
| -  chooser_controller_->OptionAdded(base::ASCIIToUTF16("a"), | 
| -                                   MockChooserController::kNoImage); | 
| -  chooser_controller_->OptionAdded( | 
| -      base::ASCIIToUTF16("b"), MockChooserController::kSignalStrengthLevel0Bar); | 
| -  chooser_controller_->OptionAdded( | 
| -      base::ASCIIToUTF16("c"), MockChooserController::kSignalStrengthLevel1Bar); | 
| +  mock_chooser_controller_->OptionAdded( | 
| +      base::ASCIIToUTF16("a"), | 
| +      MockChooserController::kNoSignalStrengthLevelImage, | 
| +      MockChooserController::ConnectedPairedStatus::CONNECTED | | 
| +          MockChooserController::ConnectedPairedStatus::PAIRED); | 
| +  mock_chooser_controller_->OptionAdded( | 
| +      base::ASCIIToUTF16("b"), MockChooserController::kSignalStrengthLevel0Bar, | 
| +      MockChooserController::ConnectedPairedStatus::NONE); | 
| +  mock_chooser_controller_->OptionAdded( | 
| +      base::ASCIIToUTF16("c"), MockChooserController::kSignalStrengthLevel1Bar, | 
| +      MockChooserController::ConnectedPairedStatus::NONE); | 
|  | 
| // Select option 0 and press "Get help" button. | 
| [table_view_ selectRowIndexes:[NSIndexSet indexSetWithIndex:0] | 
| byExtendingSelection:NO]; | 
| -  EXPECT_CALL(*chooser_controller_, Select(testing::_)).Times(0); | 
| -  EXPECT_CALL(*chooser_controller_, Cancel()).Times(0); | 
| -  EXPECT_CALL(*chooser_controller_, OpenHelpCenterUrl()).Times(1); | 
| +  EXPECT_CALL(*mock_chooser_controller_, Select(testing::_)).Times(0); | 
| +  EXPECT_CALL(*mock_chooser_controller_, Cancel()).Times(0); | 
| +  EXPECT_CALL(*mock_chooser_controller_, OpenHelpCenterUrl()).Times(1); | 
| [help_button_ performClick:chooser_dialog_controller_]; | 
| } | 
|  |