| OLD | NEW |
| (Empty) |
| 1 // Copyright (c) 2012 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/table/table_utils.h" | |
| 6 | |
| 7 #include "base/strings/string_number_conversions.h" | |
| 8 #include "testing/gtest/include/gtest/gtest.h" | |
| 9 #include "ui/gfx/font_list.h" | |
| 10 #include "ui/views/controls/table/test_table_model.h" | |
| 11 | |
| 12 using ui::TableColumn; | |
| 13 using ui::TableModel; | |
| 14 | |
| 15 namespace views { | |
| 16 | |
| 17 namespace { | |
| 18 | |
| 19 std::string IntVectorToString(const std::vector<int>& values) { | |
| 20 std::string result; | |
| 21 for (size_t i = 0; i < values.size(); ++i) { | |
| 22 if (i != 0) | |
| 23 result += ","; | |
| 24 result += base::IntToString(values[i]); | |
| 25 } | |
| 26 return result; | |
| 27 } | |
| 28 | |
| 29 ui::TableColumn CreateTableColumnWithWidth(int width) { | |
| 30 ui::TableColumn column; | |
| 31 column.width = width; | |
| 32 return column; | |
| 33 } | |
| 34 | |
| 35 } // namespace | |
| 36 | |
| 37 // Verifies columns with a specified width is honored. | |
| 38 TEST(TableUtilsTest, SetWidthHonored) { | |
| 39 TestTableModel model(4); | |
| 40 std::vector<TableColumn> columns; | |
| 41 columns.push_back(CreateTableColumnWithWidth(20)); | |
| 42 columns.push_back(CreateTableColumnWithWidth(30)); | |
| 43 gfx::FontList font_list; | |
| 44 std::vector<int> result(CalculateTableColumnSizes( | |
| 45 100, 0, font_list, font_list, 0, 0, columns, &model)); | |
| 46 EXPECT_EQ("20,30", IntVectorToString(result)); | |
| 47 | |
| 48 // Same with some padding, it should be ignored. | |
| 49 result = CalculateTableColumnSizes( | |
| 50 100, 0, font_list, font_list, 2, 0, columns, &model); | |
| 51 EXPECT_EQ("20,30", IntVectorToString(result)); | |
| 52 | |
| 53 // Same with not enough space, it shouldn't matter. | |
| 54 result = CalculateTableColumnSizes( | |
| 55 10, 0, font_list, font_list, 2, 0, columns, &model); | |
| 56 EXPECT_EQ("20,30", IntVectorToString(result)); | |
| 57 } | |
| 58 | |
| 59 // Verifies if no size is specified the last column gets all the available | |
| 60 // space. | |
| 61 TEST(TableUtilsTest, LastColumnGetsAllSpace) { | |
| 62 TestTableModel model(4); | |
| 63 std::vector<TableColumn> columns; | |
| 64 columns.push_back(ui::TableColumn()); | |
| 65 columns.push_back(ui::TableColumn()); | |
| 66 gfx::FontList font_list; | |
| 67 std::vector<int> result(CalculateTableColumnSizes( | |
| 68 500, 0, font_list, font_list, 0, 0, columns, &model)); | |
| 69 EXPECT_NE(0, result[0]); | |
| 70 EXPECT_GE(result[1], | |
| 71 WidthForContent(font_list, font_list, 0, 0, columns[1], &model)); | |
| 72 EXPECT_EQ(500, result[0] + result[1]); | |
| 73 } | |
| 74 | |
| 75 // Verifies a single column with a percent=1 is resized correctly. | |
| 76 TEST(TableUtilsTest, SingleResizableColumn) { | |
| 77 TestTableModel model(4); | |
| 78 std::vector<TableColumn> columns; | |
| 79 columns.push_back(ui::TableColumn()); | |
| 80 columns.push_back(ui::TableColumn()); | |
| 81 columns.push_back(ui::TableColumn()); | |
| 82 columns[2].percent = 1.0f; | |
| 83 gfx::FontList font_list; | |
| 84 std::vector<int> result(CalculateTableColumnSizes( | |
| 85 500, 0, font_list, font_list, 0, 0, columns, &model)); | |
| 86 EXPECT_EQ(result[0], | |
| 87 WidthForContent(font_list, font_list, 0, 0, columns[0], &model)); | |
| 88 EXPECT_EQ(result[1], | |
| 89 WidthForContent(font_list, font_list, 0, 0, columns[1], &model)); | |
| 90 EXPECT_EQ(500 - result[0] - result[1], result[2]); | |
| 91 | |
| 92 // The same with a slightly larger width passed in. | |
| 93 result = CalculateTableColumnSizes( | |
| 94 1000, 0, font_list, font_list, 0, 0, columns, &model); | |
| 95 EXPECT_EQ(result[0], | |
| 96 WidthForContent(font_list, font_list, 0, 0, columns[0], &model)); | |
| 97 EXPECT_EQ(result[1], | |
| 98 WidthForContent(font_list, font_list, 0, 0, columns[1], &model)); | |
| 99 EXPECT_EQ(1000 - result[0] - result[1], result[2]); | |
| 100 | |
| 101 // Verify padding for the first column is honored. | |
| 102 result = CalculateTableColumnSizes( | |
| 103 1000, 10, font_list, font_list, 0, 0, columns, &model); | |
| 104 EXPECT_EQ(result[0], | |
| 105 WidthForContent(font_list, font_list, 0, 0, columns[0], &model) | |
| 106 + 10); | |
| 107 EXPECT_EQ(result[1], | |
| 108 WidthForContent(font_list, font_list, 0, 0, columns[1], &model)); | |
| 109 EXPECT_EQ(1000 - result[0] - result[1], result[2]); | |
| 110 | |
| 111 // Just enough space to show the first two columns. Should force last column | |
| 112 // to min size. | |
| 113 result = CalculateTableColumnSizes( | |
| 114 1000, 0, font_list, font_list, 0, 0, columns, &model); | |
| 115 result = CalculateTableColumnSizes( | |
| 116 result[0] + result[1], 0, font_list, font_list, 0, 0, columns, &model); | |
| 117 EXPECT_EQ(result[0], | |
| 118 WidthForContent(font_list, font_list, 0, 0, columns[0], &model)); | |
| 119 EXPECT_EQ(result[1], | |
| 120 WidthForContent(font_list, font_list, 0, 0, columns[1], &model)); | |
| 121 EXPECT_EQ(kUnspecifiedColumnWidth, result[2]); | |
| 122 } | |
| 123 | |
| 124 } // namespace views | |
| OLD | NEW |