// Copyright 2015 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.

#include "base/bind.h"
#include "base/files/file_path.h"
#include "base/path_service.h"
#include "mojo/dart/embedder/dart_controller.h"
#include "mojo/dart/unittests/embedder_tester/dart_test.h"
#include "mojo/public/c/system/types.h"
#include "mojo/public/cpp/environment/environment.h"
#include "testing/gtest/include/gtest/gtest.h"

namespace mojo {
namespace dart {
namespace {

class DartFinalizerTest : public DartTest {
 public:
  DartFinalizerTest() {}

  static void SetUpTestCase() {
    const int kNumArgs = 2;
    const char* args[kNumArgs];
    args[0] = "--new-gen-semi-max-size=1";
    args[1] = "--old_gen_growth_rate=1";
    DartController::Initialize(nullptr, true, false, args, kNumArgs);
  }

  void RunTest(const std::string& test) {
    base::FilePath path;
    PathService::Get(base::DIR_SOURCE_ROOT, &path);
    path = path.AppendASCII("mojo")
               .AppendASCII("dart")
               .AppendASCII("unittests")
               .AppendASCII("embedder_tests")
               .AppendASCII(test);
    std::vector<std::string> script_arguments;

    RunDartTest(path, script_arguments, false, false, 0);
  }
};

TEST_F(DartFinalizerTest, handle_finalizer_test) {
  RunTest("handle_finalizer_test.dart");
}

TEST_F(DartFinalizerTest, shared_buffer_finalizer_test) {
  RunTest("shared_buffer_finalizer_test.dart");
}

}  // namespace
}  // namespace dart
}  // namespace mojo
