#!/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

# shellcheck disable=SC2034  # unused variable
BT_MOCKED_TOOLS=(
  "mockgoeshere"
)

BT_SET_UP() {
  mocked_tool="${BT_TEMP_DIR}/mockgoeshere"
}

# Verifies that
TEST_mock-tokenizes-correctly() {
  "${mocked_tool}" -1 --2 3 four "five" " six " " \"seven\" " "  eight stilleight " "  nine  \" stillnine "

  # shellcheck source=/dev/null
  source "${BT_TEMP_DIR}/mockgoeshere.mock_state"
  BT_EXPECT_EQ "${BT_MOCK_ARGS[0]}" "${BT_TEMP_DIR}"/mockgoeshere
  BT_EXPECT_EQ "${BT_MOCK_ARGS[1]}" -1
  BT_EXPECT_EQ "${BT_MOCK_ARGS[2]}" --2
  BT_EXPECT_EQ "${BT_MOCK_ARGS[3]}" 3
  BT_EXPECT_EQ "${BT_MOCK_ARGS[4]}" four
  BT_EXPECT_EQ "${BT_MOCK_ARGS[5]}" five
  BT_EXPECT_EQ "${BT_MOCK_ARGS[6]}" ' six '
  BT_EXPECT_EQ "${BT_MOCK_ARGS[7]}" ' "seven" '
  BT_EXPECT_EQ "${BT_MOCK_ARGS[8]}" '  eight stilleight '
  BT_EXPECT_EQ "${BT_MOCK_ARGS[9]}" '  nine  " stillnine '
}

TEST_mock-handles-single-double-quotes() {
  "${mocked_tool}" 'before"after'

  # shellcheck source=/dev/null
  source "${BT_TEMP_DIR}/mockgoeshere.mock_state"
  BT_EXPECT_EQ "${BT_MOCK_ARGS[0]}" "${BT_TEMP_DIR}"/mockgoeshere
  BT_EXPECT_EQ "${BT_MOCK_ARGS[1]}" 'before"after'
}

TEST_mock-stdout-for-multiple-calls() {
  echo "any call" > "${mocked_tool}.mock_stdout"
  echo "first call" > "${mocked_tool}.mock_stdout.1"
  echo "third call" > "${mocked_tool}.mock_stdout.3"

  "${mocked_tool}" "FIRST" > "stdout.1"
  "${mocked_tool}" "SECOND" > "stdout.2"
  "${mocked_tool}" "THIRD" > "stdout.3"

  # shellcheck source=/dev/null
  source "${mocked_tool}.mock_state.1"
  BT_EXPECT_EQ "${BT_MOCK_ARGS[0]}" "${mocked_tool}"
  BT_EXPECT_EQ "${BT_MOCK_ARGS[1]}" "FIRST"
  BT_EXPECT_FILE_CONTAINS "stdout.1" "first call"

  # shellcheck source=/dev/null
  source "${mocked_tool}.mock_state.2"
  BT_EXPECT_EQ "${BT_MOCK_ARGS[0]}" "${mocked_tool}"
  BT_EXPECT_EQ "${BT_MOCK_ARGS[1]}" "SECOND"
  BT_EXPECT_FILE_CONTAINS "stdout.2" "any call"

  # shellcheck source=/dev/null
  source "${mocked_tool}.mock_state.3"
  BT_EXPECT_EQ "${BT_MOCK_ARGS[0]}" "${mocked_tool}"
  BT_EXPECT_EQ "${BT_MOCK_ARGS[1]}" "THIRD"
  BT_EXPECT_FILE_CONTAINS "stdout.3" "third call"
}

TEST_mock-stderr-for-multiple-calls() {
  echo "any call" > "${mocked_tool}.mock_stderr"
  echo "first call" > "${mocked_tool}.mock_stderr.1"
  echo "third call" > "${mocked_tool}.mock_stderr.3"

  "${mocked_tool}" "FIRST" 2> "stderr.1"
  "${mocked_tool}" "SECOND" 2> "stderr.2"
  "${mocked_tool}" "THIRD" 2> "stderr.3"

  # shellcheck source=/dev/null
  source "${mocked_tool}.mock_state.1"
  BT_EXPECT_EQ "${BT_MOCK_ARGS[0]}" "${mocked_tool}"
  BT_EXPECT_EQ "${BT_MOCK_ARGS[1]}" "FIRST"
  BT_EXPECT_FILE_CONTAINS "stderr.1" "first call"

  # shellcheck source=/dev/null
  source "${mocked_tool}.mock_state.2"
  BT_EXPECT_EQ "${BT_MOCK_ARGS[0]}" "${mocked_tool}"
  BT_EXPECT_EQ "${BT_MOCK_ARGS[1]}" "SECOND"
  BT_EXPECT_FILE_CONTAINS "stderr.2" "any call"

  # shellcheck source=/dev/null
  source "${mocked_tool}.mock_state.3"
  BT_EXPECT_EQ "${BT_MOCK_ARGS[0]}" "${mocked_tool}"
  BT_EXPECT_EQ "${BT_MOCK_ARGS[1]}" "THIRD"
  BT_EXPECT_FILE_CONTAINS "stderr.3" "third call"
}

TEST_mock-side-effects-for-multiple-calls() {
  cat > "${mocked_tool}.mock_side_effects" <<EOF
echo "any call"
return 0
EOF

  cat > "${mocked_tool}.mock_side_effects.1" <<EOF
echo "first call"
return 10
EOF

  cat > "${mocked_tool}.mock_side_effects.3" <<EOF
echo "third call"
return 20
EOF

  "${mocked_tool}" "FIRST" > "stdout.1"
  "${mocked_tool}" "SECOND" > "stdout.2"
  "${mocked_tool}" "THIRD" > "stdout.3"

  # shellcheck source=/dev/null
  source "${mocked_tool}.mock_state.1"
  BT_EXPECT_EQ "${BT_MOCK_ARGS[0]}" "${mocked_tool}"
  BT_EXPECT_EQ "${BT_MOCK_ARGS[1]}" "FIRST"
  BT_EXPECT_FILE_CONTAINS "stdout.1" "first call"
  BT_EXPECT_EQ "${BT_MOCK_SIDE_EFFECT_STATUS}" 10

  # shellcheck source=/dev/null
  source "${mocked_tool}.mock_state.2"
  BT_EXPECT_EQ "${BT_MOCK_ARGS[0]}" "${mocked_tool}"
  BT_EXPECT_EQ "${BT_MOCK_ARGS[1]}" "SECOND"
  BT_EXPECT_FILE_CONTAINS "stdout.2" "any call"
  BT_EXPECT_EQ "${BT_MOCK_SIDE_EFFECT_STATUS}" 0

  # shellcheck source=/dev/null
  source "${mocked_tool}.mock_state.3"
  BT_EXPECT_EQ "${BT_MOCK_ARGS[0]}" "${mocked_tool}"
  BT_EXPECT_EQ "${BT_MOCK_ARGS[1]}" "THIRD"
  BT_EXPECT_FILE_CONTAINS "stdout.3" "third call"
  BT_EXPECT_EQ "${BT_MOCK_SIDE_EFFECT_STATUS}" 20
}

TEST_mock-status-for-multiple-calls() {
  echo "0" > "${mocked_tool}.mock_status"
  echo "10" > "${mocked_tool}.mock_status.1"
  echo "20" > "${mocked_tool}.mock_status.3"

  "${mocked_tool}" "FIRST"
  "${mocked_tool}" "SECOND"
  "${mocked_tool}" "THIRD"

  declare -i mock_status

  # shellcheck source=/dev/null
  source "${mocked_tool}.mock_state.1"
  mock_status=$?
  BT_EXPECT_EQ "${mock_status}" 10
  BT_EXPECT_EQ "${BT_MOCK_ARGS[0]}" "${mocked_tool}"
  BT_EXPECT_EQ "${BT_MOCK_ARGS[1]}" "FIRST"

  # shellcheck source=/dev/null
  source "${mocked_tool}.mock_state.2"
  mock_status=$?
  BT_EXPECT_EQ "${mock_status}" 0
  BT_EXPECT_EQ "${BT_MOCK_ARGS[0]}" "${mocked_tool}"
  BT_EXPECT_EQ "${BT_MOCK_ARGS[1]}" "SECOND"

  # shellcheck source=/dev/null
  source "${mocked_tool}.mock_state.3"
  mock_status=$?
  BT_EXPECT_EQ "${mock_status}" 20
  BT_EXPECT_EQ "${BT_MOCK_ARGS[0]}" "${mocked_tool}"
  BT_EXPECT_EQ "${BT_MOCK_ARGS[1]}" "THIRD"
}

BT_RUN_TESTS "$@"
