Index: chrome/browser/extensions/api/cast_channel/cast_channel_apitest.cc |
=================================================================== |
--- chrome/browser/extensions/api/cast_channel/cast_channel_apitest.cc (revision 250590) |
+++ chrome/browser/extensions/api/cast_channel/cast_channel_apitest.cc (working copy) |
@@ -16,14 +16,17 @@ |
#include "net/base/completion_callback.h" |
#include "net/base/net_errors.h" |
#include "testing/gmock/include/gmock/gmock.h" |
+#include "testing/gmock_mutant.h" |
namespace cast_channel = extensions::api::cast_channel; |
using cast_channel::CastSocket; |
+using cast_channel::ChannelError; |
using cast_channel::ChannelInfo; |
using cast_channel::MessageInfo; |
+using ::testing::_; |
using ::testing::A; |
-using ::testing::_; |
+using ::testing::DoAll; |
using ::testing::Invoke; |
using ::testing::Return; |
@@ -46,6 +49,18 @@ |
::std::tr1::get<k>(args).Run(result); |
} |
+// mfoltz,wez: Please see this and suggest how to make ACTION_TEMPLATE |
+// to work. I have currently used testing::CreateFunctor, but it will be |
+// better to use ACTION_TEMPLATE for consistency with InvokeCompletionCallback |
+/* |
+ACTION_TEMPLATE(InvokeDelegateOnError, |
+ HAS_1_TEMPLATE_PARAMS(extensions::CastChannelAPI*, api, |
+ MockCastSocket*, cast_socket), |
Wez
2014/02/15 01:45:52
This should be HAS_2_TEMPLATE_PARAMS.
Munjal (Google)
2014/02/20 23:27:08
Done. But I don't understand how an action templat
|
+ AND_1_VALUE_PARAMS(callback)) { |
+ ::std::tr1::get<api, cast_socket>(args).Run(callback); |
+} |
+*/ |
+ |
class MockCastSocket : public CastSocket { |
public: |
explicit MockCastSocket(CastSocket::Delegate* delegate, |
@@ -103,21 +118,34 @@ |
channel_info->error_state = cast_channel::CHANNEL_ERROR_NONE; |
} |
+ void CallOnError(extensions::CastChannelAPI* api, |
+ const net::CompletionCallback& callback) { |
+ content::BrowserThread::PostTask( |
+ content::BrowserThread::IO, |
+ FROM_HERE, |
+ base::Bind(&CastChannelAPITest::DoCallOnError, this, |
+ api, mock_cast_socket_)); |
+ } |
+ |
+ void DoCallOnError(extensions::CastChannelAPI* api, |
+ MockCastSocket* cast_socket) { |
+ api->OnError(cast_socket, cast_channel::CHANNEL_ERROR_CONNECT_ERROR); |
+ } |
+ |
protected: |
void CallOnMessage(const std::string& message) { |
content::BrowserThread::PostTask( |
content::BrowserThread::IO, |
FROM_HERE, |
base::Bind(&CastChannelAPITest::DoCallOnMessage, this, |
- GetApi(), mock_cast_socket_, message)); |
+ mock_cast_socket_, message)); |
} |
- void DoCallOnMessage(extensions::CastChannelAPI* api, |
- MockCastSocket* cast_socket, |
+ void DoCallOnMessage(MockCastSocket* cast_socket, |
const std::string& message) { |
MessageInfo message_info; |
FillMessageInfo(&message_info, message); |
- api->OnMessage(cast_socket, message_info); |
+ GetApi()->OnMessage(cast_socket, message_info); |
} |
MockCastSocket* mock_cast_socket_; |
@@ -182,3 +210,30 @@ |
CallOnMessage("some-message"); |
EXPECT_TRUE(catcher.GetNextResult()) << catcher.message(); |
} |
+ |
+// TODO(munjal): Win Dbg has a workaround that makes RunExtensionSubtest |
+// always return true without actually running the test. Remove when fixed. |
Wez
2014/02/15 01:45:52
If it's always going to return true then why do we
Munjal (Google)
2014/02/20 23:27:08
I am not aware of the full background here. I borr
|
+#if defined(OS_WIN) && !defined(NDEBUG) |
+#define MAYBE_TestOpenError DISABLED_TestOpenError |
+#else |
+#define MAYBE_TestOpenError TestOpenError |
+#endif |
+// Test the case when socket open results in an error. |
+IN_PROC_BROWSER_TEST_F(CastChannelAPITest, MAYBE_TestOpenError) { |
+ SetUpMockCastSocket(); |
+ |
+ EXPECT_CALL(*mock_cast_socket_, Connect(_)) |
Wez
2014/02/15 01:45:52
Indentation
Munjal (Google)
2014/02/20 23:27:08
Done.
|
+ .WillOnce(DoAll( |
+ Invoke(testing::CreateFunctor( |
+ this, &CastChannelAPITest::CallOnError, GetApi())), |
+ InvokeCompletionCallback<0>(net::OK))); |
+ EXPECT_CALL(*mock_cast_socket_, FillChannelInfo(_)) |
+ .WillOnce(Invoke(FillChannelInfoForClosedState)) |
+ .WillOnce(Invoke(FillChannelInfoForClosedState)); |
+ |
+ EXPECT_TRUE(RunExtensionSubtest("cast_channel/api", |
+ "test_open_error.html")); |
+ |
+ ResultCatcher catcher; |
+ EXPECT_TRUE(catcher.GetNextResult()) << catcher.message(); |
+} |