# 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("//testing/test.gni")

# Convenience meta-target for all of Blimp's production & test code.
group("blimp") {
  # In spite of the name, this really just means that non-test targets
  # cannot depend on this one, and that it can depend on test targets,
  # which fits how we intend to use it.
  testonly = true

  deps = [
    ":blimp_tests",
    "//blimp/client:blimp_client",
    "//blimp/common:blimp_common",
  ]

  if (is_android) {
    deps += [ "//blimp/client:blimp_apk" ]
  }

  if (is_linux) {
    deps += [
      "//blimp/engine:blimp_engine",
      "//blimp/engine:blimp_engine_bundle",
    ]
  }
}

# Builds all Blimp test code (unit tests, APKs).
group("blimp_tests") {
  testonly = true

  deps = [
    ":blimp_unittests",
  ]

  if (is_android) {
    deps += [ "//blimp/client:blimp_test_apk" ]
  }
}

test("blimp_unittests") {
  deps = [
    "//blimp/client:unit_tests",
    "//blimp/common:unit_tests",
    "//blimp/net:unit_tests",
  ]

  if (is_linux) {
    deps += [ "//blimp/engine:unit_tests" ]
  }
}

# TODO(GYP): Delete this after we've converted everything to GN.
# The _run targets exist only for compatibility w/ GYP.
group("blimp_unittests_run") {
  testonly = true
  deps = [
    ":blimp_unittests",
  ]
}
