// Copyright (c) 2011 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef THIRD_PARTY_OCMOCK_GTEST_SUPPORT_H_
#define THIRD_PARTY_OCMOCK_GTEST_SUPPORT_H_

#include "testing/gtest/include/gtest/gtest.h"

@class OCMockObject;

namespace testing {
namespace internal {
bool VerifyOCMock(OCMockObject* mock, const char* file, int line);
}  // namespace internal
}  // namespace testing

// Calls -verify of the mock and traps the Objective-C exception that is
// generated, adding it to the gtest failures and returning true/false
// for if there was an exception.  The result should be used in normal
// gtest EXECPT_TRUE/ASSERT_TRUE fashion.
//
// So code that would do:
//
//     id mockFoo = [OCMockObject mockForClass:[Foo class]];
//     ...
//     [mockFoo verify];
//
// Should instead do:
//
//     id mockFoo = [OCMockObject mockForClass:[Foo class]];
//     ...
//     EXPECT_OCMOCK_VERIFY(mockFoo);
//
#define EXPECT_OCMOCK_VERIFY(m) \
    EXPECT_TRUE(testing::internal::VerifyOCMock((m), __FILE__, __LINE__))
#define ASSERT_OCMOCK_VERIFY(m) \
    ASSERT_TRUE(testing::internal::VerifyOCMock((m), __FILE__, __LINE__))

#endif  // THIRD_PARTY_OCMOCK_GTEST_SUPPORT_H_