blob: 8cdb1a6aaa94efd513426ca45321cdb8eda2476c [file] [log] [blame]
#!/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 expected behavior from fx helpdoc
BT_FILE_DEPS=(
"scripts/fx"
"scripts/fx-help.awk"
"tools/devshell/helpdoc"
"tools/devshell/lib/fx-cmd-locator.sh"
"tools/devshell/lib/fx-optional-features.sh"
"tools/devshell/lib/vars.sh"
"tools/devshell/lib/platform.sh"
)
BT_MOCKED_TOOLS=(
"tools/devshell/lib/metrics.sh"
)
BT_MKDIR_DEPS=(
".jiri_root"
"helpdoc_out"
)
declare fx
BT_SET_UP() {
source "${BT_TEMP_DIR}/tools/devshell/tests/lib/fuchsia-mock.sh"
fx="$(btf::setup_fx)"
# 'fx helpdoc' executes 'fx help' internally, so mocked fx needs to be in path
btf::add_binary_to_path "${fx}"
}
# ensure that "fx helpdoc" does not generate docs for vendor commands when
# executed with the default arguments
TEST_check-no-vendor() {
mkdir -p "${BT_TEMP_DIR}/vendor/mycompany/scripts/devshell"
local vendor_cmd="vendor_command"
cp "${BT_TEMP_DIR}/tools/devshell/helpdoc" "${BT_TEMP_DIR}/vendor/mycompany/scripts/devshell/${vendor_cmd}"
local out="${BT_TEMP_DIR}/_fx_helpdoc_output"
BT_EXPECT "${fx}" helpdoc "${BT_TEMP_DIR}/helpdoc_out" > "${out}"
BT_EXPECT_EMPTY "$(find "${BT_TEMP_DIR}/helpdoc_out" -name "${vendor_cmd}*")"
}
# ensure that "fx helpdoc" does generate docs for vendor commands when
# executed with the "--vendor" argument
TEST_check-vendor() {
mkdir -p "${BT_TEMP_DIR}/vendor/mycompany/scripts/devshell"
local vendor_cmd="vendor_command"
cp "${BT_TEMP_DIR}/tools/devshell/helpdoc" "${BT_TEMP_DIR}/vendor/mycompany/scripts/devshell/${vendor_cmd}"
local out="${BT_TEMP_DIR}/_fx_helpdoc_output"
BT_EXPECT "${fx}" helpdoc --vendor "${BT_TEMP_DIR}/helpdoc_out" > "${out}"
BT_EXPECT_NOT_EMPTY "$(find "${BT_TEMP_DIR}/helpdoc_out" -name "${vendor_cmd}*")"
}
_create_subcommand() {
local subcommand="$1"
local subcommand_file="${BT_TEMP_DIR}/$2/${subcommand}"
local subcommand_output="$3"
local summary="$4"
local long_description_1="$5"
local long_description_2="$6"
local category="Testing"
if [[ $# -gt 6 ]]; then
category="$7"
fi
mkdir -p "$(dirname "${subcommand_file}")"
cat >"${subcommand_file}" <<EOF
#!/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.
### ${summary}
#### CATEGORY=${category}
## ${long_description_1}
## ${long_description_2}
echo "${subcommand_output}"
EOF
chmod u+x "${subcommand_file}"
BT_ASSERT_FILE_EXISTS "${subcommand_file}"
[[ -x "${subcommand_file}" ]]
BT_ASSERT_GOOD_STATUS $? "File ${subcommand_file} must be executable"
}
# ensure that "fx helpdoc" normalizes (camel case) category names
TEST_check-category-normalized() {
local subcommand="mycommand1"
local category="Category UpperCASE 1"
local norm_category="Category uppercase 1"
_create_subcommand "${subcommand}" "tools/devshell" "howdy!" "summary1" "line1" "line2" "${category}"
local _stdout="${BT_TEMP_DIR}/_fx_helpdoc_output"
local _dirout="${BT_TEMP_DIR}/helpdoc_out"
BT_EXPECT "${fx}" helpdoc "${_dirout}" > "${_stdout}"
BT_EXPECT_FILE_CONTAINS_SUBSTRING "${_dirout}/_toc.yaml" "title: \"${norm_category}"
BT_EXPECT_FILE_CONTAINS_SUBSTRING "${_dirout}/index.md" "[${norm_category}]"
}
# ensure that paths in _toc.yaml files created by "fx helpdoc" have the
# correct prefix
TEST_check-paths() {
local prefix="/mycustom_path/should/work"
local out="${BT_TEMP_DIR}/_fx_helpdoc_output"
BT_EXPECT "${fx}" helpdoc --toc-prefix "${prefix}" helpdoc_out > "${out}"
BT_EXPECT_EMPTY "$(find "helpdoc_out" -name "*_toc.yaml" | xargs grep -E "^\s*(path|include):" | grep -v -E "\s${prefix}")"
}
BT_RUN_TESTS "$@"