Diff options
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/extensions/lib.sh | 22 | |
| -rw-r--r-- | tests/extensions/test-about-render.lua | 3 | |
| -rwxr-xr-x | tests/t0501-about-render.sh | 33 |
3 files changed, 43 insertions, 15 deletions
diff --git a/tests/extensions/lib.sh b/tests/extensions/lib.sh index 56098d0..041a042 100644 --- a/tests/extensions/lib.sh +++ b/tests/extensions/lib.sh @@ -67,6 +67,28 @@ lua_module_prereq() { fi } +# Runs the command given with every Lua search path pointed at an empty +# directory, so no Lua it starts, cgit's own included, finds a module that +# is not built in. A fallback for a missing module then runs on any machine. +without_lua_modules() { + mkdir -p "$TRASH_DIRECTORY/no-lua-modules" && + ( + for lua_variable in LUA_PATH LUA_PATH_5_2 LUA_PATH_5_3 \ + LUA_PATH_5_4 LUA_PATH_5_5 + do + eval "$lua_variable=\$TRASH_DIRECTORY/no-lua-modules/?.lua" + export $lua_variable + done + for lua_variable in LUA_CPATH LUA_CPATH_5_2 LUA_CPATH_5_3 \ + LUA_CPATH_5_4 LUA_CPATH_5_5 + do + eval "$lua_variable=\$TRASH_DIRECTORY/no-lua-modules/?.so" + export $lua_variable + 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 diff --git a/tests/extensions/test-about-render.lua b/tests/extensions/test-about-render.lua index e6813ef..7d714c3 100644 --- a/tests/extensions/test-about-render.lua +++ b/tests/extensions/test-about-render.lua @@ -19,7 +19,8 @@ h.load(script) -- A missing lpeg is written to the error log as the script loads. if mode == "nolpeg" then - h.contains("a missing lpeg is named in the error log", h.error_log(), "Unable to load lpeg") + h.equals("a missing lpeg is named in the error log", h.error_log(), + "[cgit] Unable to load lpeg, so markdown and man pages show as plain text\n") else h.equals("with lpeg the error log stays empty", h.error_log(), "") end diff --git a/tests/t0501-about-render.sh b/tests/t0501-about-render.sh index af68260..d432dd2 100755 --- a/tests/t0501-about-render.sh +++ b/tests/t0501-about-render.sh @@ -5,8 +5,9 @@ # extensions/, once with lpeg wherever that interpreter has it and once with # lpeg forced away so the plain text fallback is proven everywhere. A # repository with a markdown readme is then rendered through cgit itself, -# where the outcome depends on whether the Lua inside the binary has lpeg, so -# a probe decides which of the two right answers to expect. +# with lpeg wherever a probe finds it in the Lua inside the binary, and with +# every Lua module kept off the search path, which gives the fallback on any +# machine. test_description='Check the shipped about-render extension' CGIT_TEST_NO_CREATE_REPOS=YesPlease @@ -77,10 +78,6 @@ test_expect_success 'point cgit at it through the about filter' ' if cgit_lua_probe "$PWD/repos/md/.git" lpeg then test_set_prereq CGIT_LUA_LPEG -elif test "$CGIT_HAS_LUA" -eq 1 -then - test_set_prereq CGIT_LUA_NOLPEG - say 'cgit lua has no lpeg, expecting the plain text fallback' fi test_expect_success CGIT_LUA_LPEG 'the about page renders the markdown' ' @@ -119,14 +116,22 @@ test_expect_success CGIT_LUA_LPEG 'the about page shows plain text as it is' ' test_grep "<pre class=.plaintext.>Plain <b>notes</b> & more" tmp ' -test_expect_success CGIT_LUA_NOLPEG 'without lpeg the readme is served escaped' ' - cgit_url "md/about/" >tmp 2>err && - grep "<pre class=.plaintext.>" tmp && - grep "# The Title" tmp && - grep "Unable to load lpeg" err && - cgit_url "man/about/" >tmp && - grep "<pre class=.plaintext.>" tmp && - grep ".SH NAME" tmp +test_expect_success CGIT_LUA 'without lpeg every readme is served escaped' ' + echo "[cgit] Unable to load lpeg, so markdown and man pages show as plain text" >expect && + without_lua_modules cgit_url "md/about/" >tmp 2>err && + test_cmp expect err && + test_grep "^Status: 200" tmp && + test_grep "</html>" tmp && + test_grep "<pre class=.plaintext.># The Title" tmp && + test_grep "<script>alert(1)</script>" tmp && + test_grep ! "<script>alert(1)" tmp && + without_lua_modules cgit_url "man/about/" >tmp 2>err && + test_cmp expect err && + test_grep "<pre class=.plaintext.>\.TH TOOL 1" tmp && + test_grep -F ".SH NAME" tmp && + without_lua_modules cgit_url "txt/about/" >tmp 2>err && + test_cmp expect err && + test_grep "<pre class=.plaintext.>Plain <b>notes</b> & more" tmp ' test_done |
