Index: webkit/glue/webcursor_unittest.cc |
=================================================================== |
--- webkit/glue/webcursor_unittest.cc (revision 58015) |
+++ webkit/glue/webcursor_unittest.cc (working copy) |
@@ -4,9 +4,12 @@ |
#include "base/pickle.h" |
#include "testing/gtest/include/gtest/gtest.h" |
+#include "third_party/WebKit/WebKit/chromium/public/WebCursorInfo.h" |
#include "webkit/glue/webcursor.h" |
#include "webkit/tools/test_shell/test_shell_test.h" |
+using WebKit::WebCursorInfo; |
+ |
TEST(WebCursorTest, CursorSerialization) { |
WebCursor custom_cursor; |
// This is a valid custom cursor. |
@@ -80,3 +83,36 @@ |
EXPECT_FALSE(custom_cursor.Deserialize(&neg_custom_pickle, &iter)); |
} |
+TEST(WebCursorTest, ClampHotspot) { |
+ WebCursor custom_cursor; |
+ // This is a valid custom cursor. |
+ Pickle ok_custom_pickle; |
+ // Type and hotspots. |
+ ok_custom_pickle.WriteInt(WebCursorInfo::TypeCustom); |
+ // Hotspot is invalid --- outside the bounds of the image. |
+ ok_custom_pickle.WriteInt(5); |
+ ok_custom_pickle.WriteInt(5); |
+ // X & Y |
+ ok_custom_pickle.WriteInt(2); |
+ ok_custom_pickle.WriteInt(2); |
+ // Data len including enough data for a 2x2 image. |
+ ok_custom_pickle.WriteInt(4 * 4); |
+ for (size_t i = 0; i < 4; i++) |
+ ok_custom_pickle.WriteUInt32(0); |
+ // Custom Windows message. |
+ ok_custom_pickle.WriteUInt32(0); |
+ void* iter = NULL; |
+ ASSERT_TRUE(custom_cursor.Deserialize(&ok_custom_pickle, &iter)); |
+ |
+ // Convert to WebCursorInfo, make sure the hotspot got clamped. |
+ WebCursorInfo info; |
+ custom_cursor.GetCursorInfo(&info); |
+ EXPECT_EQ(gfx::Point(1, 1), gfx::Point(info.hotSpot)); |
+ |
+ // Set hotspot to an invalid point again, pipe back through WebCursor, |
+ // and make sure the hotspot got clamped again. |
+ info.hotSpot = gfx::Point(-1, -1); |
+ custom_cursor.InitFromCursorInfo(info); |
+ custom_cursor.GetCursorInfo(&info); |
+ EXPECT_EQ(gfx::Point(0, 0), gfx::Point(info.hotSpot)); |
+} |