# 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")

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",
  ]
}

test("dart_unittests") {
  sources = [
    "run_dart_tests.cc",
    "validation_unittest.cc",
  ]
  deps = [
    "//mojo/public/dart",
    "//mojo/dart/testing",
    ":dart_controller_for_test",
    ":dart_to_cpp_unittests",
    "//base",
    "//mojo/dart/embedder:dart_controller_no_snapshot",
    "//mojo/edk/test:run_all_unittests",
    "//mojo/edk/test:test_support",
    "//mojo/public/cpp/environment",
    "//mojo/public/cpp/system",
    "//mojo/public/cpp/utility",
    "//mojo/environment:chromium",
    "//testing/gtest",
  ]
}

source_set("dart_to_cpp_unittests") {
  testonly = true
  sources = [
    "dart_to_cpp_tests.cc",
  ]
  deps = [
    ":dart_controller_for_test",
    ":dart_to_cpp_bindings",
    "//base",
    "//mojo/dart/embedder:dart_controller_no_snapshot",
    "//mojo/edk/test:test_support",
    "//mojo/public/cpp/bindings",
    "//mojo/public/cpp/system",
    "//mojo/public/interfaces/bindings/tests:test_interfaces",
    "//mojo/public/interfaces/bindings/tests:test_interfaces_experimental",
    "//testing/gtest",
  ]
}

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