/*
 * Copyright (C) 2019 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

#ifndef TEST_GTEST_AND_GMOCK_H_
#define TEST_GTEST_AND_GMOCK_H_

// This file is used to proxy the include of gtest/gmock headers and suppress
// the warnings generated by that.
// There are two ways we suppress gtest/gmock warnings:
// 1: Using config("test_warning_suppressions") in BUILD.gn
// 2: Via this file.
// 1 applies recursively also to the test translation units, 2 applies only
// to gmock/gtest includes.

#if defined(__GNUC__)  // GCC & clang
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wundef"
#pragma GCC diagnostic ignored "-Wdeprecated"
#pragma GCC diagnostic ignored "-Wmissing-noreturn"
#pragma GCC diagnostic ignored "-Wsign-conversion"
#endif  // __GNUC__

#if defined(__clang__)
#pragma GCC diagnostic ignored "-Wshift-sign-overflow"
#pragma GCC diagnostic ignored "-Wcomma"
#endif

#include <gmock/gmock.h>
#include <gtest/gtest.h>

#if defined(__GNUC__)
#pragma GCC diagnostic pop
#endif

#endif  // TEST_GTEST_AND_GMOCK_H_
