#!/bin/bash
# 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.

### Test basic fx execution flows

MOCKED_GN="prebuilt/third_party/gn/test/gn"

BT_FILE_DEPS=(
  "scripts/fx"
  "tools/devshell/set"
  "tools/devshell/lib/fx-cmd-locator.sh"
  "tools/devshell/lib/fx-optional-features.sh"
  "tools/devshell/lib/vars.sh"
  "tools/devshell/tests/subcommands/data/fx_set_test/myproduct.gni"
  "tools/devshell/tests/subcommands/data/fx_set_test/myboard.gni"
)
BT_MOCKED_TOOLS=(
  "tools/devshell/lib/metrics.sh"
  "tools/devshell/lib/prebuilt.sh"
  "${MOCKED_GN}"
)

BT_MKDIR_DEPS=(
  ".jiri_root"
  "products"
  "boards"
)

BT_SET_UP() {
  _FUCHSIA_DIR="${BT_TEMP_DIR}"
  _FUCHSIA_BUILD_DIR="${_FUCHSIA_DIR}/out/default"
  fx="${_FUCHSIA_DIR}/scripts/fx"
  BT_ASSERT_FILE_EXISTS "${fx}"
  cp "${_FUCHSIA_DIR}/tools/devshell/tests/subcommands/data/fx_set_test/myproduct.gni" "${_FUCHSIA_DIR}/products"
  cp "${_FUCHSIA_DIR}/tools/devshell/tests/subcommands/data/fx_set_test/myboard.gni" "${_FUCHSIA_DIR}/boards"

  cat > "${_FUCHSIA_DIR}/tools/devshell/lib/metrics.sh.mock_side_effects" <<EOF
  function track-command-execution {
    echo ""
  }
  function track-command-finished {
    echo ""
  }
EOF
  cat > "${_FUCHSIA_DIR}/tools/devshell/lib/prebuilt.sh.mock_side_effects" <<EOF
    readonly PREBUILT_GN="\${FUCHSIA_DIR}/${MOCKED_GN}"
EOF
  cat > "${_FUCHSIA_DIR}/${MOCKED_GN}.mock_side_effects" <<EOF
    echo "\$@"
EOF
}

# ensure that "fx set product.board" calls gn with the expected args
TEST_fx-set() {
  local output="$(${fx} set myproduct.myboard --no-goma)"
  BT_EXPECT_STRING_CONTAINS_SUBSTRING "${output}" 'import("//products/myproduct.gni'
  BT_EXPECT_STRING_CONTAINS_SUBSTRING "${output}" 'import("//boards/myboard.gni'
  BT_EXPECT_STRING_CONTAINS_SUBSTRING "${output}" 'base_package_labels+=[]'
  BT_EXPECT_STRING_CONTAINS_SUBSTRING "${output}" 'cache_package_labels+=[]'
  BT_EXPECT_STRING_CONTAINS_SUBSTRING "${output}" 'universe_package_labels+=[]'
}

# ensure that "fx set product.board --with ..." calls gn with the expected args
TEST_fx-set-with() {
  local output="$(${fx} set myproduct.myboard --no-goma --with "//bundles:tests")"
  BT_EXPECT_STRING_CONTAINS_SUBSTRING "${output}" 'import("//products/myproduct.gni'
  BT_EXPECT_STRING_CONTAINS_SUBSTRING "${output}" 'import("//boards/myboard.gni'
  BT_EXPECT_STRING_CONTAINS_SUBSTRING "${output}" 'base_package_labels+=[]'
  BT_EXPECT_STRING_CONTAINS_SUBSTRING "${output}" 'cache_package_labels+=[]'
  BT_EXPECT_STRING_CONTAINS_SUBSTRING "${output}" 'universe_package_labels+=["//bundles:tests"'
}

# ensure that "fx set product.board --fuzz-with ..." calls gn with the expected args
TEST_fx-set-fuzz-with() {
  local output="$(${fx} set myproduct.myboard --no-goma --fuzz-with foosan)"
  local select_variant='select_variant=\['
  select_variant+='{variant="foosan-fuzzer" target_type=\["fuzzed_executable"\]},'
  select_variant+='{variant="foosan" label=\["//sdk/lib/fdio"\]},'
  select_variant+='\]'
  BT_EXPECT_STRING_CONTAINS_SUBSTRING "${output}" "$select_variant"
}

BT_RUN_TESTS "$@"
