Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1158)

Unified Diff: ui/base/clipboard/clipboard_test_template.h

Issue 720373003: Add FakeClipboard implementation for unit tests. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: WINDOWS!!! Created 6 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « ui/base/clipboard/clipboard_mac.mm ('k') | ui/base/clipboard/clipboard_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ui/base/clipboard/clipboard_test_template.h
diff --git a/ui/base/clipboard/clipboard_unittest.cc b/ui/base/clipboard/clipboard_test_template.h
similarity index 80%
copy from ui/base/clipboard/clipboard_unittest.cc
copy to ui/base/clipboard/clipboard_test_template.h
index b2bb63c81bee41097ff2dd77a4590b03f6153d0f..2a6c2a72b3b03e70657482fe04c1ba13ce1fb19b 100644
--- a/ui/base/clipboard/clipboard_unittest.cc
+++ b/ui/base/clipboard/clipboard_test_template.h
@@ -1,6 +1,16 @@
// Copyright (c) 2012 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.
+//
+// Note: This header doesn't use REGISTER_TYPED_TEST_CASE_P like most
+// type-parameterized gtests. There are lot of test cases in here that are only
+// enabled on certain platforms. However, preprocessor directives in macro
+// arguments result in undefined behavior (and don't work on MSVC). Instead,
+// 'parameterized' tests should typedef TypesToTest (which is used to
+// instantiate the tests using the TYPED_TEST_CASE macro) and then #include this
+// header.
+// TODO(dcheng): This is really horrible. In general, all tests should run on
+// all platforms, to avoid this mess.
#include "build/build_config.h"
@@ -21,17 +31,13 @@
#include "third_party/skia/include/core/SkUnPreMultiply.h"
#include "ui/base/clipboard/clipboard.h"
#include "ui/base/clipboard/scoped_clipboard_writer.h"
+#include "ui/base/test/test_clipboard.h"
#include "ui/gfx/size.h"
#if defined(OS_WIN)
#include "ui/base/clipboard/clipboard_util_win.h"
#endif
-#if defined(OS_ANDROID)
-#include "base/android/jni_android.h"
-#include "base/android/jni_string.h"
-#endif
-
#if defined(USE_AURA)
#include "ui/events/platform/platform_event_source.h"
#endif
@@ -76,27 +82,13 @@ class ClipboardTest : public PlatformTest {
Clipboard* const clipboard_;
};
-namespace {
-
-bool MarkupMatches(const base::string16& expected_markup,
- const base::string16& actual_markup) {
- return actual_markup.find(expected_markup) != base::string16::npos;
-}
-
-} // namespace
-
-struct PlatformClipboardTraits {
- static Clipboard* Create() {
- return Clipboard::GetForCurrentThread();
- }
-
- static void Destroy(Clipboard* clipboard) {
- ASSERT_EQ(Clipboard::GetForCurrentThread(), clipboard);
- Clipboard::DestroyClipboardForCurrentThread();
- }
+// Hack for tests that need to call static methods of ClipboardTest.
+struct NullClipboardTraits {
+ static Clipboard* Create() { return nullptr; }
+ static void Destroy(Clipboard*) {}
};
-TYPED_TEST_CASE(ClipboardTest, PlatformClipboardTraits);
+TYPED_TEST_CASE(ClipboardTest, TypesToTest);
TYPED_TEST(ClipboardTest, ClearTest) {
{
@@ -145,10 +137,13 @@ TYPED_TEST(ClipboardTest, HTMLTest) {
EXPECT_TRUE(this->clipboard().IsFormatAvailable(
Clipboard::GetHtmlFormatType(), CLIPBOARD_TYPE_COPY_PASTE));
- uint32 ignored;
+ uint32 fragment_start;
+ uint32 fragment_end;
this->clipboard().ReadHTML(CLIPBOARD_TYPE_COPY_PASTE, &markup_result,
- &url_result, &ignored, &ignored);
- EXPECT_PRED2(MarkupMatches, markup, markup_result);
+ &url_result, &fragment_start, &fragment_end);
+ EXPECT_LE(markup.size(), fragment_end - fragment_start);
+ EXPECT_EQ(markup,
+ markup_result.substr(fragment_end - markup.size(), markup.size()));
#if defined(OS_WIN)
// TODO(playmobil): It's not clear that non windows clipboards need to support
// this.
@@ -205,11 +200,14 @@ TYPED_TEST(ClipboardTest, MultipleBufferTest) {
this->clipboard().ReadText(CLIPBOARD_TYPE_COPY_PASTE, &text_result);
EXPECT_EQ(text, text_result);
- uint32 ignored;
base::string16 markup_result;
+ uint32 fragment_start;
+ uint32 fragment_end;
this->clipboard().ReadHTML(CLIPBOARD_TYPE_SELECTION, &markup_result,
- &url_result, &ignored, &ignored);
- EXPECT_PRED2(MarkupMatches, markup, markup_result);
+ &url_result, &fragment_start, &fragment_end);
+ EXPECT_LE(markup.size(), fragment_end - fragment_start);
+ EXPECT_EQ(markup,
+ markup_result.substr(fragment_end - markup.size(), markup.size()));
}
#endif
@@ -227,10 +225,13 @@ TYPED_TEST(ClipboardTest, TrickyHTMLTest) {
EXPECT_TRUE(this->clipboard().IsFormatAvailable(
Clipboard::GetHtmlFormatType(), CLIPBOARD_TYPE_COPY_PASTE));
- uint32 ignored;
+ uint32 fragment_start;
+ uint32 fragment_end;
this->clipboard().ReadHTML(CLIPBOARD_TYPE_COPY_PASTE, &markup_result,
- &url_result, &ignored, &ignored);
- EXPECT_PRED2(MarkupMatches, markup, markup_result);
+ &url_result, &fragment_start, &fragment_end);
+ EXPECT_LE(markup.size(), fragment_end - fragment_start);
+ EXPECT_EQ(markup,
+ markup_result.substr(fragment_end - markup.size(), markup.size()));
#if defined(OS_WIN)
// TODO(playmobil): It's not clear that non windows clipboards need to support
// this.
@@ -238,8 +239,9 @@ TYPED_TEST(ClipboardTest, TrickyHTMLTest) {
#endif // defined(OS_WIN)
}
-#if defined(OS_WIN)
-TYPED_TEST(ClipboardTest, UniodeHTMLTest) {
+// Some platforms store HTML as UTF-8 internally. Make sure fragment indices are
+// adjusted appropriately when converting back to UTF-16.
+TYPED_TEST(ClipboardTest, UnicodeHTMLTest) {
base::string16 markup(UTF8ToUTF16("<div>A \xc3\xb8 \xe6\xb0\xb4</div>")),
markup_result;
std::string url, url_result;
@@ -255,13 +257,13 @@ TYPED_TEST(ClipboardTest, UniodeHTMLTest) {
uint32 fragment_end;
this->clipboard().ReadHTML(CLIPBOARD_TYPE_COPY_PASTE, &markup_result,
&url_result, &fragment_start, &fragment_end);
- EXPECT_PRED2(MarkupMatches, markup, markup_result);
+ EXPECT_LE(markup.size(), fragment_end - fragment_start);
+ EXPECT_EQ(markup,
+ markup_result.substr(fragment_end - markup.size(), markup.size()));
+#if defined(OS_WIN)
EXPECT_EQ(url, url_result);
- // Make sure that fragment indices were adjusted when converting.
- EXPECT_EQ(36, fragment_start);
- EXPECT_EQ(52, fragment_end);
+#endif
}
-#endif // defined(OS_WIN)
// TODO(estade): Port the following test (decide what target we use for urls)
#if !defined(OS_POSIX) || defined(OS_MACOSX)
@@ -300,10 +302,13 @@ TYPED_TEST(ClipboardTest, MultiFormatTest) {
Clipboard::GetPlainTextWFormatType(), CLIPBOARD_TYPE_COPY_PASTE));
EXPECT_TRUE(this->clipboard().IsFormatAvailable(
Clipboard::GetPlainTextFormatType(), CLIPBOARD_TYPE_COPY_PASTE));
- uint32 ignored;
+ uint32 fragment_start;
+ uint32 fragment_end;
this->clipboard().ReadHTML(CLIPBOARD_TYPE_COPY_PASTE, &markup_result,
- &url_result, &ignored, &ignored);
- EXPECT_PRED2(MarkupMatches, markup, markup_result);
+ &url_result, &fragment_start, &fragment_end);
+ EXPECT_LE(markup.size(), fragment_end - fragment_start);
+ EXPECT_EQ(markup,
+ markup_result.substr(fragment_end - markup.size(), markup.size()));
#if defined(OS_WIN)
// TODO(playmobil): It's not clear that non windows clipboards need to support
// this.
@@ -336,7 +341,8 @@ TYPED_TEST(ClipboardTest, URLTest) {
this->clipboard().ReadAsciiText(CLIPBOARD_TYPE_COPY_PASTE, &ascii_text);
EXPECT_EQ(UTF16ToUTF8(url), ascii_text);
-#if defined(OS_POSIX) && !defined(OS_MACOSX) && !defined(OS_ANDROID)
+#if defined(OS_POSIX) && !defined(OS_MACOSX) && !defined(OS_ANDROID) && \
+ !defined(OS_CHROMEOS)
ascii_text.clear();
this->clipboard().ReadAsciiText(CLIPBOARD_TYPE_SELECTION, &ascii_text);
EXPECT_EQ(UTF16ToUTF8(url), ascii_text);
@@ -384,13 +390,13 @@ static void TestBitmapWrite(Clipboard* clipboard,
Clipboard::ObjectMap objects;
objects[Clipboard::CBF_SMBITMAP] = params;
- ASSERT_TRUE(Clipboard::ReplaceSharedMemHandle(
- &objects, handle_to_share, current_process));
+ ASSERT_TRUE(Clipboard::ReplaceSharedMemHandle(&objects, handle_to_share,
+ current_process));
// This is pretty ugly, but the template type parameter is irrelevant... and
// this test will be going away anyway.
- ClipboardTest<PlatformClipboardTraits>::WriteObjectsToClipboard(clipboard,
- objects);
+ ClipboardTest<NullClipboardTraits>::WriteObjectsToClipboard(clipboard,
+ objects);
EXPECT_TRUE(clipboard->IsFormatAvailable(Clipboard::GetBitmapFormatType(),
CLIPBOARD_TYPE_COPY_PASTE));
@@ -402,8 +408,7 @@ static void TestBitmapWrite(Clipboard* clipboard,
for (int i = 0; i < image.width(); ++i) {
int offset = i + j * image.width();
uint32 pixel = SkPreMultiplyColor(bitmap_data[offset]);
- EXPECT_EQ(pixel, row_address[i])
- << "i = " << i << ", j = " << j;
+ EXPECT_EQ(pixel, row_address[i]) << "i = " << i << ", j = " << j;
}
}
}
@@ -626,9 +631,9 @@ TYPED_TEST(ClipboardTest, MultipleDataTest) {
TYPED_TEST(ClipboardTest, HyperlinkTest) {
const std::string kTitle("The <Example> Company's \"home page\"");
const std::string kUrl("http://www.example.com?x=3&lt=3#\"'<>");
- const std::string kExpectedHtml(
+ const base::string16 kExpectedHtml(UTF8ToUTF16(
"<a href=\"http://www.example.com?x=3&amp;lt=3#&quot;&#39;&lt;&gt;\">"
- "The &lt;Example&gt; Company&#39;s &quot;home page&quot;</a>");
+ "The &lt;Example&gt; Company&#39;s &quot;home page&quot;</a>"));
std::string url_result;
base::string16 html_result;
@@ -639,10 +644,13 @@ TYPED_TEST(ClipboardTest, HyperlinkTest) {
EXPECT_TRUE(this->clipboard().IsFormatAvailable(
Clipboard::GetHtmlFormatType(), CLIPBOARD_TYPE_COPY_PASTE));
- uint32 ignored;
+ uint32 fragment_start;
+ uint32 fragment_end;
this->clipboard().ReadHTML(CLIPBOARD_TYPE_COPY_PASTE, &html_result,
- &url_result, &ignored, &ignored);
- EXPECT_PRED2(MarkupMatches, ASCIIToUTF16(kExpectedHtml), html_result);
+ &url_result, &fragment_start, &fragment_end);
+ EXPECT_EQ(kExpectedHtml,
+ html_result.substr(fragment_end - kExpectedHtml.size(),
+ kExpectedHtml.size()));
}
#endif
@@ -667,36 +675,38 @@ void HtmlTestHelper(const std::string& cf_html,
TYPED_TEST(ClipboardTest, HtmlTest) {
// Test converting from CF_HTML format data with <!--StartFragment--> and
// <!--EndFragment--> comments, like from MS Word.
- HtmlTestHelper("Version:1.0\r\n"
- "StartHTML:0000000105\r\n"
- "EndHTML:0000000199\r\n"
- "StartFragment:0000000123\r\n"
- "EndFragment:0000000161\r\n"
- "\r\n"
- "<html>\r\n"
- "<body>\r\n"
- "<!--StartFragment-->\r\n"
- "\r\n"
- "<p>Foo</p>\r\n"
- "\r\n"
- "<!--EndFragment-->\r\n"
- "</body>\r\n"
- "</html>\r\n\r\n",
- "<p>Foo</p>");
+ HtmlTestHelper(
+ "Version:1.0\r\n"
+ "StartHTML:0000000105\r\n"
+ "EndHTML:0000000199\r\n"
+ "StartFragment:0000000123\r\n"
+ "EndFragment:0000000161\r\n"
+ "\r\n"
+ "<html>\r\n"
+ "<body>\r\n"
+ "<!--StartFragment-->\r\n"
+ "\r\n"
+ "<p>Foo</p>\r\n"
+ "\r\n"
+ "<!--EndFragment-->\r\n"
+ "</body>\r\n"
+ "</html>\r\n\r\n",
+ "<p>Foo</p>");
// Test converting from CF_HTML format data without <!--StartFragment--> and
// <!--EndFragment--> comments, like from OpenOffice Writer.
- HtmlTestHelper("Version:1.0\r\n"
- "StartHTML:0000000105\r\n"
- "EndHTML:0000000151\r\n"
- "StartFragment:0000000121\r\n"
- "EndFragment:0000000131\r\n"
- "<html>\r\n"
- "<body>\r\n"
- "<p>Foo</p>\r\n"
- "</body>\r\n"
- "</html>\r\n\r\n",
- "<p>Foo</p>");
+ HtmlTestHelper(
+ "Version:1.0\r\n"
+ "StartHTML:0000000105\r\n"
+ "EndHTML:0000000151\r\n"
+ "StartFragment:0000000121\r\n"
+ "EndFragment:0000000131\r\n"
+ "<html>\r\n"
+ "<body>\r\n"
+ "<p>Foo</p>\r\n"
+ "</body>\r\n"
+ "</html>\r\n\r\n",
+ "<p>Foo</p>");
}
#endif // defined(OS_WIN)
@@ -744,73 +754,4 @@ TYPED_TEST(ClipboardTest, GetSequenceNumber) {
}
#endif
-#if defined(OS_ANDROID)
-
-// Test that if another application writes some text to the pasteboard the
-// clipboard properly invalidates other types.
-TYPED_TEST(ClipboardTest, InternalClipboardInvalidation) {
- // Write a Webkit smart paste tag to our clipboard.
- {
- ScopedClipboardWriter clipboard_writer(CLIPBOARD_TYPE_COPY_PASTE);
- clipboard_writer.WriteWebSmartPaste();
- }
- EXPECT_TRUE(this->clipboard().IsFormatAvailable(
- Clipboard::GetWebKitSmartPasteFormatType(), CLIPBOARD_TYPE_COPY_PASTE));
-
- //
- // Simulate that another application copied something in the Clipboard
- //
- std::string new_value("Some text copied by some other app");
- using base::android::ConvertUTF8ToJavaString;
- using base::android::MethodID;
- using base::android::ScopedJavaLocalRef;
-
- JNIEnv* env = base::android::AttachCurrentThread();
- ASSERT_TRUE(env);
-
- jobject context = base::android::GetApplicationContext();
- ASSERT_TRUE(context);
-
- ScopedJavaLocalRef<jclass> context_class =
- base::android::GetClass(env, "android/content/Context");
-
- jmethodID get_system_service = MethodID::Get<MethodID::TYPE_INSTANCE>(
- env, context_class.obj(), "getSystemService",
- "(Ljava/lang/String;)Ljava/lang/Object;");
-
- // Retrieve the system service.
- ScopedJavaLocalRef<jstring> service_name = ConvertUTF8ToJavaString(
- env, "clipboard");
- ScopedJavaLocalRef<jobject> clipboard_manager(
- env, env->CallObjectMethod(
- context, get_system_service, service_name.obj()));
- ASSERT_TRUE(clipboard_manager.obj() && !base::android::ClearException(env));
-
- ScopedJavaLocalRef<jclass> clipboard_class =
- base::android::GetClass(env, "android/text/ClipboardManager");
- jmethodID set_text = MethodID::Get<MethodID::TYPE_INSTANCE>(
- env, clipboard_class.obj(), "setText", "(Ljava/lang/CharSequence;)V");
- ScopedJavaLocalRef<jstring> new_value_string = ConvertUTF8ToJavaString(
- env, new_value.c_str());
-
- // Will need to call toString as CharSequence is not always a String.
- env->CallVoidMethod(clipboard_manager.obj(),
- set_text,
- new_value_string.obj());
-
- // The WebKit smart paste tag should now be gone.
- EXPECT_FALSE(this->clipboard().IsFormatAvailable(
- Clipboard::GetWebKitSmartPasteFormatType(), CLIPBOARD_TYPE_COPY_PASTE));
-
- // Make sure some text is available
- EXPECT_TRUE(this->clipboard().IsFormatAvailable(
- Clipboard::GetPlainTextWFormatType(), CLIPBOARD_TYPE_COPY_PASTE));
-
- // Make sure the text is what we inserted while simulating the other app
- std::string contents;
- this->clipboard().ReadAsciiText(CLIPBOARD_TYPE_COPY_PASTE, &contents);
- EXPECT_EQ(contents, new_value);
-}
-#endif
-
} // namespace ui
« no previous file with comments | « ui/base/clipboard/clipboard_mac.mm ('k') | ui/base/clipboard/clipboard_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698