// Copyright 2020 The PDFium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "testing/fxgc_unittest.h"

#include "fxjs/gc/heap.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "testing/v8_test_environment.h"
#include "v8/include/libplatform/libplatform.h"

FXGCUnitTest::FXGCUnitTest() = default;

FXGCUnitTest::~FXGCUnitTest() = default;

void FXGCUnitTest::SetUp() {
  ::testing::Test::SetUp();
  auto* env = V8TestEnvironment::GetInstance();
  FXGC_Initialize(env->platform(), env->isolate());
  heap_ = FXGC_CreateHeap(nullptr);
  ASSERT_TRUE(heap_);
}

void FXGCUnitTest::TearDown() {
  ForceGCAndPump();
  heap_.reset();
  FXGC_Release();
  ::testing::Test::TearDown();
}

void FXGCUnitTest::ForceGCAndPump() {
  FXGC_ForceGarbageCollection(heap_.get());
  Pump();
}

void FXGCUnitTest::Pump() {
  V8TestEnvironment::PumpPlatformMessageLoop(
      V8TestEnvironment::GetInstance()->isolate());
}
