aboutsummaryrefslogtreecommitdiff
path: root/tests/assert-catgets.sh
diff options
context:
space:
mode:
Diffstat (limited to 'tests/assert-catgets.sh')
-rwxr-xr-x[-rw-r--r--]tests/assert-catgets.sh67
1 files changed, 67 insertions, 0 deletions
diff --git a/tests/assert-catgets.sh b/tests/assert-catgets.sh
index e69de29..885e186 100644..100755
--- a/tests/assert-catgets.sh
+++ b/tests/assert-catgets.sh
@@ -0,0 +1,67 @@
+#!/bin/sh
+set -eu
+
+assert_sequential_ids() {
+ awk '
+ BEGIN {
+ n = 0
+ }
+
+ /^#define MSG_/ {
+ if (++n != $3) {
+ print "Bad sequential ID:"
+ printf "%s:%s:%s\n", FILENAME, NR, $0
+ printf "expected: %s\ngot: %s\n", n, $3
+ exit 1
+ }
+ }
+ ' "$1"
+}
+
+assert_consistent_msg_definitions() {
+ awk '
+ BEGIN {
+ i = 0
+ j = 0
+ }
+
+ /^#define MSG_/ {
+ defines[i++] = $2
+ }
+
+ /^\t\[MSG_/ {
+ msgs[j++] = substr($0, 3, index($0, "]") - 3)
+ }
+
+ END {
+ for (n in defines) {
+ if (defines[n] != msgs[n]) {
+ printf "Order mismatch between #define"
+ printf " and usage in MSGS[]:\n"
+ printf "#define: %s\nMSGS[]: %s\n",
+ defines[n], msgs[n]
+ exit 1
+ }
+ }
+ }
+ ' "$1"
+}
+
+assert_no_unused_msgs() {
+ DEFINES="$(mktemp)"
+ USAGES="$(mktemp)"
+ awk '/^#define MSG_/ { print $2 }' "$f" | sort > "$DEFINES"
+ awk -F'_\\(' '
+ /_\(MSG_/ { print substr($2, 0, index($2, ")") - 1) }
+ ' "$f" | sort | uniq > "$USAGES"
+ if ! diff "$DEFINES" "$USAGES"; then
+ echo 'Some defined MSG_ items not being used' >&2
+ exit 1
+ fi
+}
+
+for f in "$@"; do
+ assert_sequential_ids "$f"
+ assert_consistent_msg_definitions "$f"
+ assert_no_unused_msgs "$f"
+done