Home | History | Annotate | Download | only in dragdrop
      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