- add sources.
[platform/framework/web/crosswalk.git] / src / remoting / protocol / clipboard_echo_filter_unittest.cc
1 // Copyright (c) 2012 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 "remoting/protocol/clipboard_echo_filter.h"
6
7 #include "remoting/proto/event.pb.h"
8 #include "remoting/protocol/protocol_mock_objects.h"
9 #include "testing/gmock/include/gmock/gmock.h"
10 #include "testing/gtest/include/gtest/gtest.h"
11
12 using ::testing::_;
13 using ::testing::InSequence;
14
15 namespace remoting {
16 namespace protocol {
17
18 MATCHER_P2(EqualsClipboardEvent, mime_type, data, "") {
19   return arg.mime_type() == mime_type && arg.data() == data;
20 }
21
22 static ClipboardEvent MakeClipboardEvent(const std::string& mime_type,
23                                          const std::string& data) {
24   ClipboardEvent event;
25   event.set_mime_type(mime_type);
26   event.set_data(data);
27   return event;
28 }
29
30 // Check that the filter only filters out events identical to the latest
31 // clipboard item from the client.
32 TEST(ClipboardEchoFilterTest, FromClientBlocksIdenticalEventToClient) {
33   MockClipboardStub client_stub;
34   MockClipboardStub host_stub;
35
36   {
37     InSequence s;
38     EXPECT_CALL(host_stub,
39                 InjectClipboardEvent(EqualsClipboardEvent("text", "a")));
40     EXPECT_CALL(host_stub,
41                 InjectClipboardEvent(EqualsClipboardEvent("text", "b")));
42     EXPECT_CALL(client_stub,
43                 InjectClipboardEvent(EqualsClipboardEvent("text", "a")));
44     EXPECT_CALL(host_stub,
45                 InjectClipboardEvent(EqualsClipboardEvent("image", "a")));
46     EXPECT_CALL(client_stub,
47                 InjectClipboardEvent(EqualsClipboardEvent("text", "a")));
48   }
49
50   ClipboardEchoFilter filter;
51   filter.set_client_stub(&client_stub);
52   filter.set_host_stub(&host_stub);
53
54   filter.host_filter()->InjectClipboardEvent(
55       MakeClipboardEvent("text", "a"));
56   // The client has sent ("text", "a") to the host, so make sure the filter
57   // will stop the host echoing that item back to the client.
58   filter.client_filter()->InjectClipboardEvent(
59       MakeClipboardEvent("text", "a"));
60   filter.host_filter()->InjectClipboardEvent(
61       MakeClipboardEvent("text", "b"));
62   filter.client_filter()->InjectClipboardEvent(
63       MakeClipboardEvent("text", "a"));
64   filter.host_filter()->InjectClipboardEvent(
65       MakeClipboardEvent("image", "a"));
66   filter.client_filter()->InjectClipboardEvent(
67       MakeClipboardEvent("text", "a"));
68 }
69
70 // Check that the filter will drop events sent to the host, if there is no host
71 // stub, whether or not there is a client stub.
72 TEST(ClipboardEchoFilterTest, NoHostStub) {
73   MockClipboardStub client_stub;
74   MockClipboardStub host_stub;
75
76   EXPECT_CALL(host_stub,
77               InjectClipboardEvent(EqualsClipboardEvent("text", "a")));
78
79   ClipboardEchoFilter filter;
80   ClipboardEvent event = MakeClipboardEvent("text", "a");
81   filter.host_filter()->InjectClipboardEvent(event);
82
83   filter.set_client_stub(&client_stub);
84   filter.host_filter()->InjectClipboardEvent(event);
85
86   filter.set_host_stub(&host_stub);
87   filter.host_filter()->InjectClipboardEvent(event);
88 }
89
90 // Check that the filter will drop events sent to the client, if there is no
91 // client stub, whether or not there is a host stub.
92 TEST(ClipboardEchoFilter, NoClientStub) {
93   MockClipboardStub client_stub;
94   MockClipboardStub host_stub;
95
96   EXPECT_CALL(client_stub,
97               InjectClipboardEvent(EqualsClipboardEvent("text", "a")));
98
99   ClipboardEchoFilter filter;
100   ClipboardEvent event = MakeClipboardEvent("text", "a");
101   filter.client_filter()->InjectClipboardEvent(event);
102
103   filter.set_host_stub(&host_stub);
104   filter.client_filter()->InjectClipboardEvent(event);
105
106   filter.set_client_stub(&client_stub);
107   filter.client_filter()->InjectClipboardEvent(event);
108 }
109
110 }  // namespace protocol
111 }  // namespace remoting