diff options
context:
space:
mode:
Diffstat (limited to 'tests/extensions/lib.sh')
-rw-r--r--tests/extensions/lib.sh70
1 file changed, 70 insertions, 0 deletions
diff --git a/tests/extensions/lib.sh b/tests/extensions/lib.sh
new file mode 100644
index 0000000..1b31a4b
--- /dev/null
+++ b/tests/extensions/lib.sh
@@ -0,0 +1,70 @@
+# Shared groundwork for the t05xx scripts, sourced after setup.sh from inside
+# the trash directory. It locates the shipped extensions and the unit checks
+# beside this file, finds the standalone Lua interpreters the checks can run
+# under, and offers a probe that asks the Lua inside the cgit binary itself
+# whether a module is available to it, since that interpreter can differ from
+# every standalone one on the path.
+
+EXTENSIONS_DIRECTORY=$(cd "$TEST_OUTPUT_DIRECTORY/../custom/extensions" && pwd)
+EXT_TEST_DIRECTORY=$(cd "$TEST_OUTPUT_DIRECTORY/extensions" && pwd)
+
+# Prints the Lua version a binary reports, like 5.1, which is also what
+# LuaJIT reports.
+ext_lua_version() {
+ "$1" -e 'io.write(string.match(_VERSION, "%d+%.%d+"))' 2>/dev/null
+}
+
+# Prints the interpreters found on the path whose version falls between 5.1
+# and the given 5.x ceiling, one per line, since each extension states the
+# versions it runs on and a test must not fail a script on a version it never
+# claimed.
+ext_lua_interpreters() {
+ ext_lua_ceiling=$1
+ for ext_lua_bin in luajit lua5.1 lua5.2 lua5.3 lua5.4 lua5.5 lua
+ do
+ command -v "$ext_lua_bin" >/dev/null 2>&1 || continue
+ case "$(ext_lua_version "$ext_lua_bin")" in
+ 5.[1-9])
+ ext_lua_minor=$(ext_lua_version "$ext_lua_bin")
+ ext_lua_minor=${ext_lua_minor#5.}
+ test "$ext_lua_minor" -le "$ext_lua_ceiling" &&
+ echo "$ext_lua_bin"
+ ;;
+ esac
+ done
+}
+
+# Asks whether cgit's own Lua can require every module named, by pointing a
+# throwaway commit-filter at the given repository and reading its answer off
+# the rendered commit page. Filters need a page to run on, which is why a
+# repository has to be handed in.
+cgit_lua_probe() {
+ test "$CGIT_HAS_LUA" -eq 1 || return 1
+ cgit_lua_probe_gitdir=$1
+ shift
+ {
+ echo "function filter_open(...) end"
+ echo "function filter_write(str) end"
+ echo "function filter_close()"
+ echo " local ok = true"
+ for cgit_lua_probe_module in "$@"
+ do
+ echo " if not pcall(require, '$cgit_lua_probe_module') then"
+ echo " ok = false"
+ echo " end"
+ done
+ echo " if ok then html('LUA_PROBE_YES') else html('LUA_PROBE_NO') end"
+ echo " return 0"
+ echo "end"
+ } >lua-probe.lua
+ cat >lua-probe-cgitrc <<EOF
+virtual-root=/
+cache-size=0
+enable-filter-overrides=1
+repo.url=lua-probe
+repo.path=$cgit_lua_probe_gitdir
+repo.commit-filter=lua:$PWD/lua-probe.lua
+EOF
+ CGIT_CONFIG="$PWD/lua-probe-cgitrc" QUERY_STRING="url=lua-probe/commit/" \
+ cgit | grep -q LUA_PROBE_YES
+}