110 lines
2.9 KiB
Bash
Executable File
110 lines
2.9 KiB
Bash
Executable File
#! /usr/bin/env sh
|
|
# Copyright (C) 2024 - 2024:
|
|
# The Trinitrix Project <bpeetz@b-peetz.de, antifallobst@systemausfall.org>
|
|
# SPDX-License-Identifier: LGPL-3.0-or-later
|
|
#
|
|
# This file is part of the Trinitry crate for Trinitrix.
|
|
#
|
|
# Trinitry is free software: you can redistribute it and/or modify
|
|
# it under the terms of the Lesser 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
|
|
# and the Lesser GNU General Public License along with this program.
|
|
# If not, see <https://www.gnu.org/licenses/>.
|
|
|
|
# This script generates ./src/tests.rs
|
|
|
|
# Library {{{
|
|
mktmp() {
|
|
ensure_tmp_dir
|
|
mktemp -p "$LIB_TEMP_DIR_FOR_SCRIPT"
|
|
}
|
|
ensure_tmp_dir() {
|
|
if ! [ -d "$LIB_TEMP_DIR_FOR_SCRIPT" ]; then
|
|
LIB_TEMP_DIR_FOR_SCRIPT="$(mktemp -d)"
|
|
export LIB_TEMP_DIR_FOR_SCRIPT
|
|
fi
|
|
}
|
|
remove_tmp_dir() {
|
|
# The test is here because some scripts still delete this on their own
|
|
if [ -d "$LIB_TEMP_DIR_FOR_SCRIPT" ]; then
|
|
rm -r "$LIB_TEMP_DIR_FOR_SCRIPT"
|
|
fi
|
|
}
|
|
|
|
trap remove_tmp_dir EXIT
|
|
ensure_tmp_dir # ensure that the variable has been set, even in subshells
|
|
# }}}
|
|
|
|
tmp="$(mktmp)"
|
|
|
|
curl https://raw.githubusercontent.com/minimaxir/big-list-of-naughty-strings/master/blns.txt |
|
|
awk '!/^#/' |
|
|
awk '!/^[\s\t]*$/' |
|
|
awk -v s="'" '!/.*s.*/' |
|
|
|
|
# This entry contains duplicated spaces, just ignore it
|
|
awk '!/Power/' |
|
|
iconv -c -f utf-8 -t ascii \
|
|
>"$tmp"
|
|
|
|
counter=0
|
|
|
|
cat <<EOF
|
|
// DO NOT EDIT
|
|
// This file is automatically generated by the 'update.sh' file, with data from:
|
|
// https://raw.githubusercontent.com/minimaxir/big-list-of-naughty-strings/master/blns.txt
|
|
|
|
#[cfg(test)]
|
|
mod test {
|
|
use crate::Trinitry;
|
|
EOF
|
|
|
|
while read -r name; do
|
|
tmp2="$(mktmp)"
|
|
printf "%s" "$name" >"$tmp2"
|
|
if rg '^[A-Za-z0-9_.-]+$' "$tmp2" -q; then
|
|
cat <<EOF
|
|
#[test]
|
|
fn parse_$counter() {
|
|
let p = Trinitry::new(r##"$name"##).unwrap_or_else(|e| {
|
|
panic!("{}", e);
|
|
});
|
|
assert_eq!(r##"$name"##, &p.to_string());
|
|
}
|
|
EOF
|
|
elif rg '^[A-Za-z0-9_.-]+ [A-Za-z0-9_.(){}<>?!+^@&*~|=,/\\ -]*$' "$tmp2" -q; then
|
|
cat <<EOF
|
|
#[test]
|
|
fn parse_$counter() {
|
|
let p = Trinitry::new(r##"$name"##).unwrap_or_else(|e| {
|
|
panic!("{}", e);
|
|
});
|
|
assert_eq!(r##"$name"##, &p.to_string());
|
|
}
|
|
EOF
|
|
else
|
|
cat <<EOF
|
|
#[test]
|
|
fn parse_$counter() {
|
|
let p = Trinitry::new(r##"$name"##);
|
|
assert!(p.is_err());
|
|
}
|
|
EOF
|
|
fi
|
|
counter=$((counter + 1))
|
|
done <"$tmp"
|
|
|
|
cat <<EOF
|
|
}
|
|
EOF
|
|
|
|
# vim: ft=sh
|