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

import("//services/shell/public/service_manifest.gni")
import("//testing/test.gni")

# Target that builders build.
group("all") {
  testonly = true

  deps = [
    ":mash_unittests",
    "//ash/touch_hud/mus:touch_hud",
    "//components/leveldb",
    "//mash/catalog_viewer",
    "//mash/example",
    "//mash/init",
    "//mash/login",
    "//mash/screenlock",
    "//mash/session",
    "//mash/task_viewer",
  ]
}

group("browser") {
  testonly = true

  deps = [
    ":all",
    "//mash/browser",
    "//mash/webtest",
  ]
}

test("mash_unittests") {
  sources = [
    "test/mash_test_suite.cc",
    "test/mash_test_suite.h",
    "test/mash_unittests.cc",
  ]
  deps = [
    "//ash/mus:resources",
    "//ash/mus:unittests",
    "//base",
    "//base/test:test_support",
    "//services/shell/background:main",
    "//ui/aura",
    "//ui/base",
    "//ui/compositor:test_support",
    "//ui/gl:test_support",
  ]
  data_deps = [
    ":unittests_manifest",
    "//ash/mus:resources",
  ]
}

service_manifest("unittests_manifest") {
  type = "exe"
  name = "mash_unittests"
  source = "unittests_manifest.json"
}
