summaryrefslogtreecommitdiff
path: root/doc/manbuild_test.sh
diff options
context:
space:
mode:
Diffstat (limited to 'doc/manbuild_test.sh')
-rwxr-xr-xdoc/manbuild_test.sh235
1 files changed, 235 insertions, 0 deletions
diff --git a/doc/manbuild_test.sh b/doc/manbuild_test.sh
new file mode 100755
index 000000000000..87234324e829
--- /dev/null
+++ b/doc/manbuild_test.sh
@@ -0,0 +1,235 @@
+# 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
+}