| #!/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 "$@" |