#!/bin/sh # The summary page for a single repository. The shared setup caps its log at # five entries, so the checks against the fifty commit repository prove the # cut lands where it should, and the clone url template has the repository # name substituted in. test_description='Check content on summary page' . ./setup.sh test_expect_success 'generate foo summary' 'cgit_url "foo" >tmp' test_expect_success 'find commit 1' 'grep "commit 1" tmp' test_expect_success 'find commit 5' 'grep "commit 5" tmp' test_expect_success 'find branch master' 'grep "master" tmp' test_expect_success 'no tags' '! grep "Tag" tmp' test_expect_success 'clone-url expanded correctly' ' grep "git://example.org/foo.git" tmp ' test_expect_success 'generate bar summary' 'cgit_url "bar" >tmp' test_expect_success 'repo description reaches the meta tag' ' grep "" tmp ' test_expect_success 'no commit 45' '! grep "commit 45" tmp' test_expect_success 'find commit 46' 'grep "commit 46" tmp' test_expect_success 'find commit 50' 'grep "commit 50" tmp' test_expect_success 'find branch master' 'grep "master" tmp' test_expect_success 'no tags' '! grep "Tag" tmp' test_expect_success 'clone-url expanded correctly' ' grep "git://example.org/bar.git" tmp ' # A clone url is shown as written, but a browser cannot follow the ssh, scp # or git forms, so those rows link to the first http url in the list, or to # the repository's own page when the list has none. test_expect_success 'a git clone url row falls back to the page url' ' grep "clone-url.>git://example.org/bar.git" tmp ' test_expect_success 'an scp clone url row links to the http url' ' { echo "virtual-root=/" && echo "cache-size=0" && echo "repo.url=foo" && echo "repo.path=$PWD/repos/foo/.git" && echo "repo.clone-url=git@example.org:foo https://example.org/foo" } >clonerc && CGIT_CONFIG="$PWD/clonerc" QUERY_STRING="url=foo" cgit >tmp && grep "title=.foo Git repository. href=.https://example.org/foo.>git@example.org:foo" tmp && grep "vcs-git. href=.https://example.org/foo." tmp && ! grep "vcs-git. href=.git@" tmp ' # Prints how many columns each row of the page's list table spans, one row to # a line, counting a cell without a colspan as one. row_widths() { sed -n "/]/ { width = 0 row = $0 while (match(row, /]/)) { row = substr(row, RSTART + 3) cell = substr(row, 1, index(row, ">")) if (match(cell, /colspan=.[0-9]+/)) width += substr(cell, RSTART + 9, RLENGTH - 9) else width++ } print width } ' } # Fails unless every row of the list table at the url is as many columns wide # as the second argument says. A third names a config other than colsrc. test_widths() { CGIT_CONFIG="$PWD/${3:-colsrc}" QUERY_STRING="url=$1" cgit >tmp && row_widths tmp | sort -u >actual && echo "$2" >expect && test_cmp expect actual } # The summary's sections share one table, so every row has to fill it, or the # stripe of a shorter row stops short of the table's edge. The table is as # wide as the log when both counts are on and as wide as a ref row otherwise. # Each repo below shows the same history with different counts, and every # section is cut short so that its [...] row is drawn too. test_expect_success 'set up a repo cut short in every section' ' mkrepo repos/cols 3 >/dev/null && git -C repos/cols branch other HEAD~1 && git -C repos/cols tag one HEAD~1 && git -C repos/cols tag -a -m two two && { echo "virtual-root=/" && echo "cache-size=0" && echo "summary-branches=1" && echo "summary-tags=1" && echo "summary-log=2" && echo "max-ref-count=1" && echo "clone-url=https://example.org/\$CGIT_REPO_URL" && echo "repo.url=none" && echo "repo.path=$PWD/repos/cols/.git" && echo "repo.url=lines" && echo "repo.path=$PWD/repos/cols/.git" && echo "repo.enable-log-linecount=1" && echo "repo.url=both" && echo "repo.path=$PWD/repos/cols/.git" && echo "repo.enable-log-filecount=1" && echo "repo.enable-log-linecount=1" } >colsrc && CGIT_CONFIG="$PWD/colsrc" QUERY_STRING="url=none" cgit >tmp && grep "" tmp && grep "" tmp && test $(grep -c ">\[...\]" tmp) = 3 ' test_expect_success 'a summary without counts fills four columns' 'test_widths none 4' test_expect_success 'a summary with one count fills four columns' 'test_widths lines 4' test_expect_success 'a summary with both counts fills five columns' 'test_widths both 5' test_expect_success 'a summary without a log fills four columns' ' sed "s/^summary-log=2$/summary-log=0/" colsrc >nologrc && test_widths both 4 nologrc ' # The refs page draws the same rows with nothing wider beside them. test_expect_success 'the refs page fills four columns' 'test_widths both/refs/ 4' test_expect_success 'a page of branches fills four columns' 'test_widths both/refs/heads 4' test_expect_success 'a page of tags fills four columns' 'test_widths both/refs/tags 4' test_done