# 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("//build/config/ui.gni")
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",
    ]
  }

  if (is_linux && !is_chromeos && use_x11) {
    deps += [ "//blimp/client:blimp_shell" ]
  }
}

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