// Copyright 2019 the V8 project 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 V8_CCTEST_COMPILER_SERIALIZER_TESTER_H_
#define V8_CCTEST_COMPILER_SERIALIZER_TESTER_H_

#include <memory>

#include "src/compiler/js-heap-broker.h"
#include "test/cctest/cctest.h"

namespace v8 {
namespace internal {
namespace compiler {

class ZoneStats;

// The purpose of this class is to provide testing facility for the
// SerializerForBackgroundCompilation class. On a high-level, it executes the
// following steps:
// 1. Wraps the provided source in an IIFE
// 2. Generates bytecode for the given source
// 3. Runs the bytecode which *must* return a function
// 4. Takes the returned function and optimizes it
// 5. The optimized function is accessible through `function()`
class SerializerTester : public HandleAndZoneScope {
 public:
  explicit SerializerTester(const char* source);

  JSFunctionRef function() const { return function_.value(); }
  JSHeapBroker* broker() const { return broker_.get(); }
  Isolate* isolate() { return main_isolate(); }

 private:
  CanonicalHandleScope canonical_;
  base::Optional<JSFunctionRef> function_;
  std::unique_ptr<JSHeapBroker> broker_;
};
}  // namespace compiler
}  // namespace internal
}  // namespace v8

#endif  // V8_CCTEST_COMPILER_SERIALIZER_TESTER_H_
