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