blob: 213fdeff1163c9db9729cd4aa829fa9fa834b655 [file] [log] [blame]
// Copyright 2020 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef MINI_CHROMIUM_TESTING_PLATFORM_TEST_H_
#define MINI_CHROMIUM_TESTING_PLATFORM_TEST_H_
#include "build/build_config.h"
#include "gtest/gtest.h"
#if BUILDFLAG(IS_APPLE)
// Note that this uses the direct runtime interface to the autorelease pool.
// https://clang.llvm.org/docs/AutomaticReferenceCounting.html#runtime-support
// This is so this can work when compiled for ARC.
extern "C" {
void* objc_autoreleasePoolPush(void);
void objc_autoreleasePoolPop(void* pool);
}
// The implementation is in this header because mini_chromium does not directly
// depend on googletest. Consumers are free to use this interface if they do
// depend on googletest.
class PlatformTest : public testing::Test {
public:
PlatformTest(const PlatformTest&) = delete;
PlatformTest& operator=(const PlatformTest&) = delete;
~PlatformTest() override { objc_autoreleasePoolPop(autorelease_pool_); }
protected:
PlatformTest() : autorelease_pool_(objc_autoreleasePoolPush()) {}
private:
void* autorelease_pool_;
};
#else
using PlatformTest = testing::Test;
#endif // BUILDFLAG(IS_APPLE)
#endif // MINI_CHROMIUM_TESTING_PLATFORM_TEST_H_