12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file. 42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "media/base/gmock_callback_support.h" 62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/bind.h" 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/callback.h" 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "testing/gmock/include/gmock/gmock.h" 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)using testing::ByRef; 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)using testing::MockFunction; 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace media { 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)typedef base::Callback<void(const bool& src, bool* dst)> TestCallback; 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void SetBool(const bool& src, bool* dst) { 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) *dst = src; 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST(GmockCallbackSupportTest, IsNullCallback) { 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MockFunction<void(const TestCallback&)> check; 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_CALL(check, Call(IsNullCallback())); 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) check.Call(TestCallback()); 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST(GmockCallbackSupportTest, IsNotNullCallback) { 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MockFunction<void(const TestCallback&)> check; 312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_CALL(check, Call(IsNotNullCallback())); 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) check.Call(base::Bind(&SetBool)); 332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST(GmockCallbackSupportTest, RunClosure) { 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MockFunction<void(const base::Closure&)> check; 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool dst = false; 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_CALL(check, Call(IsNotNullCallback())) 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) .WillOnce(RunClosure<0>()); 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) check.Call(base::Bind(&SetBool, true, &dst)); 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(dst); 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST(GmockCallbackSupportTest, RunCallback0) { 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MockFunction<void(const TestCallback&)> check; 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool dst = false; 472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_CALL(check, Call(IsNotNullCallback())) 482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) .WillOnce(RunCallback<0>(true, &dst)); 492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) check.Call(base::Bind(&SetBool)); 502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(dst); 512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST(GmockCallbackSupportTest, RunCallback1) { 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MockFunction<void(int, const TestCallback&)> check; 552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool dst = false; 562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_CALL(check, Call(0, IsNotNullCallback())) 572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) .WillOnce(RunCallback<1>(true, &dst)); 582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) check.Call(0, base::Bind(&SetBool)); 592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(dst); 602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST(GmockCallbackSupportTest, RunCallbackPassByRef) { 632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MockFunction<void(const TestCallback&)> check; 642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool dst = false; 652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool src = false; 662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_CALL(check, Call(IsNotNullCallback())) 672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) .WillOnce(RunCallback<0>(ByRef(src), &dst)); 682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) src = true; 692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) check.Call(base::Bind(&SetBool)); 702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(dst); 712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST(GmockCallbackSupportTest, RunCallbackPassByValue) { 742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MockFunction<void(const TestCallback&)> check; 752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool dst = false; 762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool src = true; 772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_CALL(check, Call(IsNotNullCallback())) 782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) .WillOnce(RunCallback<0>(src, &dst)); 792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) src = false; 802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) check.Call(base::Bind(&SetBool)); 812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(dst); 822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace media 85