Home | History | Annotate | Download | only in tabs
      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