# Copyright 2018 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/rust/rustc_binary.gni")
import("//build/rust/rustc_test.gni")
import("//src/sys/build/components.gni")

group("tests") {
  testonly = true

  deps = [
    ":ime_service",
    ":ime_test",
    ":keyboard_test",

    # Needed for starting up the test suite fixture.
    "//src/ui/testing/text:text_test_suite",
  ]
}

rustc_binary("bin") {
  name = "ime_service"
  with_unit_tests = true
  edition = "2018"

  deps = [
    "//sdk/fidl/fuchsia.input:fuchsia.input-rustc",
    "//sdk/fidl/fuchsia.ui.input:fuchsia.ui.input-rustc",
    "//sdk/fidl/fuchsia.ui.input3:fuchsia.ui.input3-rustc",
    "//sdk/fidl/fuchsia.ui.keyboard.focus:fuchsia.ui.keyboard.focus-rustc",
    "//sdk/fidl/fuchsia.ui.text:fuchsia.ui.text-rustc",
    "//sdk/fidl/fuchsia.ui.text.testing:fuchsia.ui.text.testing-rustc",
    "//sdk/fidl/fuchsia.ui.views:fuchsia.ui.views-rustc",
    "//src/lib/fidl/rust/fidl",
    "//src/lib/fuchsia-async",
    "//src/lib/fuchsia-component",
    "//src/lib/syslog/rust:syslog",
    "//src/lib/ui/fuchsia-scenic",
    "//src/lib/ui/input-synthesis",
    "//src/lib/zircon/rust:fuchsia-zircon",
    "//src/ui/lib/text",
    "//third_party/rust_crates:anyhow",
    "//third_party/rust_crates:futures",
    "//third_party/rust_crates:parking_lot",
    "//third_party/rust_crates:pin-utils",
    "//third_party/rust_crates:serde",
    "//third_party/rust_crates:serde_json",
    "//third_party/rust_crates:thiserror",
    "//third_party/rust_crates:unicode-normalization",
    "//third_party/rust_crates:unicode-segmentation",
  ]

  sources = [
    "src/fidl_helpers.rs",
    "src/ime_service.rs",
    "src/index_convert.rs",
    "src/integration_tests.rs",
    "src/keyboard/events.rs",
    "src/keyboard/keyboard3.rs",
    "src/keyboard/mod.rs",
    "src/keyboard/service.rs",
    "src/legacy_ime/handler.rs",
    "src/legacy_ime/mod.rs",
    "src/legacy_ime/position.rs",
    "src/legacy_ime/state.rs",
    "src/main.rs",
    "src/multiplex.rs",
  ]
}

fuchsia_component("ime_service_comp") {
  component_name = "ime_service"
  manifest = "meta/ime_service.cmx"
  deps = [ ":bin" ]
}

fuchsia_component("default_hardware_ime_comp") {
  component_name = "default_hardware_ime"
  manifest = "//src/ui/bin/default_hardware_ime/meta/default_hardware_ime.cmx"
  deps = [ "//src/ui/bin/default_hardware_ime:bin" ]
}

fuchsia_package("ime_service") {
  deps = [
    ":default_hardware_ime_comp",
    ":ime_service_comp",
  ]
}

fuchsia_component("ime_service_bin_test") {
  testonly = true
  component_name = "ime_service_bin_test"
  manifest = "meta/ime_service_bin_test.cmx"
  deps = [
    ":bin_test",
    "//src/ui/testing/text:text_test_suite",
  ]
}

fuchsia_test_package("ime_test") {
  test_components = [ ":ime_service_bin_test" ]
}

rustc_test("keyboard3_integration_test_bin") {
  output_name = "keyboard3_integration_test"
  edition = "2018"

  deps = [
    ":bin",
    "//sdk/fidl/fuchsia.input:fuchsia.input-rustc",
    "//sdk/fidl/fuchsia.ui.input:fuchsia.ui.input-rustc",
    "//sdk/fidl/fuchsia.ui.input3:fuchsia.ui.input3-rustc",
    "//sdk/fidl/fuchsia.ui.keyboard.focus:fuchsia.ui.keyboard.focus-rustc",
    "//sdk/fidl/fuchsia.ui.views:fuchsia.ui.views-rustc",
    "//src/lib/fidl/rust/fidl",
    "//src/lib/fuchsia-async",
    "//src/lib/fuchsia-component",
    "//src/lib/syslog/rust:syslog",
    "//src/lib/ui/fuchsia-scenic",
    "//src/lib/zircon/rust:fuchsia-zircon",
    "//third_party/rust_crates:anyhow",
    "//third_party/rust_crates:async-trait",
    "//third_party/rust_crates:futures",
    "//third_party/rust_crates:matches",
  ]
  source_root = "tests/keyboard3.rs"

  sources = [
    "tests/keyboard3.rs",
    "tests/test_helpers.rs",
  ]
}

rustc_test("ime_service_integration_test_bin") {
  output_name = "ime_service_integration_test"
  edition = "2018"

  deps = [
    ":bin",
    "//sdk/fidl/fuchsia.input:fuchsia.input-rustc",
    "//sdk/fidl/fuchsia.ui.input:fuchsia.ui.input-rustc",
    "//sdk/fidl/fuchsia.ui.input3:fuchsia.ui.input3-rustc",
    "//sdk/fidl/fuchsia.ui.keyboard.focus:fuchsia.ui.keyboard.focus-rustc",
    "//src/lib/fidl/rust/fidl",
    "//src/lib/fuchsia-async",
    "//src/lib/fuchsia-component",
    "//src/lib/syslog/rust:syslog",
    "//src/lib/ui/fuchsia-scenic",
    "//src/lib/ui/input-synthesis",
    "//third_party/rust_crates:anyhow",
    "//third_party/rust_crates:async-trait",
    "//third_party/rust_crates:futures",
    "//third_party/rust_crates:matches",
  ]
  source_root = "tests/ime_service.rs"

  sources = [
    "tests/ime_service.rs",
    "tests/test_helpers.rs",
  ]
}

rustc_test("legacy_ime_integration_test_bin") {
  output_name = "legacy_ime_integration_test"
  edition = "2018"

  deps = [
    ":bin",
    "//sdk/fidl/fuchsia.input:fuchsia.input-rustc",
    "//sdk/fidl/fuchsia.ui.input:fuchsia.ui.input-rustc",
    "//sdk/fidl/fuchsia.ui.input3:fuchsia.ui.input3-rustc",
    "//sdk/fidl/fuchsia.ui.keyboard.focus:fuchsia.ui.keyboard.focus-rustc",
    "//src/lib/fidl/rust/fidl",
    "//src/lib/fuchsia-async",
    "//src/lib/fuchsia-component",
    "//src/lib/syslog/rust:syslog",
    "//src/lib/ui/fuchsia-scenic",
    "//src/lib/ui/input-synthesis",
    "//third_party/rust_crates:anyhow",
    "//third_party/rust_crates:async-trait",
    "//third_party/rust_crates:futures",
    "//third_party/rust_crates:matches",
  ]
  source_root = "tests/legacy_ime.rs"

  sources = [
    "tests/legacy_ime.rs",
    "tests/test_helpers.rs",
  ]
}

fuchsia_component("keyboard3_integration_test") {
  testonly = true
  deps = [
    ":ime_service_comp",
    ":keyboard3_integration_test_bin",
  ]
  manifest = "meta/keyboard3_integration_test.cmx"
}

fuchsia_component("ime_service_integration_test") {
  testonly = true
  deps = [ ":ime_service_integration_test_bin" ]
  manifest = "meta/ime_service_integration_test.cmx"
}

fuchsia_component("legacy_ime_integration_test") {
  testonly = true
  deps = [ ":legacy_ime_integration_test_bin" ]
  manifest = "meta/legacy_ime_integration_test.cmx"
}

fuchsia_test_package("keyboard_test") {
  test_components = [
    ":keyboard3_integration_test",
    ":ime_service_integration_test",
    ":legacy_ime_integration_test",
  ]
}
