# Copyright 2019 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")

source_set("lib") {
  sources = [
    "app.cc",
    "app.h",
    "command.cc",
    "command.h",
    "console.cc",
    "console.h",
    "executor.cc",
    "executor.h",
    "scoped_interpreter.h",
  ]

  public_deps = [
    "//sdk/fidl/fuchsia.hardware.pty:fuchsia.hardware.pty_llcpp",
    "//sdk/lib/syslog/cpp",
    "//src/developer/shell/common",
    "//src/developer/shell/fidl/fuchsia.shell:shell_llcpp",
    "//src/developer/shell/interpreter:shell_server_lib",
    "//src/developer/shell/parser",
    "//src/lib/fsl",
    "//src/lib/line_input",
    "//zircon/system/ulib/async:async-cpp",
    "//zircon/system/ulib/cmdline",
  ]
}

executable("bin") {
  output_name = "cliff"

  sources = [ "main.cc" ]

  deps = [
    ":lib",
    "//sdk/lib/syslog/cpp",
    "//zircon/system/ulib/async-loop:async-loop-cpp",
  ]
}

executable("console_unittests_bin") {
  testonly = true

  sources = [
    "app_unittest.cc",
    "command_unittest.cc",
    "executor_unittest.cc",
  ]

  deps = [
    ":lib",
    "//src/lib/fxl/test:gtest_main",
    "//src/lib/testing/loop_fixture",
    "//third_party/googletest:gmock",
    "//third_party/googletest:gtest",
  ]
}

fuchsia_unittest_package("shell-console-unittests") {
  deps = [ ":console_unittests_bin" ]
}
