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

# TODO(hansmuller): The organization of tests in this directory is weird:
#   * Really, js_unittests tests public stuff, so that should live in public
#     and be reworked as some sort of apptest.
#   * Both js_unittests and js_integration_tests should auto-generate their
#     tests somehow. The .cc files are just test runner stubs, including
#     explicit lists of .js files.
group("tests") {
  testonly = true
  deps = [
    "test:js_unittests",
    "test:js_integration_tests",
  ]
}

source_set("system") {
  sources = [
    "core.cc",
    "core.h",
    "drain_data.cc",
    "drain_data.h",
    "handle.cc",
    "handle.h",
    "handle_close_observer.h",
    "mojo_runner_delegate.cc",
    "mojo_runner_delegate.h",
    "support.cc",
    "support.h",
    "threading.cc",
    "threading.h",
    "waiting_callback.cc",
    "waiting_callback.h",
  ]

  public_deps = [
    "//base",
    "//gin",
    "//mojo/public/cpp/environment",
    "//mojo/public/cpp/system",
    "//v8",
  ]
}

source_set("js_unittests") {
  testonly = true
  sources = [
    "handle_unittest.cc",
  ]

  deps = [
    ":system",
    "//mojo/public/cpp/system",
    "//testing/gtest",
  ]
}
