summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorP. J. McDermott <pj@pehjota.net>2014-08-16 12:15:04 (EDT)
committer P. J. McDermott <pj@pehjota.net>2014-08-16 16:29:51 (EDT)
commitbb70bf16b320819d1e94bb128b92c6b5b29bc096 (patch)
treeabe0726f6d44b9985db387e1cea5aa06a100214c /tests
parent9f46fc5e8495af7316d086c2576b535544b144a6 (diff)
Add parse_control() tests framework
Diffstat (limited to 'tests')
-rw-r--r--tests/parse_control.common.sh93
1 files changed, 93 insertions, 0 deletions
diff --git a/tests/parse_control.common.sh b/tests/parse_control.common.sh
new file mode 100644
index 0000000..2ff9a6e
--- /dev/null
+++ b/tests/parse_control.common.sh
@@ -0,0 +1,93 @@
+#!/bin/sh
+#
+# ProteanOS Development Kit
+# tests/parse_control.common.sh
+# Common parse_control() tests functions
+#
+# Copyright (C) 2014 Patrick "P. J." McDermott
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+. "${srcdir}/tests/common.sh"
+
+use output
+use control
+
+load_locale
+
+HT=' '
+LF='
+'
+
+test_result=
+
+field()
+{
+ test_results="${test_results}${1}${HT}${2}${LF}"
+}
+
+para()
+{
+ test_results="${test_results}ΒΆ${LF}"
+}
+
+parse_control - field para "${req_fields}" <<-EOF
+ ${packages}
+ EOF
+
+printf 'Required fields: %s\n\n' "${req_fields}"
+
+printf 'Diff:\n'
+exec 3<<-EOF
+ ${results}
+ EOF
+exec 4<<-EOF
+ ${test_results}
+ EOF
+line_no=0
+while :; do
+ line_no=$(($line_no + 1))
+ errors=0
+ read -r good_line <&3 || errors=$(($errors + 1))
+ read -r test_line <&4 || errors=$(($errors + 1))
+ [ ${errors} -eq 2 ] && break
+ if [ "x${good_line}" = "x${test_line}" ]; then
+ printf '%3d %s\n' ${line_no} "${good_line}"
+ else
+ printf '%3d %s-%s%s\n' ${line_no} "${red}" "${good_line}" \
+ "${std}"
+ printf '%3d %s+%s%s\n' ${line_no} "${grn}" "${test_line}" \
+ "${std}"
+ tests_es=1
+ fi
+done
+exec 3<&-
+exec 4<&-
+
+printf '\nExpected results:\n'
+line_no=0
+while read -r line; do
+ line_no=$(($line_no + 1))
+ printf '%3d %s\n' ${line_no} "${line}"
+done <<-EOF
+ ${results}
+ EOF
+printf '\nTest results:\n'
+line_no=0
+while read -r line; do
+ line_no=$(($line_no + 1))
+ printf '%3d %s\n' ${line_no} "${line}"
+done <<-EOF
+ ${test_results}
+ EOF