| OLD | NEW |
| (Empty) |
| 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/files/file_util.h" | |
| 6 #include "base/message_loop/message_loop.h" | |
| 7 #include "base/pickle.h" | |
| 8 #include "base/strings/utf_string_conversions.h" | |
| 9 #include "net/base/filename_util.h" | |
| 10 #include "testing/gtest/include/gtest/gtest.h" | |
| 11 #include "testing/platform_test.h" | |
| 12 #include "ui/base/dragdrop/os_exchange_data.h" | |
| 13 #include "ui/events/platform/platform_event_source.h" | |
| 14 #include "url/gurl.h" | |
| 15 | |
| 16 namespace ui { | |
| 17 | |
| 18 class OSExchangeDataTest : public PlatformTest { | |
| 19 public: | |
| 20 OSExchangeDataTest() | |
| 21 : event_source_(ui::PlatformEventSource::CreateDefault()) {} | |
| 22 | |
| 23 private: | |
| 24 base::MessageLoopForUI message_loop_; | |
| 25 scoped_ptr<PlatformEventSource> event_source_; | |
| 26 }; | |
| 27 | |
| 28 TEST_F(OSExchangeDataTest, StringDataGetAndSet) { | |
| 29 OSExchangeData data; | |
| 30 base::string16 input = base::ASCIIToUTF16("I can has cheezburger?"); | |
| 31 EXPECT_FALSE(data.HasString()); | |
| 32 data.SetString(input); | |
| 33 EXPECT_TRUE(data.HasString()); | |
| 34 | |
| 35 OSExchangeData data2(data.provider().Clone()); | |
| 36 base::string16 output; | |
| 37 EXPECT_TRUE(data2.HasString()); | |
| 38 EXPECT_TRUE(data2.GetString(&output)); | |
| 39 EXPECT_EQ(input, output); | |
| 40 std::string url_spec = "http://www.goats.com/"; | |
| 41 GURL url(url_spec); | |
| 42 base::string16 title; | |
| 43 EXPECT_FALSE(data2.GetURLAndTitle( | |
| 44 OSExchangeData::DO_NOT_CONVERT_FILENAMES, &url, &title)); | |
| 45 // No URLs in |data|, so url should be untouched. | |
| 46 EXPECT_EQ(url_spec, url.spec()); | |
| 47 } | |
| 48 | |
| 49 TEST_F(OSExchangeDataTest, TestURLExchangeFormats) { | |
| 50 OSExchangeData data; | |
| 51 std::string url_spec = "http://www.google.com/"; | |
| 52 GURL url(url_spec); | |
| 53 base::string16 url_title = base::ASCIIToUTF16("www.google.com"); | |
| 54 EXPECT_FALSE(data.HasURL(OSExchangeData::DO_NOT_CONVERT_FILENAMES)); | |
| 55 data.SetURL(url, url_title); | |
| 56 EXPECT_TRUE(data.HasURL(OSExchangeData::DO_NOT_CONVERT_FILENAMES)); | |
| 57 | |
| 58 OSExchangeData data2(data.provider().Clone()); | |
| 59 | |
| 60 // URL spec and title should match | |
| 61 GURL output_url; | |
| 62 base::string16 output_title; | |
| 63 EXPECT_TRUE(data2.HasURL(OSExchangeData::DO_NOT_CONVERT_FILENAMES)); | |
| 64 EXPECT_TRUE(data2.GetURLAndTitle( | |
| 65 OSExchangeData::DO_NOT_CONVERT_FILENAMES, &output_url, &output_title)); | |
| 66 EXPECT_EQ(url_spec, output_url.spec()); | |
| 67 EXPECT_EQ(url_title, output_title); | |
| 68 base::string16 output_string; | |
| 69 | |
| 70 // URL should be the raw text response | |
| 71 EXPECT_TRUE(data2.GetString(&output_string)); | |
| 72 EXPECT_EQ(url_spec, base::UTF16ToUTF8(output_string)); | |
| 73 } | |
| 74 | |
| 75 // Test that setting the URL does not overwrite a previously set custom string. | |
| 76 TEST_F(OSExchangeDataTest, URLAndString) { | |
| 77 OSExchangeData data; | |
| 78 base::string16 string = base::ASCIIToUTF16("I can has cheezburger?"); | |
| 79 data.SetString(string); | |
| 80 std::string url_spec = "http://www.google.com/"; | |
| 81 GURL url(url_spec); | |
| 82 base::string16 url_title = base::ASCIIToUTF16("www.google.com"); | |
| 83 data.SetURL(url, url_title); | |
| 84 | |
| 85 base::string16 output_string; | |
| 86 EXPECT_TRUE(data.GetString(&output_string)); | |
| 87 EXPECT_EQ(string, output_string); | |
| 88 | |
| 89 GURL output_url; | |
| 90 base::string16 output_title; | |
| 91 EXPECT_TRUE(data.GetURLAndTitle( | |
| 92 OSExchangeData::DO_NOT_CONVERT_FILENAMES, &output_url, &output_title)); | |
| 93 EXPECT_EQ(url_spec, output_url.spec()); | |
| 94 EXPECT_EQ(url_title, output_title); | |
| 95 } | |
| 96 | |
| 97 TEST_F(OSExchangeDataTest, TestFileToURLConversion) { | |
| 98 OSExchangeData data; | |
| 99 EXPECT_FALSE(data.HasURL(OSExchangeData::DO_NOT_CONVERT_FILENAMES)); | |
| 100 EXPECT_FALSE(data.HasURL(OSExchangeData::CONVERT_FILENAMES)); | |
| 101 EXPECT_FALSE(data.HasFile()); | |
| 102 | |
| 103 base::FilePath current_directory; | |
| 104 ASSERT_TRUE(base::GetCurrentDirectory(¤t_directory)); | |
| 105 | |
| 106 data.SetFilename(current_directory); | |
| 107 | |
| 108 { | |
| 109 EXPECT_FALSE(data.HasURL(OSExchangeData::DO_NOT_CONVERT_FILENAMES)); | |
| 110 GURL actual_url; | |
| 111 base::string16 actual_title; | |
| 112 EXPECT_FALSE(data.GetURLAndTitle( | |
| 113 OSExchangeData::DO_NOT_CONVERT_FILENAMES, &actual_url, &actual_title)); | |
| 114 EXPECT_EQ(GURL(), actual_url); | |
| 115 EXPECT_EQ(base::string16(), actual_title); | |
| 116 } | |
| 117 | |
| 118 { | |
| 119 // Filename to URL conversion is not implemented on ChromeOS or on non-X11 Linux | |
| 120 // builds. | |
| 121 #if defined(OS_CHROMEOS) || (defined(OS_LINUX) && !defined(USE_X11)) | |
| 122 const bool expected_success = false; | |
| 123 const GURL expected_url; | |
| 124 #else | |
| 125 const bool expected_success = true; | |
| 126 const GURL expected_url(net::FilePathToFileURL(current_directory)); | |
| 127 #endif | |
| 128 EXPECT_EQ(expected_success, data.HasURL(OSExchangeData::CONVERT_FILENAMES)); | |
| 129 GURL actual_url; | |
| 130 base::string16 actual_title; | |
| 131 EXPECT_EQ( | |
| 132 expected_success, | |
| 133 data.GetURLAndTitle( | |
| 134 OSExchangeData::CONVERT_FILENAMES, &actual_url, &actual_title)); | |
| 135 // Some Mac OS versions return the URL in file://localhost form instead | |
| 136 // of file:///, so we compare the url's path not its absolute string. | |
| 137 EXPECT_EQ(expected_url.path(), actual_url.path()); | |
| 138 EXPECT_EQ(base::string16(), actual_title); | |
| 139 } | |
| 140 EXPECT_TRUE(data.HasFile()); | |
| 141 base::FilePath actual_path; | |
| 142 EXPECT_TRUE(data.GetFilename(&actual_path)); | |
| 143 EXPECT_EQ(current_directory, actual_path); | |
| 144 } | |
| 145 | |
| 146 TEST_F(OSExchangeDataTest, TestPickledData) { | |
| 147 const OSExchangeData::CustomFormat kTestFormat = | |
| 148 ui::Clipboard::GetFormatType("application/vnd.chromium.test"); | |
| 149 | |
| 150 Pickle saved_pickle; | |
| 151 saved_pickle.WriteInt(1); | |
| 152 saved_pickle.WriteInt(2); | |
| 153 OSExchangeData data; | |
| 154 data.SetPickledData(kTestFormat, saved_pickle); | |
| 155 | |
| 156 OSExchangeData copy(data.provider().Clone()); | |
| 157 EXPECT_TRUE(copy.HasCustomFormat(kTestFormat)); | |
| 158 | |
| 159 Pickle restored_pickle; | |
| 160 EXPECT_TRUE(copy.GetPickledData(kTestFormat, &restored_pickle)); | |
| 161 PickleIterator iterator(restored_pickle); | |
| 162 int value; | |
| 163 EXPECT_TRUE(restored_pickle.ReadInt(&iterator, &value)); | |
| 164 EXPECT_EQ(1, value); | |
| 165 EXPECT_TRUE(restored_pickle.ReadInt(&iterator, &value)); | |
| 166 EXPECT_EQ(2, value); | |
| 167 } | |
| 168 | |
| 169 #if defined(USE_AURA) | |
| 170 TEST_F(OSExchangeDataTest, TestHTML) { | |
| 171 OSExchangeData data; | |
| 172 GURL url("http://www.google.com/"); | |
| 173 base::string16 html = base::ASCIIToUTF16( | |
| 174 "<HTML>\n<BODY>\n" | |
| 175 "<b>bold.</b> <i><b>This is bold italic.</b></i>\n" | |
| 176 "</BODY>\n</HTML>"); | |
| 177 data.SetHtml(html, url); | |
| 178 | |
| 179 OSExchangeData copy(data.provider().Clone()); | |
| 180 base::string16 read_html; | |
| 181 EXPECT_TRUE(copy.GetHtml(&read_html, &url)); | |
| 182 EXPECT_EQ(html, read_html); | |
| 183 } | |
| 184 #endif | |
| 185 | |
| 186 } // namespace ui | |
| OLD | NEW |