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