# Copyright 2020 The Fuchsia 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/components.gni")
import("//build/fidl/fidl.gni")

executable("touch-input-test-bin") {
  testonly = true
  sources = [ "touch-input-test.cc" ]
  output_name = "touch-input-test"
  deps = [
    "//sdk/fidl/fuchsia.accessibility.semantics:fuchsia.accessibility.semantics_hlcpp",
    "//sdk/fidl/fuchsia.buildinfo:fuchsia.buildinfo_hlcpp",
    "//sdk/fidl/fuchsia.component:fuchsia.component_hlcpp",
    "//sdk/fidl/fuchsia.fonts:fuchsia.fonts_hlcpp",
    "//sdk/fidl/fuchsia.hardware.display:fuchsia.hardware.display_hlcpp",
    "//sdk/fidl/fuchsia.input.injection:fuchsia.input.injection_hlcpp",
    "//sdk/fidl/fuchsia.intl:fuchsia.intl_hlcpp",
    "//sdk/fidl/fuchsia.kernel:fuchsia.kernel_hlcpp",
    "//sdk/fidl/fuchsia.memorypressure:fuchsia.memorypressure_hlcpp",
    "//sdk/fidl/fuchsia.metrics:fuchsia.metrics_hlcpp",
    "//sdk/fidl/fuchsia.net.interfaces:fuchsia.net.interfaces_hlcpp",
    "//sdk/fidl/fuchsia.posix.socket:fuchsia.posix.socket_hlcpp",
    "//sdk/fidl/fuchsia.process:fuchsia.process_hlcpp",
    "//sdk/fidl/fuchsia.scheduler:fuchsia.scheduler_hlcpp",
    "//sdk/fidl/fuchsia.tracing.provider:fuchsia.tracing.provider_hlcpp",
    "//sdk/fidl/fuchsia.ui.app:fuchsia.ui.app_hlcpp",
    "//sdk/fidl/fuchsia.ui.input:fuchsia.ui.input_hlcpp",
    "//sdk/fidl/fuchsia.ui.pointer:fuchsia.ui.pointer_hlcpp",
    "//sdk/fidl/fuchsia.ui.pointerinjector:fuchsia.ui.pointerinjector_hlcpp",
    "//sdk/fidl/fuchsia.ui.pointerinjector.configuration:fuchsia.ui.pointerinjector.configuration_hlcpp",
    "//sdk/fidl/fuchsia.ui.scenic:fuchsia.ui.scenic_hlcpp",
    "//sdk/fidl/fuchsia.ui.test.input:fuchsia.ui.test.input_hlcpp",
    "//sdk/fidl/fuchsia.vulkan.loader:fuchsia.vulkan.loader_hlcpp",
    "//sdk/lib/fdio",
    "//sdk/lib/fit",
    "//sdk/lib/sys/component/cpp/testing:cpp",
    "//sdk/lib/sys/cpp",
    "//sdk/lib/ui/scenic/cpp",
    "//src/lib/fostr/fidl/fuchsia.ui.input",
    "//src/lib/fxl",
    "//src/lib/fxl/test:gtest_main",
    "//src/lib/testing/loop_fixture",
    "//src/ui/input/testing/fake_input_report_device",
    "//src/ui/testing/util",
    "//third_party/googletest:gtest",
    "//zircon/system/ulib/async-loop:async-loop-cpp",
    "//zircon/system/ulib/async-loop:async-loop-default",
    "//zircon/system/ulib/zx",
  ]
}

fuchsia_test_component("touch-input-test-component") {
  testonly = true
  manifest = "meta/touch-input-test.cml"
  deps = [ ":touch-input-test-bin" ]
  test_type = "system"
}

fuchsia_test_package("touch-input-test") {
  test_components = [ ":touch-input-test-component" ]
  deps = [
    "//src/cobalt/bin/testing/mock_cobalt",
    "//src/connectivity/network:netstack-for-tests",
    "//src/developer/build_info/testing:fake-build-info-component",
    "//src/developer/memory/monitor:component",
    "//src/fonts:font_provider_hermetic_for_test",
    "//src/testing/fidl/intl_property_manager:intl_property_manager_component",
    "//src/ui/bin/text:text_manager_comp",

    # Include some default config (it doesn't matter which, since we're going to override it).
    "//src/ui/testing/test_ui_stack:flatland_scene_manager_config",
    "//src/ui/testing/test_ui_stack:test-ui-stack-component",
    "//src/ui/tests/integration_input_tests/touch/touch-flatland-client:component",
  ]
  test_specs = {
    log_settings = {
      # TODO(https://fxbug.dev/42174827): Investigate flakes and remove allowing ERROR severity.
      max_severity = "ERROR"
    }
    environments = [
      {
        dimensions = {
          # Ensure the device has Vulkan.
          device_type = "AEMU"
        }
      },
    ]
  }
}

executable("pointerinjector-config-test-bin") {
  testonly = true
  sources = [ "pointerinjector-config-test.cc" ]
  output_name = "pointerinjector-config-test"
  deps = [
    "//sdk/fidl/fuchsia.hardware.display:fuchsia.hardware.display_hlcpp",
    "//sdk/fidl/fuchsia.input.injection:fuchsia.input.injection_hlcpp",
    "//sdk/fidl/fuchsia.ui.scenic:fuchsia.ui.scenic_hlcpp",
    "//sdk/fidl/fuchsia.ui.test.input:fuchsia.ui.test.input_hlcpp",
    "//sdk/lib/fdio",
    "//sdk/lib/fit",
    "//sdk/lib/sys/component/cpp/testing:cpp",
    "//sdk/lib/sys/cpp",
    "//src/lib/fxl",
    "//src/lib/fxl/test:gtest_main",
    "//src/lib/testing/loop_fixture",
    "//src/ui/a11y/testing/fidl:test.accessibility_hlcpp",
    "//src/ui/input/testing/fake_input_report_device",
    "//src/ui/testing/ui_test_manager",
    "//third_party/googletest:gtest",
    "//zircon/system/ulib/async-loop:async-loop-cpp",
    "//zircon/system/ulib/async-loop:async-loop-default",
    "//zircon/system/ulib/zx",
  ]
}

fuchsia_test_component("pointerinjector-config-test-component") {
  manifest = "meta/pointerinjector-config-test.cml"
  deps = [ ":pointerinjector-config-test-bin" ]
  test_type = "system"
}

fuchsia_test_package("pointerinjector-config-test") {
  test_components = [ ":pointerinjector-config-test-component" ]
  deps = [ "//src/ui/tests/integration_input_tests/touch/touch-flatland-client:component" ]
  test_specs = {
    log_settings = {
      # TODO(https://fxbug.dev/42174827): Investigate flakes and remove allowing ERROR severity.
      max_severity = "ERROR"
    }
    environments = [
      {
        dimensions = {
          # Ensure the device has Vulkan.
          device_type = "AEMU"
        }
      },
    ]
  }
}

group("tests") {
  testonly = true
  deps = [
    ":pointerinjector-config-test",
    ":touch-input-test",

    # The deps below are necessary on minimal product configs.
    # TODO(https://fxbug.dev/42070261): These should be provided by the Product
    # configurations on which these tests run rather than as deps.
    # TODO(https://fxbug.dev/42070261): Should these be deps of the individual test
    # targets above?
    "///src/graphics/display/testing/fake-coordinator-connector",
    "//src/cobalt/bin/testing/mock_cobalt",
    "//src/graphics/bin/vulkan_loader",
    "//src/testing/fidl/intl_property_manager",
    "//src/ui/tests/integration_input_tests/touch/touch-flatland-client",
  ]
}
