# 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/packages",
    ":dart_controller_for_test",
    ":dart_to_cpp_unittests",
    "//base",
    "//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/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/public/cpp/bindings",
    "//mojo/public/cpp/system",
    "//mojo/public/interfaces/bindings/tests:test_interfaces",
    "//testing/gtest",
  ]
}

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