blob: c1a834a6a8a63cadbc8c2544f8474fd73d095ffa [file] [log] [blame]
#!/bin/bash
# Copyright 2020 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 "contrib/format-code" script.
readonly TESTDATA="data/fx_format_code_test"
BT_FILE_DEPS=(
"scripts/fx"
"tools/devshell/contrib/format-code"
"tools/devshell/lib/fx-cmd-locator.sh"
"tools/devshell/lib/fx-optional-features.sh"
"tools/devshell/lib/image_build_vars.sh"
"tools/devshell/lib/vars.sh"
"tools/devshell/tests/subcommands/${TESTDATA}/cplusplus.cc"
"tools/devshell/tests/subcommands/${TESTDATA}/rust.rs"
"tools/devshell/tests/subcommands/${TESTDATA}/gn.gn"
"tools/devshell/tests/subcommands/${TESTDATA}/gn.gni"
"tools/devshell/tests/subcommands/${TESTDATA}/python3.py"
)
MOCK_CLANG_DIR="prebuilt/third_party/clang/test"
MOCK_GN="prebuilt/third_party/gn/test/gn"
MOCK_PYTHON3_DIR="prebuilt/third_party/python3/test"
MOCK_RUST_TOOLS_DIR="prebuilt/third_party/rust_tools/test"
BT_MOCKED_TOOLS=(
"tools/devshell/list-build-artifacts"
"tools/devshell/lib/platform.sh"
"prebuilt/third_party/vpython/vpython3"
"${MOCK_CLANG_DIR}/bin/clang-format"
"${MOCK_GN}"
"${MOCK_PYTHON3_DIR}/bin/python3.8"
"${MOCK_RUST_TOOLS_DIR}/bin/rustfmt"
)
BT_MKDIR_DEPS=(
".jiri_root"
)
BT_SET_UP() {
# Set up the testing framework.
source "${BT_TEMP_DIR}/tools/devshell/tests/lib/fuchsia-mock.sh"
fx="$(btf::setup_fx)"
# Set up mocked replacements for system utils.
export PATH="${BT_TEMP_DIR}/bin:${PATH}"
cat > "${BT_TEMP_DIR}/tools/devshell/lib/platform.sh.mock_side_effects" <<EOF
readonly PREBUILT_CLANG_DIR=${BT_TEMP_DIR}/${MOCK_CLANG_DIR}
readonly PREBUILT_GN=${BT_TEMP_DIR}/${MOCK_GN}
readonly PREBUILT_PYTHON3_DIR=${BT_TEMP_DIR}/${MOCK_PYTHON3_DIR}
readonly PREBUILT_RUST_TOOLS_DIR=${BT_TEMP_DIR}/${MOCK_RUST_TOOLS_DIR}
EOF
}
# Ensure that formatting an unchanged tree works
TEST_fx-format-code-no-args() {
BT_EXPECT ${fx} format-code 2> stderr
}
# Ensure that the commands for common file types are sensible.
TEST_fx-format-code-commands() {
local out="${BT_TEMP_DIR}/_fx_format_code_output"
local files=(
"${TESTDATA}/cplusplus.cc"
"${TESTDATA}/rust.rs"
"${TESTDATA}/gn.gn"
"${TESTDATA}/gn.gni"
"${TESTDATA}/python3.py"
)
local csfiles
printf -v csfiles ",%s" "${files[@]}"
BT_EXPECT ${fx} format-code --verbose --files="${csfiles:1}" > "${out}"
BT_EXPECT grep -q -E '"clang-format.*cplusplus.cc"' "${out}"
BT_EXPECT grep -q -E '"gn format.*gn.gn"' "${out}"
BT_EXPECT grep -q -E '"gn format.*gn.gni"' "${out}"
BT_EXPECT grep -q -E '"rustfmt.*rust.rs"' "${out}"
BT_EXPECT grep -q -E '"yapf.*python3.py"' "${out}"
}
BT_RUN_TESTS "$@"