blob: 90b0f8857ce54480ea1ec40ee0cc037eea248a1d [file]
#!/bin/bash
# Copyright 2026 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 expected behavior of fx clean
function read_host_platform() {
source "$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)/../../lib/platform.sh" || exit $?
echo "$HOST_PLATFORM"
}
BT_FILE_DEPS=(
"scripts/fx"
"tools/devshell/clean"
"tools/devshell/lib/agents.txt"
"tools/devshell/lib/fx-cmd-locator.sh"
"tools/devshell/lib/fx-optional-features.sh"
"tools/devshell/lib/generate-ssh-config.sh"
"tools/devshell/lib/is_invoked_by_agent.sh"
"tools/devshell/lib/platform.sh"
"tools/devshell/lib/vars.sh"
)
BT_MOCKED_TOOLS=(
"tools/devshell/gen"
"prebuilt/third_party/gn/$(read_host_platform)/gn"
)
declare fx gn_mock gen_mock
BT_SET_UP() {
source "${BT_TEMP_DIR}/tools/devshell/tests/lib/fuchsia-mock.sh"
fx="$(btf::setup_fx)"
local host_platform="$(read_host_platform)"
gn_mock="${BT_TEMP_DIR}/prebuilt/third_party/gn/${host_platform}/gn"
gen_mock="${BT_TEMP_DIR}/tools/devshell/gen"
cat > "${gn_mock}.mock_side_effects" <<'EOF'
echo "gn $*" >> "${BT_TEMP_DIR}/call_order"
EOF
cat > "${gen_mock}.mock_side_effects" <<'EOF'
echo "gen$([ $# -gt 0 ] && echo " $*")" >> "${BT_TEMP_DIR}/call_order"
EOF
}
TEST_clean() {
local out="${BT_TEMP_DIR}/clean.out"
BT_EXPECT "${fx}" clean > "${out}" 2>&1
BT_ASSERT_FILE_EXISTS "${gn_mock}.mock_state"
btf::expect-mock-args "${gn_mock}" clean "${BT_TEMP_DIR}/out/default"
BT_ASSERT_FILE_EXISTS "${gen_mock}.mock_state"
btf::expect-mock-args "${gen_mock}"
BT_ASSERT_FILE_EXISTS "${BT_TEMP_DIR}/call_order"
local expected_order="gn clean ${BT_TEMP_DIR}/out/default
gen"
BT_EXPECT_FILE_CONTAINS "${BT_TEMP_DIR}/call_order" "${expected_order}"
}
TEST_clean_help() {
local out="${BT_TEMP_DIR}/clean_help.out"
BT_EXPECT "${fx}" clean --help > "${out}"
BT_EXPECT_FILE_DOES_NOT_EXIST "${gn_mock}.mock_state"
BT_EXPECT_FILE_DOES_NOT_EXIST "${gen_mock}.mock_state"
BT_EXPECT_FILE_DOES_NOT_EXIST "${BT_TEMP_DIR}/call_order"
BT_EXPECT_FILE_CONTAINS_SUBSTRING "$out" "Delete the contents of the output directory"
BT_EXPECT_FILE_CONTAINS_SUBSTRING "$out" "This is equivalent to running \`gn clean\`"
}
TEST_clean_short_help() {
local out="${BT_TEMP_DIR}/clean_short_help.out"
BT_EXPECT "${fx}" clean -h > "${out}"
BT_EXPECT_FILE_DOES_NOT_EXIST "${gn_mock}.mock_state"
BT_EXPECT_FILE_DOES_NOT_EXIST "${gen_mock}.mock_state"
BT_EXPECT_FILE_DOES_NOT_EXIST "${BT_TEMP_DIR}/call_order"
BT_EXPECT_FILE_CONTAINS_SUBSTRING "$out" "Delete the contents of the output directory"
}
TEST_clean_unknown_argument() {
local out="${BT_TEMP_DIR}/clean_unknown_arg.out"
BT_EXPECT_FAIL "${fx}" clean --unknown-arg > "${out}" 2>&1
BT_EXPECT_FILE_DOES_NOT_EXIST "${gn_mock}.mock_state"
BT_EXPECT_FILE_DOES_NOT_EXIST "${gen_mock}.mock_state"
BT_EXPECT_FILE_DOES_NOT_EXIST "${BT_TEMP_DIR}/call_order"
BT_EXPECT_FILE_CONTAINS_SUBSTRING "$out" "Unknown argument: --unknown-arg"
}
BT_RUN_TESTS "$@"