Disallow empty section and variable names
[gitweb.git] / t / gitweb-lib.sh
index 845253274b72e18a72858104a59ea32c9da0a862..b9bb95feaa5088254b002c2806c2c2ae9e9d7be4 100644 (file)
@@ -19,29 +19,47 @@ our \$site_name = '[localhost]';
 our \$site_header = '';
 our \$site_footer = '';
 our \$home_text = 'indextext.html';
-our @stylesheets = ('file:///$TEST_DIRECTORY/../gitweb/gitweb.css');
-our \$logo = 'file:///$TEST_DIRECTORY/../gitweb/git-logo.png';
-our \$favicon = 'file:///$TEST_DIRECTORY/../gitweb/git-favicon.png';
+our @stylesheets = ('file:///$GIT_BUILD_DIR/gitweb/static/gitweb.css');
+our \$logo = 'file:///$GIT_BUILD_DIR/gitweb/static/git-logo.png';
+our \$favicon = 'file:///$GIT_BUILD_DIR/gitweb/static/git-favicon.png';
 our \$projects_list = '';
 our \$export_ok = '';
 our \$strict_export = '';
+our \$maxload = undef;
 
 EOF
 
        cat >.git/description <<EOF
 $0 test repository
 EOF
+
+       # You can set the GITWEB_TEST_INSTALLED environment variable to
+       # the gitwebdir (the directory where gitweb is installed / deployed to)
+       # of an existing gitweb instalation to test that installation,
+       # or simply to pathname of installed gitweb script.
+       if test -n "$GITWEB_TEST_INSTALLED" ; then
+               if test -d $GITWEB_TEST_INSTALLED; then
+                       SCRIPT_NAME="$GITWEB_TEST_INSTALLED/gitweb.cgi"
+               else
+                       SCRIPT_NAME="$GITWEB_TEST_INSTALLED"
+               fi
+               test -f "$SCRIPT_NAME" ||
+               error "Cannot find gitweb at $GITWEB_TEST_INSTALLED."
+               say "# Testing $SCRIPT_NAME"
+       else # normal case, use source version of gitweb
+               SCRIPT_NAME="$GIT_BUILD_DIR/gitweb/gitweb.perl"
+       fi
+       export SCRIPT_NAME
 }
 
 gitweb_run () {
        GATEWAY_INTERFACE='CGI/1.1'
        HTTP_ACCEPT='*/*'
        REQUEST_METHOD='GET'
-       SCRIPT_NAME="$TEST_DIRECTORY/../gitweb/gitweb.perl"
        QUERY_STRING=""$1""
        PATH_INFO=""$2""
        export GATEWAY_INTERFACE HTTP_ACCEPT REQUEST_METHOD \
-               SCRIPT_NAME QUERY_STRING PATH_INFO
+               QUERY_STRING PATH_INFO
 
        GITWEB_CONFIG=$(pwd)/gitweb_config.perl
        export GITWEB_CONFIG
@@ -52,22 +70,36 @@ gitweb_run () {
        rm -f gitweb.log &&
        perl -- "$SCRIPT_NAME" \
                >gitweb.output 2>gitweb.log &&
+       perl -w -e '
+               open O, ">gitweb.headers";
+               while (<>) {
+                       print O;
+                       last if (/^\r$/ || /^$/);
+               }
+               open O, ">gitweb.body";
+               while (<>) {
+                       print O;
+               }
+               close O;
+       ' gitweb.output &&
        if grep '^[[]' gitweb.log >/dev/null 2>&1; then false; else true; fi
 
        # gitweb.log is left for debugging
-       # gitweb.output is used to parse http output
+       # gitweb.output is used to parse HTTP output
+       # gitweb.headers contains only HTTP headers
+       # gitweb.body contains body of message, without headers
 }
 
 . ./test-lib.sh
 
 if ! test_have_prereq PERL; then
-       say 'skipping gitweb tests, perl not available'
+       skip_all='skipping gitweb tests, perl not available'
        test_done
 fi
 
-perl -MEncode -e 'decode_utf8("", Encode::FB_CROAK)' >/dev/null 2>&1 || {
-    say 'skipping gitweb tests, perl version is too old'
-    test_done
+perl -MEncode -e '$e="";decode_utf8($e, Encode::FB_CROAK)' >/dev/null 2>&1 || {
+       skip_all='skipping gitweb tests, perl version is too old'
+       test_done
 }
 
 gitweb_init