1 // Copyright 2013 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include "ui/views/controls/prefix_selector.h" 6 7 #include <string> 8 9 #include "base/strings/string_util.h" 10 #include "base/strings/utf_string_conversions.h" 11 #include "ui/views/controls/prefix_delegate.h" 12 #include "ui/views/test/views_test_base.h" 13 14 using base::ASCIIToUTF16; 15 16 namespace views { 17 18 class TestPrefixDelegate : public PrefixDelegate { 19 public: TestPrefixDelegate()20 TestPrefixDelegate() : selected_row_(0) { 21 rows_.push_back(ASCIIToUTF16("aardvark")); 22 rows_.push_back(ASCIIToUTF16("antelope")); 23 rows_.push_back(ASCIIToUTF16("badger")); 24 rows_.push_back(ASCIIToUTF16("gnu")); 25 } 26 ~TestPrefixDelegate()27 virtual ~TestPrefixDelegate() {} 28 GetRowCount()29 virtual int GetRowCount() OVERRIDE { 30 return static_cast<int>(rows_.size()); 31 } 32 GetSelectedRow()33 virtual int GetSelectedRow() OVERRIDE { 34 return selected_row_; 35 } 36 SetSelectedRow(int row)37 virtual void SetSelectedRow(int row) OVERRIDE { 38 selected_row_ = row; 39 } 40 GetTextForRow(int row)41 virtual base::string16 GetTextForRow(int row) OVERRIDE { 42 return rows_[row]; 43 } 44 45 private: 46 std::vector<base::string16> rows_; 47 int selected_row_; 48 49 DISALLOW_COPY_AND_ASSIGN(TestPrefixDelegate); 50 }; 51 52 class PrefixSelectorTest : public ViewsTestBase { 53 public: PrefixSelectorTest()54 PrefixSelectorTest() { 55 selector_.reset(new PrefixSelector(&delegate_)); 56 } 57 58 protected: 59 scoped_ptr<PrefixSelector> selector_; 60 TestPrefixDelegate delegate_; 61 62 private: 63 DISALLOW_COPY_AND_ASSIGN(PrefixSelectorTest); 64 }; 65 TEST_F(PrefixSelectorTest,PrefixSelect)66TEST_F(PrefixSelectorTest, PrefixSelect) { 67 selector_->InsertText(ASCIIToUTF16("an")); 68 EXPECT_EQ(1, delegate_.GetSelectedRow()); 69 70 // Invoke OnViewBlur() to reset time. 71 selector_->OnViewBlur(); 72 selector_->InsertText(ASCIIToUTF16("a")); 73 EXPECT_EQ(0, delegate_.GetSelectedRow()); 74 75 selector_->OnViewBlur(); 76 selector_->InsertText(ASCIIToUTF16("g")); 77 EXPECT_EQ(3, delegate_.GetSelectedRow()); 78 79 selector_->OnViewBlur(); 80 selector_->InsertText(ASCIIToUTF16("b")); 81 selector_->InsertText(ASCIIToUTF16("a")); 82 EXPECT_EQ(2, delegate_.GetSelectedRow()); 83 84 selector_->OnViewBlur(); 85 selector_->InsertText(ASCIIToUTF16("\t")); 86 selector_->InsertText(ASCIIToUTF16("b")); 87 selector_->InsertText(ASCIIToUTF16("a")); 88 EXPECT_EQ(2, delegate_.GetSelectedRow()); 89 } 90 91 } // namespace views 92