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