summaryrefslogtreecommitdiffstats
path: root/chrome/browser/cocoa/web_drop_target_unittest.mm
blob: 03ad5c84289753007863be4030c2905722ba88b2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
// Copyright (c) 2009 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "base/scoped_nsautorelease_pool.h"
#include "base/sys_string_conversions.h"
#import "chrome/browser/cocoa/cocoa_test_helper.h"
#import "chrome/browser/cocoa/web_drop_target.h"
#include "chrome/browser/renderer_host/test/test_render_view_host.h"
#include "testing/gtest/include/gtest/gtest.h"
#import "third_party/mozilla/include/NSPasteboard+Utils.h"
#include "webkit/glue/webdropdata.h"

class WebDropTargetTest : public RenderViewHostTestHarness {
 public:
  virtual void SetUp() {
    RenderViewHostTestHarness::SetUp();
    CocoaTest::BootstrapCocoa();
    drop_target_.reset([[WebDropTarget alloc] initWithTabContents:contents()]);
  }

  void PutURLOnPasteboard(NSString* urlString, NSPasteboard* pboard) {
    [pboard declareTypes:[NSArray arrayWithObject:NSURLPboardType]
                   owner:nil];
    NSURL* url = [NSURL URLWithString:urlString];
    EXPECT_TRUE(url);
    [url writeToPasteboard:pboard];
  }

  base::ScopedNSAutoreleasePool pool_;
  scoped_nsobject<WebDropTarget> drop_target_;
};

// Make sure nothing leaks.
TEST_F(WebDropTargetTest, Init) {
  EXPECT_TRUE(drop_target_);
}

// Test flipping of coordinates given a point in window coordinates.
TEST_F(WebDropTargetTest, Flip) {
  NSPoint windowPoint = NSZeroPoint;
  scoped_nsobject<NSWindow> window([[CocoaTestHelperWindow alloc] init]);
  NSPoint viewPoint =
      [drop_target_ flipWindowPointToView:windowPoint
                                     view:[window contentView]];
  NSPoint screenPoint =
      [drop_target_ flipWindowPointToScreen:windowPoint
                               view:[window contentView]];
  EXPECT_EQ(viewPoint.x, 0);
  EXPECT_EQ(viewPoint.y, 600);
  EXPECT_EQ(screenPoint.x, 0);
  // We can't put a value on the screen size since everyone will have a
  // different one.
  EXPECT_NE(screenPoint.y, 0);
}

TEST_F(WebDropTargetTest, URL) {
  WebDropData data;

  // Put a URL on the pasteboard and check it.
  NSPasteboard* pboard = [NSPasteboard pasteboardWithUniqueName];
  PutURLOnPasteboard(@"http://www.google.com", pboard);
  [drop_target_ populateURLAndTitle:&data fromPasteboard:pboard];
  EXPECT_EQ(data.url.spec(), "http://www.google.com/");
  [pboard releaseGlobally];

  // Put a 'url ' and 'urln' on the pasteboard and check it.
  NSString* title = @"Title of Awesomeness!";
  pboard = [NSPasteboard pasteboardWithUniqueName];
  [pboard declareTypes:[NSArray arrayWithObjects:kCorePasteboardFlavorType_url,
                                        kCorePasteboardFlavorType_urln, nil]
                 owner:nil];
  [pboard setString:@"http://www.something.com/"
            forType:kCorePasteboardFlavorType_url];
  [pboard setString:title
            forType:kCorePasteboardFlavorType_urln];
  [drop_target_ populateURLAndTitle:&data fromPasteboard:pboard];
  EXPECT_EQ(data.url.spec(), "http://www.something.com/");
  EXPECT_EQ(data.url_title, base::SysNSStringToUTF16(title));

  [pboard releaseGlobally];
}

TEST_F(WebDropTargetTest, Data) {
  WebDropData data;
  NSPasteboard* pboard = [NSPasteboard pasteboardWithUniqueName];

  PutURLOnPasteboard(@"http://www.google.com", pboard);
  [pboard addTypes:[NSArray arrayWithObjects:NSHTMLPboardType,
                              NSStringPboardType, nil]
             owner:nil];
  NSString* htmlString = @"<html><body><b>hi there</b></body></html>";
  NSString* textString = @"hi there";
  [pboard setString:htmlString forType:NSHTMLPboardType];
  [pboard setString:textString forType:NSStringPboardType];
  [drop_target_ populateWebDropData:&data fromPasteboard:pboard];
  EXPECT_EQ(data.url.spec(), "http://www.google.com/");
  EXPECT_EQ(data.plain_text, base::SysNSStringToUTF16(textString));
  EXPECT_EQ(data.text_html, base::SysNSStringToUTF16(htmlString));

  [pboard releaseGlobally];
}

TEST_F(WebDropTargetTest, EnterExitDrop) {
  // TODO(pinkerton): Call enter/exit/drop and see what happens. This is a bit
  // harder to test.
}