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

Side by Side Diff: components/clipboard/clipboard_unittest.cc

Issue 1978763003: Readd the clipboard service and get it compiling again. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Add OWNERS to the interfaces directory. Created 4 years, 7 months 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 unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2014 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 <stdint.h>
6 #include <utility>
7
8 #include "base/bind.h"
9 #include "base/macros.h"
10 #include "base/run_loop.h"
11 #include "components/clipboard/public/interfaces/clipboard.mojom.h"
12 #include "mojo/common/common_type_converters.h"
13 #include "services/shell/public/cpp/shell_connection.h"
14 #include "services/shell/public/cpp/shell_test.h"
15
16 using mojo::Array;
17 using mojo::Clipboard;
18 using mojo::Map;
19 using mojo::String;
20
21 namespace {
22
23 void CopyUint64AndEndRunloop(uint64_t* output,
24 base::RunLoop* run_loop,
25 uint64_t input) {
26 *output = input;
27 run_loop->Quit();
28 }
29
30 void CopyStringAndEndRunloop(std::string* output,
31 bool* string_is_null,
32 base::RunLoop* run_loop,
33 const Array<uint8_t>& input) {
34 *string_is_null = input.is_null();
35 *output = input.is_null() ? "" : input.To<std::string>();
36 run_loop->Quit();
37 }
38
39 void CopyVectorStringAndEndRunloop(std::vector<std::string>* output,
40 base::RunLoop* run_loop,
41 const Array<String>& input) {
42 *output = input.To<std::vector<std::string> >();
43 run_loop->Quit();
44 }
45
46 const char* kUninitialized = "Uninitialized data";
47 const char* kPlainTextData = "Some plain data";
48 const char* kHtmlData = "<html>data</html>";
49
50 } // namespace
51
52 namespace clipboard {
53
54 class ClipboardAppTest : public shell::test::ShellTest {
55 public:
56 ClipboardAppTest() : ShellTest("exe:clipboard_service_unittests") {}
57 ~ClipboardAppTest() override {}
58
59 // Overridden from shell::test::ShellTest:
60 void SetUp() override {
61 ShellTest::SetUp();
62 connector()->ConnectToInterface("mojo:clipboard", &clipboard_);
63 ASSERT_TRUE(clipboard_);
64 }
65
66 uint64_t GetSequenceNumber() {
67 base::RunLoop run_loop;
68 uint64_t sequence_num = 999999;
69 clipboard_->GetSequenceNumber(
70 Clipboard::Type::COPY_PASTE,
71 base::Bind(&CopyUint64AndEndRunloop, &sequence_num, &run_loop));
72 run_loop.Run();
73 return sequence_num;
74 }
75
76 std::vector<std::string> GetAvailableFormatMimeTypes() {
77 base::RunLoop run_loop;
78 std::vector<std::string> types;
79 types.push_back(kUninitialized);
80 clipboard_->GetAvailableMimeTypes(
81 Clipboard::Type::COPY_PASTE,
82 base::Bind(&CopyVectorStringAndEndRunloop, &types, &run_loop));
83 run_loop.Run();
84 return types;
85 }
86
87 bool GetDataOfType(const std::string& mime_type, std::string* data) {
88 base::RunLoop run_loop;
89 bool is_null = false;
90 clipboard_->ReadMimeType(
91 Clipboard::Type::COPY_PASTE, mime_type,
92 base::Bind(&CopyStringAndEndRunloop, data, &is_null, &run_loop));
93 run_loop.Run();
94 return !is_null;
95 }
96
97 void SetStringText(const std::string& data) {
98 Map<String, Array<uint8_t>> mime_data;
99 mime_data[Clipboard::MIME_TYPE_TEXT] = Array<uint8_t>::From(data);
100 clipboard_->WriteClipboardData(Clipboard::Type::COPY_PASTE,
101 std::move(mime_data));
102 }
103
104 protected:
105 mojo::ClipboardPtr clipboard_;
106
107 DISALLOW_COPY_AND_ASSIGN(ClipboardAppTest);
108 };
109
110 TEST_F(ClipboardAppTest, EmptyClipboardOK) {
111 EXPECT_EQ(0ul, GetSequenceNumber());
112 EXPECT_TRUE(GetAvailableFormatMimeTypes().empty());
113 std::string data;
114 EXPECT_FALSE(GetDataOfType(Clipboard::MIME_TYPE_TEXT, &data));
115 }
116
117 TEST_F(ClipboardAppTest, CanReadBackText) {
118 std::string data;
119 EXPECT_FALSE(GetDataOfType(Clipboard::MIME_TYPE_TEXT, &data));
120 EXPECT_EQ(0ul, GetSequenceNumber());
121
122 SetStringText(kPlainTextData);
123 EXPECT_EQ(1ul, GetSequenceNumber());
124
125 EXPECT_TRUE(GetDataOfType(Clipboard::MIME_TYPE_TEXT, &data));
126 EXPECT_EQ(kPlainTextData, data);
127 }
128
129 TEST_F(ClipboardAppTest, CanSetMultipleDataTypesAtOnce) {
130 Map<String, Array<uint8_t>> mime_data;
131 mime_data[Clipboard::MIME_TYPE_TEXT] =
132 Array<uint8_t>::From(std::string(kPlainTextData));
133 mime_data[Clipboard::MIME_TYPE_HTML] =
134 Array<uint8_t>::From(std::string(kHtmlData));
135
136 clipboard_->WriteClipboardData(Clipboard::Type::COPY_PASTE,
137 std::move(mime_data));
138
139 EXPECT_EQ(1ul, GetSequenceNumber());
140
141 std::string data;
142 EXPECT_TRUE(GetDataOfType(Clipboard::MIME_TYPE_TEXT, &data));
143 EXPECT_EQ(kPlainTextData, data);
144 EXPECT_TRUE(GetDataOfType(Clipboard::MIME_TYPE_HTML, &data));
145 EXPECT_EQ(kHtmlData, data);
146 }
147
148 TEST_F(ClipboardAppTest, CanClearClipboardWithZeroArray) {
149 std::string data;
150 SetStringText(kPlainTextData);
151 EXPECT_EQ(1ul, GetSequenceNumber());
152
153 EXPECT_TRUE(GetDataOfType(Clipboard::MIME_TYPE_TEXT, &data));
154 EXPECT_EQ(kPlainTextData, data);
155
156 Map<String, Array<uint8_t>> mime_data;
157 clipboard_->WriteClipboardData(Clipboard::Type::COPY_PASTE,
158 std::move(mime_data));
159
160 EXPECT_EQ(2ul, GetSequenceNumber());
161 EXPECT_FALSE(GetDataOfType(Clipboard::MIME_TYPE_TEXT, &data));
162 }
163
164 } // namespace clipboard
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698