b0d29bc47d
Having kyua in the base system will simplify automated testing in CI and eliminates bootstrapping issues on new platforms. The build of kyua is controlled by WITH(OUT)_TESTS_SUPPORT. Reviewed by: emaste Obtained from: CheriBSD Sponsored by: DARPA Differential Revision: https://reviews.freebsd.org/D24103
236 lines
6.0 KiB
Bash
Executable File
236 lines
6.0 KiB
Bash
Executable File
# Copyright 2014 The Kyua Authors.
|
|
# All rights reserved.
|
|
#
|
|
# Redistribution and use in source and binary forms, with or without
|
|
# modification, are permitted provided that the following conditions are
|
|
# met:
|
|
#
|
|
# * Redistributions of source code must retain the above copyright
|
|
# notice, this list of conditions and the following disclaimer.
|
|
# * Redistributions in binary form must reproduce the above copyright
|
|
# notice, this list of conditions and the following disclaimer in the
|
|
# documentation and/or other materials provided with the distribution.
|
|
# * Neither the name of Google Inc. nor the names of its contributors
|
|
# may be used to endorse or promote products derived from this software
|
|
# without specific prior written permission.
|
|
#
|
|
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
|
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
|
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
|
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
|
|
|
|
# Absolute path to the uninstalled script.
|
|
MANBUILD="__MANBUILD__"
|
|
|
|
|
|
atf_test_case empty
|
|
empty_body() {
|
|
touch input
|
|
atf_check "${MANBUILD}" input output
|
|
atf_check cat output
|
|
}
|
|
|
|
|
|
atf_test_case no_replacements
|
|
no_replacements_body() {
|
|
cat >input <<EOF
|
|
This is a manpage.
|
|
|
|
With more than one line.
|
|
EOF
|
|
atf_check "${MANBUILD}" input output
|
|
atf_check -o file:input cat output
|
|
}
|
|
|
|
|
|
atf_test_case one_replacement
|
|
one_replacement_body() {
|
|
cat >input <<EOF
|
|
This is a manpage.
|
|
Where __FOO__ gets replaced.
|
|
And nothing more.
|
|
EOF
|
|
atf_check "${MANBUILD}" -v FOO=this input output
|
|
cat >expout <<EOF
|
|
This is a manpage.
|
|
Where this gets replaced.
|
|
And nothing more.
|
|
EOF
|
|
atf_check -o file:expout cat output
|
|
}
|
|
|
|
|
|
atf_test_case some_replacements
|
|
some_replacements_body() {
|
|
cat >input <<EOF
|
|
This is a manpage.
|
|
Where __FOO__ gets __BAR__.
|
|
And nothing more.
|
|
EOF
|
|
atf_check "${MANBUILD}" -v FOO=this -v BAR=replaced input output
|
|
cat >expout <<EOF
|
|
This is a manpage.
|
|
Where this gets replaced.
|
|
And nothing more.
|
|
EOF
|
|
atf_check -o file:expout cat output
|
|
}
|
|
|
|
|
|
atf_test_case preserve_tricky_lines
|
|
preserve_tricky_lines_body() {
|
|
cat >input <<EOF
|
|
Begin
|
|
This line is intended.
|
|
This other \\
|
|
continues later.
|
|
\*(LtAnd this has strange characters\*(Gt
|
|
End
|
|
EOF
|
|
atf_check "${MANBUILD}" input output
|
|
cat >expout <<EOF
|
|
Begin
|
|
This line is intended.
|
|
This other \\
|
|
continues later.
|
|
\*(LtAnd this has strange characters\*(Gt
|
|
End
|
|
EOF
|
|
atf_check -o file:expout cat output
|
|
}
|
|
|
|
|
|
atf_test_case includes_ok
|
|
includes_ok_body() {
|
|
mkdir doc doc/subdir
|
|
cat >doc/input <<EOF
|
|
This is a manpage.
|
|
__include__ subdir/chunk
|
|
There is more...
|
|
__include__ chunk
|
|
And done!
|
|
EOF
|
|
cat >doc/subdir/chunk <<EOF
|
|
This is the first inclusion
|
|
and worked __OK__.
|
|
EOF
|
|
cat >doc/chunk <<EOF
|
|
This is the second inclusion.
|
|
EOF
|
|
atf_check "${MANBUILD}" -v OK=ok doc/input output
|
|
cat >expout <<EOF
|
|
This is a manpage.
|
|
This is the first inclusion
|
|
and worked ok.
|
|
There is more...
|
|
This is the second inclusion.
|
|
And done!
|
|
EOF
|
|
atf_check -o file:expout cat output
|
|
}
|
|
|
|
|
|
atf_test_case includes_parameterized
|
|
includes_parameterized_body() {
|
|
cat >input <<EOF
|
|
__include__ chunk value=first
|
|
__include__ chunk value=second
|
|
EOF
|
|
cat >chunk <<EOF
|
|
This is a chunk with value: __value__.
|
|
EOF
|
|
atf_check "${MANBUILD}" input output
|
|
cat >expout <<EOF
|
|
This is a chunk with value: first.
|
|
This is a chunk with value: second.
|
|
EOF
|
|
atf_check -o file:expout cat output
|
|
}
|
|
|
|
|
|
atf_test_case includes_fail
|
|
includes_fail_body() {
|
|
cat >input <<EOF
|
|
This is a manpage.
|
|
__include__ missing
|
|
EOF
|
|
atf_check -s exit:1 -o ignore \
|
|
-e match:"manbuild.sh: Failed to generate output.*left unreplaced" \
|
|
"${MANBUILD}" input output
|
|
[ ! -f output ] || atf_fail "Output file was generated but it should" \
|
|
"not have been"
|
|
}
|
|
|
|
|
|
atf_test_case generate_fail
|
|
generate_fail_body() {
|
|
touch input
|
|
atf_check -s exit:1 -o ignore \
|
|
-e match:"manbuild.sh: Failed to generate output" \
|
|
"${MANBUILD}" -v 'malformed&name=value' input output
|
|
[ ! -f output ] || atf_fail "Output file was generated but it should" \
|
|
"not have been"
|
|
}
|
|
|
|
|
|
atf_test_case validate_fail
|
|
validate_fail_body() {
|
|
cat >input <<EOF
|
|
This is a manpage.
|
|
Where __FOO__ gets replaced.
|
|
But where __BAR__ doesn't.
|
|
EOF
|
|
atf_check -s exit:1 -o ignore \
|
|
-e match:"manbuild.sh: Failed to generate output.*left unreplaced" \
|
|
"${MANBUILD}" -v FOO=this input output
|
|
[ ! -f output ] || atf_fail "Output file was generated but it should" \
|
|
"not have been"
|
|
}
|
|
|
|
|
|
atf_test_case bad_args
|
|
bad_args_body() {
|
|
atf_check -s exit:1 \
|
|
-e match:'manbuild.sh: Must provide input and output names' \
|
|
"${MANBUILD}"
|
|
|
|
atf_check -s exit:1 \
|
|
-e match:'manbuild.sh: Must provide input and output names' \
|
|
"${MANBUILD}" foo
|
|
|
|
atf_check -s exit:1 \
|
|
-e match:'manbuild.sh: Must provide input and output names' \
|
|
"${MANBUILD}" foo bar baz
|
|
}
|
|
|
|
|
|
atf_test_case bad_option
|
|
bad_option_body() {
|
|
atf_check -s exit:1 -e match:'manbuild.sh: Unknown option -Z' \
|
|
"${MANBUILD}" -Z
|
|
}
|
|
|
|
|
|
atf_init_test_cases() {
|
|
atf_add_test_case empty
|
|
atf_add_test_case no_replacements
|
|
atf_add_test_case one_replacement
|
|
atf_add_test_case some_replacements
|
|
atf_add_test_case preserve_tricky_lines
|
|
atf_add_test_case includes_ok
|
|
atf_add_test_case includes_parameterized
|
|
atf_add_test_case includes_fail
|
|
atf_add_test_case generate_fail
|
|
atf_add_test_case validate_fail
|
|
atf_add_test_case bad_args
|
|
atf_add_test_case bad_option
|
|
}
|