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

Side by Side Diff: chrome/common/ipc_test_sink.h

Issue 6290008: Move the TestSink for doing IPC tests from chrome/common into IPC and create ... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Created 9 years, 11 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 | Annotate | Revision Log
« no previous file with comments | « chrome/chrome_tests.gypi ('k') | chrome/common/ipc_test_sink.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright (c) 2010 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 #ifndef CHROME_COMMON_IPC_TEST_SINK_H_
6 #define CHROME_COMMON_IPC_TEST_SINK_H_
7 #pragma once
8
9 #include <utility>
10 #include <vector>
11
12 #include "base/basictypes.h"
13 #include "ipc/ipc_channel.h"
14
15 namespace IPC {
16
17 class Message;
18
19 // This test sink provides a "sink" for IPC messages that are sent. It allows
20 // the caller to query messages received in various different ways. It is
21 // designed for tests for objects that use the IPC system.
22 //
23 // Typical usage:
24 //
25 // test_sink.ClearMessages();
26 // do_something();
27 //
28 // // We should have gotten exactly one update state message.
29 // EXPECT_TRUE(test_sink.GetUniqeMessageMatching(ViewHostMsg_Update::ID));
30 // // ...and no start load messages.
31 // EXPECT_FALSE(test_sink.GetFirstMessageMatching(ViewHostMsg_Start::ID));
32 //
33 // // Now inspect a message. This assumes a message that was declared like
34 // // this: IPC_MESSAGE_ROUTED2(ViewMsg_Foo, bool, int)
35 // IPC::Message* msg = test_sink.GetFirstMessageMatching(ViewMsg_Foo::ID));
36 // ASSERT_TRUE(msg);
37 // bool first_param;
38 // int second_param;
39 // ViewMsg_Foo::Read(msg, &first_param, &second_param);
40 //
41 // // Go on to the next phase of the test.
42 // test_sink.ClearMessages();
43 //
44 // To hook up the sink, all you need to do is call OnMessageReceived when a
45 // message is received.
46 class TestSink : public IPC::Channel {
47 public:
48 TestSink();
49 ~TestSink();
50
51 // Interface in IPC::Channel. This copies the message to the sink and then
52 // deletes it.
53 virtual bool Send(IPC::Message* message);
54
55 // Used by the source of the messages to send the message to the sink. This
56 // will make a copy of the message and store it in the list.
57 bool OnMessageReceived(const Message& msg);
58
59 // Returns the number of messages in the queue.
60 size_t message_count() const { return messages_.size(); }
61
62 // Clears the message queue of saved messages.
63 void ClearMessages();
64
65 // Returns the message at the given index in the queue. The index may be out
66 // of range, in which case the return value is NULL. The returned pointer will
67 // only be valid until another message is received or the list is cleared.
68 const Message* GetMessageAt(size_t index) const;
69
70 // Returns the first message with the given ID in the queue. If there is no
71 // message with the given ID, returns NULL. The returned pointer will only be
72 // valid until another message is received or the list is cleared.
73 const Message* GetFirstMessageMatching(uint32 id) const;
74
75 // Returns the message with the given ID in the queue. If there is no such
76 // message or there is more than one of that message, this will return NULL
77 // (with the expectation that you'll do an ASSERT_TRUE() on the result).
78 // The returned pointer will only be valid until another message is received
79 // or the list is cleared.
80 const Message* GetUniqueMessageMatching(uint32 id) const;
81
82 private:
83 // The actual list of received messages.
84 std::vector<Message> messages_;
85
86 DISALLOW_COPY_AND_ASSIGN(TestSink);
87 };
88
89 } // namespace IPC
90
91 #endif // CHROME_COMMON_IPC_TEST_SINK_H_
OLDNEW
« no previous file with comments | « chrome/chrome_tests.gypi ('k') | chrome/common/ipc_test_sink.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698