1 // Copyright 2013 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/message_loop/message_loop.h"
6 #include "base/pickle.h"
7 #include "base/strings/utf_string_conversions.h"
8 #include "testing/gtest/include/gtest/gtest.h"
9 #include "testing/platform_test.h"
10 #include "ui/base/dragdrop/os_exchange_data.h"
11 #include "ui/events/platform/platform_event_source.h"
12 #include "url/gurl.h"
13
14 namespace ui {
15
16 class OSExchangeDataTest : public PlatformTest {
17 public:
OSExchangeDataTest()18 OSExchangeDataTest()
19 : event_source_(ui::PlatformEventSource::CreateDefault()) {}
20
21 private:
22 base::MessageLoopForUI message_loop_;
23 scoped_ptr<PlatformEventSource> event_source_;
24 };
25
TEST_F(OSExchangeDataTest,StringDataGetAndSet)26 TEST_F(OSExchangeDataTest, StringDataGetAndSet) {
27 OSExchangeData data;
28 base::string16 input = base::ASCIIToUTF16("I can has cheezburger?");
29 data.SetString(input);
30
31 OSExchangeData data2(data.provider().Clone());
32 base::string16 output;
33 EXPECT_TRUE(data2.GetString(&output));
34 EXPECT_EQ(input, output);
35 std::string url_spec = "http://www.goats.com/";
36 GURL url(url_spec);
37 base::string16 title;
38 EXPECT_FALSE(
39 data2.GetURLAndTitle(OSExchangeData::CONVERT_FILENAMES, &url, &title));
40 // No URLs in |data|, so url should be untouched.
41 EXPECT_EQ(url_spec, url.spec());
42 }
43
TEST_F(OSExchangeDataTest,TestURLExchangeFormats)44 TEST_F(OSExchangeDataTest, TestURLExchangeFormats) {
45 OSExchangeData data;
46 std::string url_spec = "http://www.google.com/";
47 GURL url(url_spec);
48 base::string16 url_title = base::ASCIIToUTF16("www.google.com");
49 data.SetURL(url, url_title);
50 base::string16 output;
51
52 OSExchangeData data2(data.provider().Clone());
53
54 // URL spec and title should match
55 GURL output_url;
56 base::string16 output_title;
57 EXPECT_TRUE(data2.GetURLAndTitle(
58 OSExchangeData::CONVERT_FILENAMES, &output_url, &output_title));
59 EXPECT_EQ(url_spec, output_url.spec());
60 EXPECT_EQ(url_title, output_title);
61 base::string16 output_string;
62
63 // URL should be the raw text response
64 EXPECT_TRUE(data2.GetString(&output_string));
65 EXPECT_EQ(url_spec, base::UTF16ToUTF8(output_string));
66 }
67
TEST_F(OSExchangeDataTest,TestPickledData)68 TEST_F(OSExchangeDataTest, TestPickledData) {
69 const OSExchangeData::CustomFormat kTestFormat =
70 ui::Clipboard::GetFormatType("application/vnd.chromium.test");
71
72 Pickle saved_pickle;
73 saved_pickle.WriteInt(1);
74 saved_pickle.WriteInt(2);
75 OSExchangeData data;
76 data.SetPickledData(kTestFormat, saved_pickle);
77
78 OSExchangeData copy(data.provider().Clone());
79 EXPECT_TRUE(copy.HasCustomFormat(kTestFormat));
80
81 Pickle restored_pickle;
82 EXPECT_TRUE(copy.GetPickledData(kTestFormat, &restored_pickle));
83 PickleIterator iterator(restored_pickle);
84 int value;
85 EXPECT_TRUE(restored_pickle.ReadInt(&iterator, &value));
86 EXPECT_EQ(1, value);
87 EXPECT_TRUE(restored_pickle.ReadInt(&iterator, &value));
88 EXPECT_EQ(2, value);
89 }
90
91 #if defined(USE_AURA)
TEST_F(OSExchangeDataTest,TestHTML)92 TEST_F(OSExchangeDataTest, TestHTML) {
93 OSExchangeData data;
94 GURL url("http://www.google.com/");
95 base::string16 html = base::ASCIIToUTF16(
96 "<HTML>\n<BODY>\n"
97 "<b>bold.</b> <i><b>This is bold italic.</b></i>\n"
98 "</BODY>\n</HTML>");
99 data.SetHtml(html, url);
100
101 OSExchangeData copy(data.provider().Clone());
102 base::string16 read_html;
103 EXPECT_TRUE(copy.GetHtml(&read_html, &url));
104 EXPECT_EQ(html, read_html);
105 }
106 #endif
107
108 } // namespace ui
109