# Copyright 2014 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.

import("//mojo/public/tools/bindings/mojom.gni")
import("//testing/test.gni")

group("embedder_tester") {
  testonly = true
  deps = [
    ":dart_finalizer_unittests",
    ":dart_to_cpp_unittests",
    ":dart_unittests",
    ":dart_validation_unittests",
  ]
}

source_set("dart_controller_for_test") {
  testonly = true
  sources = [
    "$root_gen_dir/dart_snapshot.cc",
  ]
  deps = [
    "//mojo/dart/embedder:dart_controller_no_snapshot",
    "//mojo/dart/embedder:generate_snapshot_file",
  ]
}

group("dart_test_deps") {
  testonly = true
  public_deps = [
    ":dart_controller_for_test",
    "//base",
    "//mojo/dart/packages",
    "//mojo/dart/embedder:dart_controller_no_snapshot",
    "//mojo/edk/test:run_all_unittests",
    "//mojo/public/cpp/environment",
    "//mojo/public/cpp/system",
    "//mojo/public/cpp/utility",
    "//mojo/public/dart",
    "//mojo/environment:chromium",
    "//testing/gtest",
  ]
}

source_set("dart_test") {
  testonly = true
  sources = [
    "dart_test.cc",
    "dart_test.h",
  ]
  deps = [
    ":dart_test_deps",
  ]
}

mojom("dart_to_cpp_bindings") {
  sources = [
    "dart_to_cpp.mojom",
  ]
}

test("dart_to_cpp_unittests") {
  sources = [
    "dart_to_cpp_tests.cc",
  ]
  deps = [
    ":dart_test",
    ":dart_to_cpp_bindings",
    ":dart_test_deps",
  ]
}

test("dart_finalizer_unittests") {
  sources = [
    "dart_finalizer_test.cc",
  ]
  deps = [
    ":dart_test",
    ":dart_test_deps",
  ]
}

test("dart_unittests") {
  sources = [
    "run_dart_tests.cc",
  ]
  deps = [
    ":dart_test",
    ":dart_test_deps",
  ]
}

test("dart_validation_unittests") {
  sources = [
    "validation_unittest.cc",
  ]
  deps = [
    ":dart_test",
    ":dart_test_deps",
  ]
}
