15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2011 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef THIRD_PARTY_OCMOCK_GTEST_SUPPORT_H_
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define THIRD_PARTY_OCMOCK_GTEST_SUPPORT_H_
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h"
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)@class OCMockObject;
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace testing {
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace internal {
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool VerifyOCMock(OCMockObject* mock, const char* file, int line);
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace internal
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace testing
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Calls -verify of the mock and traps the Objective-C exception that is
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// generated, adding it to the gtest failures and returning true/false
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// for if there was an exception.  The result should be used in normal
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// gtest EXECPT_TRUE/ASSERT_TRUE fashion.
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// So code that would do:
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//     id mockFoo = [OCMockObject mockForClass:[Foo class]];
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//     ...
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//     [mockFoo verify];
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Should instead do:
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//     id mockFoo = [OCMockObject mockForClass:[Foo class]];
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//     ...
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//     EXPECT_OCMOCK_VERIFY(mockFoo);
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define EXPECT_OCMOCK_VERIFY(m) \
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_TRUE(testing::internal::VerifyOCMock((m), __FILE__, __LINE__))
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define ASSERT_OCMOCK_VERIFY(m) \
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_TRUE(testing::internal::VerifyOCMock((m), __FILE__, __LINE__))
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // THIRD_PARTY_OCMOCK_GTEST_SUPPORT_H_
41