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 3 // found in the LICENSE file. 4 5 #include "base/basictypes.h" 6 #include "chrome/browser/ui/tabs/dock_info.h" 7 #include "testing/gtest/include/gtest/gtest.h" 8 #include "ui/gfx/point.h" 9 10 namespace { 11 // Distance in pixels between the hotspot and when the hint should be shown. 12 const int kHotSpotDeltaX = 120; 13 const int kHotSpotDeltaY = 120; 14 // Size of the popup window. 15 const int kPopupWidth = 70; 16 const int kPopupHeight = 70; 17 } // namespace 18 19 TEST(DockInfoTest, IsCloseToPoint) { 20 bool in_enable_area; 21 gfx::Point screen_loc[] = { 22 gfx::Point(0, 0), 23 gfx::Point(kPopupWidth/2 - 1, kPopupHeight/2 - 1), 24 gfx::Point(kPopupWidth/2, kPopupHeight/2), 25 gfx::Point(kHotSpotDeltaX - 1, kHotSpotDeltaY - 1), 26 gfx::Point(kHotSpotDeltaX, kHotSpotDeltaY), 27 gfx::Point(-kHotSpotDeltaX, -kHotSpotDeltaY) 28 }; 29 gfx::Point hotspot[] = { 30 gfx::Point(0, 0), 31 gfx::Point(0, 0), 32 gfx::Point(kPopupWidth, kPopupHeight), 33 gfx::Point(0, 0), 34 gfx::Point(2*kHotSpotDeltaX, 2*kHotSpotDeltaY), 35 gfx::Point(0, 0) 36 }; 37 bool expected_results[] = { 38 true, true, true, true, false, false 39 }; 40 bool expected_in_enable_area[] = { 41 true, true, false, false, false, false 42 }; 43 44 for (size_t i = 0; i < arraysize(expected_results); ++i) { 45 bool result = DockInfo::IsCloseToPoint( 46 screen_loc[i], hotspot[i].x(), hotspot[i].y(), &in_enable_area); 47 EXPECT_EQ(expected_results[i], result); 48 EXPECT_EQ(expected_in_enable_area[i], in_enable_area); 49 } 50 } 51 52 TEST(DockInfoTest, IsCloseToMonitorPoint) { 53 bool in_enable_area; 54 gfx::Point screen_loc[] = { 55 gfx::Point(0, 0), 56 gfx::Point(kPopupWidth - 1, kPopupHeight/2 -1), 57 gfx::Point(kPopupWidth, kPopupHeight/2 - 1), 58 gfx::Point(kPopupWidth - 1, kPopupHeight), 59 gfx::Point(2*kHotSpotDeltaX, kHotSpotDeltaY - 1), 60 gfx::Point(2*kHotSpotDeltaX - 1, kHotSpotDeltaY), 61 gfx::Point(2*kHotSpotDeltaX - 1, kHotSpotDeltaY), 62 gfx::Point(0, 0), 63 gfx::Point(kPopupWidth/2 - 1, kPopupHeight - 1), 64 gfx::Point(kPopupWidth/2 - 1, kPopupHeight), 65 gfx::Point(kPopupWidth/2, kPopupHeight - 1), 66 gfx::Point(kHotSpotDeltaX - 1, 2*kHotSpotDeltaY), 67 gfx::Point(kHotSpotDeltaX, 2*kHotSpotDeltaY - 1), 68 }; 69 gfx::Point hotspot = gfx::Point(0, 0); 70 DockInfo::Type type[] = { 71 DockInfo::LEFT_HALF, 72 DockInfo::LEFT_HALF, 73 DockInfo::LEFT_HALF, 74 DockInfo::LEFT_HALF, 75 DockInfo::LEFT_HALF, 76 DockInfo::LEFT_HALF, 77 DockInfo::RIGHT_HALF, 78 DockInfo::BOTTOM_HALF, 79 DockInfo::BOTTOM_HALF, 80 DockInfo::BOTTOM_HALF, 81 DockInfo::BOTTOM_HALF, 82 DockInfo::BOTTOM_HALF, 83 DockInfo::BOTTOM_HALF, 84 }; 85 bool expected_results[] = { 86 true, true, true, true, false, false, false, 87 true, true, true, true, false, false 88 }; 89 bool expected_in_enable_area[] = { 90 true, true, false, false, false, false, false, 91 true, true, false, false, false, false 92 }; 93 94 for (size_t i = 0; i < arraysize(expected_results); ++i) { 95 bool result = DockInfo::IsCloseToMonitorPoint( 96 screen_loc[i], hotspot.x(), hotspot.y(), type[i], &in_enable_area); 97 EXPECT_EQ(expected_results[i], result); 98 EXPECT_EQ(expected_in_enable_area[i], in_enable_area); 99 } 100 } 101 102 TEST(DockInfoTest, IsValidForPoint) { 103 DockInfo d; 104 EXPECT_FALSE(d.IsValidForPoint(gfx::Point(0, 0))); 105 d.set_monitor_bounds(gfx::Rect(0, 0, kPopupWidth, kPopupHeight)); 106 d.set_hot_spot(gfx::Point(0, 0)); 107 d.set_type(DockInfo::LEFT_HALF); 108 109 gfx::Point screen_point[] = { 110 gfx::Point(0, 0), 111 gfx::Point(kPopupWidth + 1, kPopupHeight + 1), 112 gfx::Point(2 * kHotSpotDeltaX, kHotSpotDeltaY), 113 }; 114 115 bool expected_result[] = { 116 true, false, false 117 }; 118 119 for (size_t i = 0; i < arraysize(expected_result); ++i) { 120 EXPECT_EQ(expected_result[i], d.IsValidForPoint(screen_point[i])); 121 } 122 } 123 124 TEST(DockInfoTest, equals) { 125 DockInfo d; 126 DockInfo dd; 127 EXPECT_TRUE(d.equals(dd)); 128 d.set_type(DockInfo::MAXIMIZE); 129 EXPECT_FALSE(d.equals(dd)); 130 } 131 132 TEST(DockInfoTest, CheckMonitorPoint) { 133 DockInfo d; 134 gfx::Point screen_loc[] = { 135 gfx::Point(0, 0), 136 gfx::Point(2 * kHotSpotDeltaX, kHotSpotDeltaY), 137 gfx::Point(2 * kHotSpotDeltaX, kHotSpotDeltaY), 138 }; 139 140 DockInfo::Type type[] = { 141 DockInfo::LEFT_HALF, 142 DockInfo::RIGHT_HALF, 143 DockInfo::MAXIMIZE 144 }; 145 146 bool expected_result[] = { 147 true, false, false 148 }; 149 150 for (size_t i = 0; i < arraysize(expected_result); ++i) { 151 bool result = d.CheckMonitorPoint(screen_loc[i], 0, 0, type[i]); 152 EXPECT_EQ(result, expected_result[i]); 153 if (result == true) { 154 EXPECT_EQ(0, d.hot_spot().x()); 155 EXPECT_EQ(0, d.hot_spot().y()); 156 EXPECT_EQ(type[i], d.type()); 157 } 158 } 159 } 160 161 TEST(DockInfoTest, GetPopupRect) { 162 DockInfo d; 163 d.set_hot_spot(gfx::Point(kPopupWidth, kPopupHeight)); 164 DockInfo::Type type[] = { 165 DockInfo::MAXIMIZE, 166 DockInfo::LEFT_HALF, 167 DockInfo::RIGHT_HALF, 168 DockInfo::BOTTOM_HALF, 169 }; 170 int expected_x[] = { 171 kPopupWidth/2, 172 kPopupWidth, 173 0, 174 kPopupWidth/2 175 }; 176 int expected_y[] = { 177 kPopupHeight, 178 kPopupHeight/2, 179 kPopupHeight/2, 180 0 181 }; 182 183 for (size_t i = 0; i < arraysize(type); ++i) { 184 d.set_type(type[i]); 185 gfx::Rect result = d.GetPopupRect(); 186 EXPECT_EQ(expected_x[i], result.x()); 187 EXPECT_EQ(expected_y[i], result.y()); 188 EXPECT_EQ(kPopupWidth, result.width()); 189 EXPECT_EQ(kPopupHeight, result.height()); 190 } 191 } 192