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 "base/strings/string_util.h"
6#include "base/strings/stringprintf.h"
7#include "chrome/browser/extensions/extension_api_unittest.h"
8#include "extensions/browser/api/test/test_api.h"
9#include "extensions/test/extension_test_message_listener.h"
10
11namespace extensions {
12
13namespace {
14
15const char kFormat[] = "[\"%s\"]";
16const char kTestMessage[] = "test message";
17const char kTestMessage2[] = "test message 2";
18const char kFailureMessage[] = "failure";
19
20}  // namespace
21
22class ExtensionTestMessageListenerUnittest : public ExtensionApiUnittest {};
23
24TEST_F(ExtensionTestMessageListenerUnittest, BasicTestExtensionMessageTest) {
25  // A basic test of sending a message and ensuring the listener is satisfied.
26  {
27    ExtensionTestMessageListener listener(kTestMessage, false);  // won't reply
28    EXPECT_FALSE(listener.was_satisfied());
29    RunFunction(new TestSendMessageFunction,
30                base::StringPrintf(kFormat, kTestMessage));
31    EXPECT_TRUE(listener.was_satisfied());
32    EXPECT_EQ(kTestMessage, listener.message());
33  }
34
35  // Test that we can receive an arbitrary message.
36  {
37    ExtensionTestMessageListener listener(false);  // won't reply
38    EXPECT_FALSE(listener.was_satisfied());
39    RunFunction(new TestSendMessageFunction,
40                base::StringPrintf(kFormat, kTestMessage2));
41    EXPECT_TRUE(listener.was_satisfied());
42    EXPECT_EQ(kTestMessage2, listener.message());
43  }
44
45  // Test that we can set the listener to be reused, and send/receive multiple
46  // messages.
47  {
48    ExtensionTestMessageListener listener(false);  // won't reply
49    EXPECT_FALSE(listener.was_satisfied());
50    RunFunction(new TestSendMessageFunction,
51                base::StringPrintf(kFormat, kTestMessage));
52    EXPECT_EQ(kTestMessage, listener.message());
53    EXPECT_TRUE(listener.was_satisfied());
54    listener.Reset();
55    EXPECT_FALSE(listener.was_satisfied());
56    EXPECT_TRUE(listener.message().empty());
57    RunFunction(new TestSendMessageFunction,
58                base::StringPrintf(kFormat, kTestMessage2));
59    EXPECT_TRUE(listener.was_satisfied());
60    EXPECT_EQ(kTestMessage2, listener.message());
61  }
62
63  // Test that we can listen for two explicit messages: a success, and a
64  // failure.
65  {
66    ExtensionTestMessageListener listener(kTestMessage, false);  // won't reply
67    listener.set_failure_message(kFailureMessage);
68    RunFunction(new TestSendMessageFunction,
69                base::StringPrintf(kFormat, kTestMessage));
70    EXPECT_TRUE(listener.WaitUntilSatisfied());  // succeeds
71    EXPECT_EQ(kTestMessage, listener.message());
72    listener.Reset();
73    RunFunction(new TestSendMessageFunction,
74                base::StringPrintf(kFormat, kFailureMessage));
75    EXPECT_FALSE(listener.WaitUntilSatisfied());  // fails
76    EXPECT_EQ(kFailureMessage, listener.message());
77  }
78}
79
80}  // namespace extensions
81