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: 18 OSExchangeDataTest() 19 : event_source_(ui::PlatformEventSource::CreateDefault()) {} 20 21 private: 22 base::MessageLoopForUI message_loop_; 23 scoped_ptr<PlatformEventSource> event_source_; 24 }; 25 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 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 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) 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