# Copyright 2025 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/python/host.gni")
import("//build/python/python_binary.gni")
import("//build/python/python_host_test.gni")

group("tests") {
  testonly = true

  deps = [ ":disable_ctf_tests_test($host_toolchain)" ]
}

if (is_host) {
  # Main executable target.
  python_binary("disable_ctf_tests") {
    # Unbuffer so output can be piped to other programs nicely.
    unbuffered_output = true
    main_source = "main.py"
    output_name = "disable_ctf_tests.pyz"
    sources = [
      "cli.py",
      "command_runner.py",
      "data_structure.py",
      "gui.py",
      "util.py",
    ]
    deps = [ "//scripts/lib/json_get" ]
  }

  python_host_test("disable_ctf_tests_test") {
    main_source = "tests/all_tests.py"
    main_callable = "unittest.main"
    extra_args = [ "-v" ]
    libraries = []
    deps = [
      ":disable_ctf_tests",  # Include this to MyPy everything
      "//scripts/lib/json_get",
    ]
  }

  install_python_tool("install") {
    name = "disable_ctf_tests"
    binary = ":disable_ctf_tests"
  }
}
