#!/bin/bash

# Copyright (C) 2013, Rafael Laboissiere <rafael@laboissiere.net>
#
# This program is free software; you can redistribute it and/or modify it
# under the terms of the 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.
#
# On Debian systems, the complete text of the GNU General Public License
# version 3 can be found in the /usr/share/common-licenses/GPL-3 file.

set -u

TESTTYPE=Mangle
. ./lib_test_uscan

COMMAND="uscan --no-conf"

# set safe defaults
WEBSCRIPT=":"
DEBUGECHO=":"
DEBUGLSLR=":"
DEBUGBASH=":"
# comment out for debug
#COMMAND="$COMMAND --debug"
#COMMAND="$COMMAND --verbose"
#DEBUGECHO=echo
#DEBUGLSLR="ls -laR"
#DEBUGLSLR="ls -la"
#DEBUGBASH="bash -i"

# Initial Debian revision value is distribution dependent
SUFFIX="1"
if command -v dpkg-vendor >/dev/null; then
    VENDER="$(dpkg-vendor --query Vendor 2>/dev/null|tr 'A-Z' 'a-z')"
    case "$VENDER" in
        debian) SUFFIX="1" ;;
        *) SUFFIX="0${VENDER}1" ;;
    esac
fi

tearDown(){
    killHttpServer
    echo
}

trap tearDown EXIT

containsName(){
  echo "$1" | grep -qF "$2"
  echo $?
}

. "${0%/*}/shunit2-helper-functions.sh"

# The following tests do the following: (1) create a minimal Debian package
# directory, containing minimal files debian/{changelog,watch,copyright},
# (2) create a minimal repository, containing a tarball (built on the fly),
# (3) start an HTTP server that works offline, using the SimpleHTTPServer
# module of Python, and (4) run uscan inside that minimal universe.

# make debian/ in `pwd`
# debian/watch contains $WATCHVER and $WATCHLINE with template URL updated
makeDebianDir() {
    DEBNAME=${1:-foo} # Debian source package name
    DEBVER=${2:-1.0}  # Debian source package version
    mkdir -p debian/source

    cat <<END > debian/rules
%:
        dh $@
END
chmod 755 debian/rules

    cat <<END > debian/changelog
$DEBNAME ($DEBVER) unstable; urgency=low

  * Release of the $DEBNAME package $DEBVER.

 -- Joe Developer <jd@debian.org>  Mon, 02 Nov 2013 22:21:31 -0100
END
    # debian/source/format
    case $DEBVER in
        *-*) # non-native package
            echo "3.0 (quilt)" > debian/source/format
             ;;
        *) # native package
            echo "3.0 (native)" > debian/source/format
             ;;
    esac
    # debian/copyright
    echo "Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/" \
        > debian/copyright
    if [ "${FILEEXCLUDE:-0}" = "1" ]; then
        # exclude just for main
        cat <<'END' >> debian/copyright
Files-Excluded: exclude-this
 */exclude-dir
 .*
 */js/jquery.js
 ;?echo?baz;?#
END
    elif [ "${FILEEXCLUDE:-0}" = "2" ]; then
        # exclude for main(=foo) bar baz
        cat <<'END' >> debian/copyright
Files-Excluded: exclude-this
 */exclude-dir
 .*
 */js/jquery.js
 ;?echo?baz;?#
Files-Excluded-bar: exclude-this
 */exclude-dir
 .*
 */js/jquery.js
 ;?echo?baz;?#
Files-Excluded-baz: exclude-this
 */exclude-dir
 .*
 */js/jquery.js
 ;?echo?baz;?#
END
    elif [ "${FILEEXCLUDE:-0}" = "3" ]; then
        # exclude for foo bar baz
        cat <<'END' >> debian/copyright
Files-Excluded-foo: exclude-this
 */exclude-dir
 .*
 */js/jquery.js
 ;?echo?baz;?#
Files-Excluded-bar: exclude-this
 */exclude-dir
 .*
 */js/jquery.js
 ;?echo?baz;?#
Files-Excluded-baz: exclude-this
 */exclude-dir
 .*
 */js/jquery.js
 ;?echo?baz;?#
END
    fi
    # debian/watch
    echo "version=$WATCHVER" > debian/watch
    echo "$WATCHLINE" | sed -e "s,@@@url@@@,http://localhost:${PORT}/,g" - \
        >> debian/watch
    # debian/upstream/signing-key.asc
    mkdir -p debian/upstream
    if [ "$KEYMODE" = "ASC" ]; then
        cp -f $test_dir/uscan/PUBLIC_KEY.asc debian/upstream/signing-key.asc
    else
        cp -f "$GPGHOME/pubring.gpg" debian/upstream/signing-key.pgp
    fi
}


# make tarball in $REPOPATH/$POOLPATH
makeUpstreamTar() {
    UPNAME=${1:-foo} # Upstream package name
    UPVER=${2:-1.0}  # upstream package version
    COMPRESSION=${3:-gz} # archive compression type
    TYPE=${4:-non-native} # set this if native-type upstream
    OLDDIR=`pwd`
    mkdir -p "$TEMP_PKG_DIR"/$REPOPATH/$POOLPATH/$UPNAME-$UPVER
    cd "$TEMP_PKG_DIR"/$REPOPATH/$POOLPATH
    touch $UPNAME-$UPVER/FILE.$UPNAME.$UPVER
    touch $UPNAME-$UPVER/include-this
    touch $UPNAME-$UPVER/exclude-this
    touch $UPNAME-$UPVER/.hidden
    mkdir -p "$UPNAME-$UPVER/; echo baz; #/"
    mkdir -p $UPNAME-$UPVER/exclude-dir
    touch $UPNAME-$UPVER/exclude-dir/file
    mkdir -p $UPNAME-$UPVER/subdir/exclude-dir
    touch $UPNAME-$UPVER/subdir/exclude-dir/file2
    mkdir -p $UPNAME-$UPVER/docs/html/js/
    touch $UPNAME-$UPVER/docs/html/js/jquery.js
    if [ "$TYPE" = "native" ]; then
        cd "$TEMP_PKG_DIR"/$REPOPATH/$POOLPATH/$UPNAME-$UPVER
        makeDebianDir $UPNAME $UPVER
        cd "$TEMP_PKG_DIR"/$REPOPATH/$POOLPATH
    fi
    case $COMPRESSION in
        gz|gzip)
            NEWTAR=$UPNAME-$UPVER.tar.gz
            tar -czf $NEWTAR $UPNAME-$UPVER
            ;;
        bz2|bzip2)
            NEWTAR=$UPNAME-$UPVER.tar.bz2
            tar --bzip2 -cf $NEWTAR $UPNAME-$UPVER
            ;;
        xz)
            NEWTAR= $UPNAME-$UPVER.tar.xz
            tar --xz -cf $NEWTAR $UPNAME-$UPVER
            ;;
        zip)
            NEWTAR=$UPNAME-$UPVER.zip
            zip -r $NEWTAR $UPNAME-$UPVER
            ;;
        *)  echo "Wrong compression mode: $COMPRESSION"
            exit 1
            ;;
        esac
    case "${SIGMODE:-}" in  # undefined SIGMODE → no sig
        ASC) # make $NEWTAR.asc
            $GPG --homedir "$GPGHOME" --no-options -q --batch --no-default-keyring \
                --default-key 72543FAF \
                --armor --detach-sign $NEWTAR
            ;;
        BIN) #make $NEWTAR.sig
            $GPG --homedir "$GPGHOME" --no-options -q --batch --no-default-keyring \
                --default-key 72543FAF \
                --detach-sign $NEWTAR
            ;;
        SELF) #make $NEWTAR.gpg
            $GPG --homedir "$GPGHOME" --no-options -q --batch --no-default-keyring \
                --default-key 72543FAF \
                --sign $NEWTAR
    esac

    cd $OLDDIR
}

# setup a common watch file test environment
helperWatch() {
    local SITESCRIPT=${1:-siteWebNonNative}
    local VEROLD=${2:-1.0}
    local VERNEW=${3:-2.0}
    local PREFIX="${4:-}"
    TEMP_PKG_DIR=${TEMP_PKG_DIR:-$(mktemp -d -p "$SHUNIT_TMPDIR" uscan_mangle.XXXXXX)}
    ORIGDIR=`pwd`
    PKG=${PKG:-foo}
    REPOPATH=${REPOPATH:-repo}
    POOLPATH=${POOLPATH:-pool}
    MGZREPACK=${MGZREPACK:-gz}
    XCOMMAND=${XCOMMAND:-$COMMAND}
    WATCHVER="${WATCHVER:-3}"
    WATCHLINE0="@@@url@@@/ (?:.*)/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian uupdate"
    WATCHLINE="${WATCHLINE:-$WATCHLINE0}"
    COMPONENTS=${COMPONENTS:-}
    FILEEXCLUDE=${FILEEXCLUDE:-0} # no exclude
    FILENAMEMANGLE=${FILENAMEMANGLE:-}
    VERNEW_MANGLED=${VERNEW_MANGLED:-$VERNEW}
    SIGMODE=${SIGMODE:-ASC} # ASC=ASCII or BIN=BINARY or SELF
    KEYMODE=${KEYMODE:-ASC} # ASC=ASCII AEMORED or BIN=DEARMORED BINARY
    cd "$TEMP_PKG_DIR"
    # start HTTP server with its root at "$TEMP_PKG_DIR"/$REPOPATH
    spawnHttpServer
    PORT=$(cat "$TEMP_PKG_DIR"/$REPOPATH/port)
    $DEBUGECHO " ***** http://localhost:$PORT started showing "$TEMP_PKG_DIR"/$REPOPATH *****"
    # make web site
    $SITESCRIPT
    # make local $VEROLD source tree
    tar -xzf "$TEMP_PKG_DIR"/$REPOPATH/$POOLPATH/${PKG}-${VEROLD}.tar.gz
    if [ -n "$PREFIX" ]; then
        mv "$TEMP_PKG_DIR"/${PKG}-${VEROLD} "$TEMP_PKG_DIR"/${PKG}-${PREFIX}${VEROLD}
    fi
    mv "$TEMP_PKG_DIR"/${PKG}-${PREFIX}${VEROLD} "$TEMP_PKG_DIR"/${PKG}
    cd "$TEMP_PKG_DIR"/${PKG}
    if [ ! -d debian ]; then
        makeDebianDir $PKG ${PREFIX}${VEROLD}-$SUFFIX
    fi
    local UUPDATE=""
    if grep -q "uupdate" "$TEMP_PKG_DIR"/${PKG}/debian/watch ; then
        UUPDATE=uupdate
    fi
    local PGP=""
    if grep -q "pgpurlmangle" "$TEMP_PKG_DIR"/${PKG}/debian/watch ; then
        PGP=pgp
    fi
    if grep -q "pgpmode *= *auto" "$TEMP_PKG_DIR"/${PKG}/debian/watch ; then
        PGP=pgp
    fi
    if grep -q "pgpmode *= *previous" "$TEMP_PKG_DIR"/${PKG}/debian/watch ; then
        PGP=pgp
    fi
    $XCOMMAND
    assertEquals "uscan: exit_code!=0 but exit_code=0" "$?" "0"
    cd "$TEMP_PKG_DIR"
    $DEBUGLSLR
    UTARBALL=${PKG}-${UVERSION:-${VERNEW}}.tar.gz
    if [[ "$FILENAMEMANGLE" != *"$PKG"* ]]; then
        UTARBALL=${PKG}-${UVERSION:-${VERNEW}}.tar.gz
    else
        UTARBALL=${PKG}-${UVERSION:-${VERNEW}}-filenamemangle.tar.gz
    fi
    STARBALL=${PKG}_${PREFIX}${VERNEW_MANGLED}.orig.tar.$MGZREPACK
    if [ ! -f $STARBALL ]; then
        # testWatch4WebNonNativeMUT0() only repacks its component tarballs. It does
        # not repack the main upstream tarball, which is the usual behaviour when
        # excluding files from the upstream source. This means we need to find the
        # upstream tarball.
        STARBALL=${PKG}_${PREFIX}${VERNEW_MANGLED}.orig.tar.gz
    fi
    assertTrue "$UTARBALL missing: $WATCHLINE" "[ -f $UTARBALL ]"
    assertTrue "$STARBALL missing: $WATCHLINE" "[ -f $STARBALL ]"
    if [ "$PGP" = "pgp" ]; then
        UTARSIG=${PKG}-${UVERSION:-${VERNEW}}.tar.gz.sig
        if [ ! -f $UTARSIG ]; then
            UTARSIG=${PKG}-${UVERSION:-${VERNEW}}.tar.gz.asc
        fi
        STARSIG=${PKG}_${PREFIX}${VERNEW_MANGLED}.orig.tar.$MGZREPACK.asc
        assertTrue "$UTARSIG and *.sig missing: $WATCHLINE" "[ -f $UTARSIG ]"
        assertTrue "$STARSIG missing: $WATCHLINE" "[ -f $STARSIG ]"
    fi
    for cpnt in $COMPONENTS; do
        if [[ "$FILENAMEMANGLE" != *"$cpnt"* ]]; then
            UTARBALL=${cpnt}-${CMPVERSION:-${VERNEW}}.tar.gz
        else
            UTARBALL=${PKG}-${cpnt}-${CMPVERSION:-${VERNEW}}.tar.gz
        fi
        STARBALL=${PKG}_${PREFIX}${VERNEW_MANGLED}.orig-${cpnt}.tar.$MGZREPACK
        assertTrue "$UTARBALL missing: $WATCHLINE" "[ -f $UTARBALL ]"
        assertTrue "$STARBALL missing: $WATCHLINE" "[ -f $STARBALL ]"
        if [ "$PGP" = "pgp" ]; then
            UTARSIG=${cpnt}-${CMPVERSION:-${VERNEW}}.tar.gz.sig
            if [ ! -f $UTARSIG ]; then
                UTARSIG=${cpnt}-${CMPVERSION:-${VERNEW}}.tar.gz.asc
            fi
            STARSIG=${PKG}_${PREFIX}${VERNEW_MANGLED}.orig-${cpnt}.tar.$MGZREPACK.asc
            assertTrue "$UTARSIG and *.sig missing: $WATCHLINE" "[ -f $UTARSIG ]"
	    # Skipping this: signature link skipped when upstream file is repacked
            #assertTrue "$STARSIG missing: $WATCHLINE" "[ -f $STARSIG ]"
        fi
    done
    # check uupdate
    if [ "$UUPDATE" = "uupdate" ]; then
        cd "$TEMP_PKG_DIR"/${PKG}-${PREFIX}${VERNEW_MANGLED}
        assertTrue 'pristine tarball is not extracted' "[ -f debian/changelog ]"
        DVERSION=`dpkg-parsechangelog -ldebian/changelog -SVersion`
        assertEquals "uscan: Version should be ${PREFIX}${VERNEW}-$SUFFIX but $DVERSION" "$DVERSION" "${PREFIX}${VERNEW_MANGLED}-$SUFFIX"
        if [ "$FILEEXCLUDE" != "3" ]; then
        # main is dummy
        assertTrue 'file that must be present is excluded in the tarball' '[ -f include-this ]'
        fi
        if [ "$FILEEXCLUDE" = "1" ] || [ "$FILEEXCLUDE" = "2" ]; then
        assertFalse "file that must be excluded is present in the tarball" '[ -f exclude-this ]'
        assertFalse "hidden file that must be excluded is present in the tarball" '[ -f .hidden ]'
        assertFalse "dir that must be excluded is present in the tarball" '[ -d exclude-dir ]'
        assertFalse "subdir that must be excluded is present in the tarball" '[ -d subdir/exclude-dir ]'
        CONTENTS=$(ls -R)
        assertFalse "non-root-file that must be excluded is present in the tarball"        \
                $(containsName "$CONTENTS" jquery.js)
        assertFalse "path with whitespace that must be excluded is present in the tarball"        \
                $(containsName "$CONTENTS" "; echo baz; #/")
        fi
        for c in $COMPONENTS ; do
            cd "$TEMP_PKG_DIR"/${PKG}-${PREFIX}${VERNEW_MANGLED}/$c
        assertTrue 'file that must be present is excluded in the tarball' '[ -f include-this ]'
        if [ "$FILEEXCLUDE" = "1" ] || [ "$FILEEXCLUDE" = "2" ]; then
        assertFalse "file that must be excluded is present in the orig-$c.tar" '[ -f exclude-this ]'
        assertFalse "hidden file that must be excluded is present in the orig-$c.tar" '[ -f .hidden ]'
        assertFalse "dir that must be excluded is present in the orig-$c.tar" '[ -d exclude-dir ]'
        assertFalse "subdir that must be excluded is present in the orig-$c.tar" '[ -d subdir/exclude-dir ]'
        CONTENTS=$(ls -R)
        assertFalse "non-root-file that must be excluded is present in the orig-$c.tar"        \
                $(containsName "$CONTENTS" jquery.js)
        assertFalse "path with whitespace that must be excluded is present in the orig-$c.tar"        \
                $(containsName "$CONTENTS" "; echo baz; #/")
        fi
        done
        cd "$TEMP_PKG_DIR"
    fi
    $DEBUGBASH
    cd $ORIGDIR
    unset REPOPATH
    unset POOLPATH
    unset MGZREPACK
    unset XCOMMAND
    unset WATCHVER
    unset WATCHLINE
    unset COMPONENTS
    unset FILEEXCLUDE
    unset FILENAMEMANGLE
    unset VERNEW_MANGLED
    unset SIGMODE
    unset KEYMODE
}

# setup a common watch file test environment to see user-agent
helperWatchUA() {
    local SITESCRIPT=${1:-siteWebNonNative}
    TEMP_PKG_DIR=$(mktemp -d -p "$SHUNIT_TMPDIR" uscan_mangle.XXXXXX)
    ORIGDIR=`pwd`
    PKG=${PKG:-foo}
    REPOPATH=${REPOPATH:-repo}
    POOLPATH=${POOLPATH:-pool}
    XCOMMAND=${XCOMMAND:-$COMMAND}
    WATCHVER="${WATCHVER:-3}"
    WATCHLINE0="@@@url@@@/ (?:.*)/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian uupdate"
    WATCHLINE="${WATCHLINE:-$WATCHLINE0}"
    KEYMODE=${KEYMODE:-ASC} # ASC=ASCII AEMORED or BIN=DEARMORED BINARY
    cd "$TEMP_PKG_DIR"
    # start HTTP server with its root at "$TEMP_PKG_DIR"/$REPOPATH
    spawnHttpServer
    PORT=$(cat "$TEMP_PKG_DIR"/$REPOPATH/port)
    $DEBUGECHO " ***** http://localhost:$PORT started showing "$TEMP_PKG_DIR"/$REPOPATH *****"
    # make web site
    $SITESCRIPT
    # make local $VEROLD source tree
    mkdir -p "$TEMP_PKG_DIR"/${PKG}
    cd "$TEMP_PKG_DIR"/${PKG}
    if [ ! -d debian ]; then
        makeDebianDir $PKG 1.0-$SUFFIX
    fi
    $XCOMMAND
    USERAGENTX="$(grep -ie '^User-Agent:' ../repo/log |head -1 | perl -p -e "s/\r//g" )"
    assertTrue "Bad $USERAGENTX" "[ \"$USERAGENTX\" = \"User-Agent: $USERAGENT\" ]"
    echo "SENT: \"User-Agent: $USERAGENT\""
    echo "GOT : \"$USERAGENTX\""
    $DEBUGBASH
    cd $ORIGDIR
    unset REPOPATH
    unset POOLPATH
    unset XCOMMAND
    unset WATCHVER
    unset WATCHLINE
    unset KEYMODE
}

# populate pool directory
siteNative() {
    local PKG=${1:-foo}
    makeUpstreamTar $PKG 0.0 gz native
    makeUpstreamTar $PKG 1.0 gz native
    makeUpstreamTar $PKG 2.0 gz native
    mkdir -p "$TEMP_PKG_DIR"/$REPOPATH/0.0/$PKG/ooo/
    mkdir -p "$TEMP_PKG_DIR"/$REPOPATH/1.0/$PKG/ooo/
    mkdir -p "$TEMP_PKG_DIR"/$REPOPATH/2.0/$PKG/ooo/
    ln -sf ../../../$POOLPATH/${PKG}-0.0.tar.gz "$TEMP_PKG_DIR"/$REPOPATH/0.0/$PKG/ooo/${PKG}-0.0.tar.gz
    ln -sf ../../../$POOLPATH/${PKG}-1.0.tar.gz "$TEMP_PKG_DIR"/$REPOPATH/1.0/$PKG/ooo/${PKG}-1.0.tar.gz
    ln -sf ../../../$POOLPATH/${PKG}-2.0.tar.gz "$TEMP_PKG_DIR"/$REPOPATH/2.0/$PKG/ooo/${PKG}-2.0.tar.gz
}

siteNonNative() {
    local PKG=${1:-foo}
    local EXTRA=${2:-}
    makeUpstreamTar $PKG 0.0 gz non-native
    makeUpstreamTar $PKG 1.0-rc-1 gz non-native
    makeUpstreamTar $PKG 1.0 gz non-native
    makeUpstreamTar $PKG 2.0 gz non-native
    mkdir -p "$TEMP_PKG_DIR"/$REPOPATH/0.0/$PKG/ooo/
    mkdir -p "$TEMP_PKG_DIR"/$REPOPATH/1.0-rc-1/$PKG/ooo/
    mkdir -p "$TEMP_PKG_DIR"/$REPOPATH/1.0/$PKG/ooo/
    mkdir -p "$TEMP_PKG_DIR"/$REPOPATH/2.0/$PKG/ooo/
    if [ -n "$EXTRA" ]; then
    makeUpstreamTar $PKG 3.0 gz non-native
    mkdir -p "$TEMP_PKG_DIR"/$REPOPATH/3.0/$PKG/ooo/
    fi
    if [ "${SIGMODE:-}" = "ASC" ]; then
    ln -sf ../../../$POOLPATH/${PKG}-0.0.tar.gz "$TEMP_PKG_DIR"/$REPOPATH/0.0/$PKG/ooo/${PKG}-0.0.tar.gz
    ln -sf ../../../$POOLPATH/${PKG}-0.0.tar.gz.asc "$TEMP_PKG_DIR"/$REPOPATH/0.0/$PKG/ooo/${PKG}-0.0.tar.gz.asc
    ln -sf ../../../$POOLPATH/${PKG}-1.0.tar.gz "$TEMP_PKG_DIR"/$REPOPATH/1.0-rc-1/$PKG/ooo/${PKG}-1.0-rc-1.tar.gz
    ln -sf ../../../$POOLPATH/${PKG}-1.0.tar.gz.asc "$TEMP_PKG_DIR"/$REPOPATH/1.0-rc-1/$PKG/ooo/${PKG}-1.0-rc-1.tar.gz.asc
    ln -sf ../../../$POOLPATH/${PKG}-1.0.tar.gz "$TEMP_PKG_DIR"/$REPOPATH/1.0/$PKG/ooo/${PKG}-1.0.tar.gz
    ln -sf ../../../$POOLPATH/${PKG}-1.0.tar.gz.asc "$TEMP_PKG_DIR"/$REPOPATH/1.0/$PKG/ooo/${PKG}-1.0.tar.gz.asc
    ln -sf ../../../$POOLPATH/${PKG}-2.0.tar.gz "$TEMP_PKG_DIR"/$REPOPATH/2.0/$PKG/ooo/${PKG}-2.0.tar.gz
    ln -sf ../../../$POOLPATH/${PKG}-2.0.tar.gz.asc "$TEMP_PKG_DIR"/$REPOPATH/2.0/$PKG/ooo/${PKG}-2.0.tar.gz.asc
    if [ -n "$EXTRA" ]; then
    ln -sf ../../../$POOLPATH/${PKG}-3.0.tar.gz "$TEMP_PKG_DIR"/$REPOPATH/3.0/$PKG/ooo/${PKG}-3.0.tar.gz
    ln -sf ../../../$POOLPATH/${PKG}-3.0.tar.gz.asc "$TEMP_PKG_DIR"/$REPOPATH/3.0/$PKG/ooo/${PKG}-3.0.tar.gz.asc
    fi
    elif [ "${SIGMODE:-}" = "BIN" ]; then
    ln -sf ../../../$POOLPATH/${PKG}-0.0.tar.gz "$TEMP_PKG_DIR"/$REPOPATH/0.0/$PKG/ooo/${PKG}-0.0.tar.gz
    ln -sf ../../../$POOLPATH/${PKG}-0.0.tar.gz.sig "$TEMP_PKG_DIR"/$REPOPATH/0.0/$PKG/ooo/${PKG}-0.0.tar.gz.sig
    ln -sf ../../../$POOLPATH/${PKG}-1.0.tar.gz "$TEMP_PKG_DIR"/$REPOPATH/1.0-rc-1/$PKG/ooo/${PKG}-1.0-rc-1.tar.gz
    ln -sf ../../../$POOLPATH/${PKG}-1.0.tar.gz.sig "$TEMP_PKG_DIR"/$REPOPATH/1.0-rc-1/$PKG/ooo/${PKG}-1.0-rc-1.tar.gz.sig
    ln -sf ../../../$POOLPATH/${PKG}-1.0.tar.gz "$TEMP_PKG_DIR"/$REPOPATH/1.0/$PKG/ooo/${PKG}-1.0.tar.gz
    ln -sf ../../../$POOLPATH/${PKG}-1.0.tar.gz.sig "$TEMP_PKG_DIR"/$REPOPATH/1.0/$PKG/ooo/${PKG}-1.0.tar.gz.sig
    ln -sf ../../../$POOLPATH/${PKG}-2.0.tar.gz "$TEMP_PKG_DIR"/$REPOPATH/2.0/$PKG/ooo/${PKG}-2.0.tar.gz
    ln -sf ../../../$POOLPATH/${PKG}-2.0.tar.gz.sig "$TEMP_PKG_DIR"/$REPOPATH/2.0/$PKG/ooo/${PKG}-2.0.tar.gz.sig
    if [ -n "$EXTRA" ]; then
    ln -sf ../../../$POOLPATH/${PKG}-3.0.tar.gz "$TEMP_PKG_DIR"/$REPOPATH/3.0/$PKG/ooo/${PKG}-3.0.tar.gz
    ln -sf ../../../$POOLPATH/${PKG}-3.0.tar.gz.sig "$TEMP_PKG_DIR"/$REPOPATH/3.0/$PKG/ooo/${PKG}-3.0.tar.gz.sig
    fi
    elif [ "${SIGMODE:-}" = "SELF" ]; then
    ln -sf ../../../$POOLPATH/${PKG}-0.0.tar.gz.gpg "$TEMP_PKG_DIR"/$REPOPATH/0.0/$PKG/ooo/${PKG}-0.0.tar.gz.gpg
    ln -sf ../../../$POOLPATH/${PKG}-1.0.tar.gz.gpg "$TEMP_PKG_DIR"/$REPOPATH/1.0-rc-1/$PKG/ooo/${PKG}-1.0-rc-1.tar.gz.gpg
    ln -sf ../../../$POOLPATH/${PKG}-1.0.tar.gz.gpg "$TEMP_PKG_DIR"/$REPOPATH/1.0/$PKG/ooo/${PKG}-1.0.tar.gz.gpg
    ln -sf ../../../$POOLPATH/${PKG}-2.0.tar.gz.gpg "$TEMP_PKG_DIR"/$REPOPATH/2.0/$PKG/ooo/${PKG}-2.0.tar.gz.gpg
    if [ -n "$EXTRA" ]; then
    ln -sf ../../../$POOLPATH/${PKG}-3.0.tar.gz.gpg "$TEMP_PKG_DIR"/$REPOPATH/3.0/$PKG/ooo/${PKG}-3.0.tar.gz.gpg
    fi
    fi
}

# hide siteNative behind a web page
siteWebNative() {
    siteNative
    cat <<END > "$TEMP_PKG_DIR"/$REPOPATH/index.html
<html>
<head>
  <meta charset="utf-8">
</head>
<body>
<a href="/0.0/foo/ooo/foo-0.0.tar.gz">Very old</a> <br/ >
<a href="/1.0/foo/ooo/foo-1.0.tar.gz">A bit OLD</a> <br />
<a href="/2.0/foo/ooo/foo-2.0.tar.gz">Latest</a> <br />
</body>
<html>
END
}

siteWebNonNative() {
    siteNonNative
    cat <<END > "$TEMP_PKG_DIR"/$REPOPATH/index.html
<html>
<head>
  <meta charset="utf-8">
</head>
<body>
<a href="/0.0/foo/ooo/foo-0.0.tar.gz">Very old</a> <br/ >
<a href="/1.0-rc-1/foo/ooo/foo-1.0-rc-1.tar.gz">Slightly older</a> <br />
<a href="/1.0/foo/ooo/foo-1.0.tar.gz">A bit OLD</a> <br />
<a href="/2.0/foo/ooo/foo-2.0.tar.gz">Latest</a> <br />
</body>
<html>
END
}

siteWebNonNativeRecWithBase() {
    siteNonNative "$@"
    for DIR in "$TEMP_PKG_DIR"/$REPOPATH/[0-9].*; do
    [ -d "$DIR" ] && cat <<END > "$DIR"/index.html
<html>
<head>
  <meta charset="utf-8">
<base href="/${DIR##*/}/foo/ooo/x.html"/>
</head>
<body>
<a href="foo-${DIR##*/}.tar.gz">Blah</a> <br/ >
</body>
<html>
END
    done
}

siteWebNonNativeR() {
    makeUpstreamTar foo 0.0 gz non-native
    makeUpstreamTar foo 1.0 gz non-native
    makeUpstreamTar foo 2.0 gz non-native
    mkdir -p "$TEMP_PKG_DIR"/$REPOPATH/123/foo/ooo/
    mkdir -p "$TEMP_PKG_DIR"/$REPOPATH/124/foo/ooo/
    mkdir -p "$TEMP_PKG_DIR"/$REPOPATH/125/foo/ooo/
    mkdir -p "$TEMP_PKG_DIR"/$REPOPATH/325/foo/ooo/
    mkdir -p "$TEMP_PKG_DIR"/$REPOPATH/424/foo/ooo/
    mkdir -p "$TEMP_PKG_DIR"/$REPOPATH/523/foo/ooo/
    if [ "$SIGMODE" = "ASC" ]; then
    ln -sf ../../../$POOLPATH/foo-0.0.tar.gz "$TEMP_PKG_DIR"/$REPOPATH/125/foo/ooo/foo-0.0.tar.gz
    ln -sf ../../../$POOLPATH/foo-1.0.tar.gz "$TEMP_PKG_DIR"/$REPOPATH/124/foo/ooo/foo-1.0.tar.gz
    ln -sf ../../../$POOLPATH/foo-2.0.tar.gz "$TEMP_PKG_DIR"/$REPOPATH/123/foo/ooo/foo-2.0.tar.gz
    ln -sf ../../../$POOLPATH/foo-0.0.tar.gz.asc "$TEMP_PKG_DIR"/$REPOPATH/325/foo/ooo/foo-0.0.tar.gz.asc
    ln -sf ../../../$POOLPATH/foo-1.0.tar.gz.asc "$TEMP_PKG_DIR"/$REPOPATH/424/foo/ooo/foo-1.0.tar.gz.asc
    ln -sf ../../../$POOLPATH/foo-2.0.tar.gz.asc "$TEMP_PKG_DIR"/$REPOPATH/523/foo/ooo/foo-2.0.tar.gz.asc
    cat <<END > "$TEMP_PKG_DIR"/$REPOPATH/index.html
<html>
<head>
  <meta charset="utf-8">
</head>
<body>
<a href="/125/foo/ooo/foo-0.0.tar.gz">Very old</a> <br/ >
<a href="/124/foo/ooo/foo-1.0.tar.gz">A bit OLD</a> <br />
<a href="/123/foo/ooo/foo-2.0.tar.gz">Latest</a> <br />
<a href="/325/foo/ooo/foo-0.0.tar.gz.asc">Very old sig</a> <br/ >
<a href="/424/foo/ooo/foo-1.0.tar.gz.asc">A bit OLD sig</a> <br />
<a href="/523/foo/ooo/foo-2.0.tar.gz.asc">Latest sig</a> <br />
</body>
<html>
END
    elif [ "$SIGMODE" = "BIN" ]; then
    ln -sf ../../../$POOLPATH/foo-0.0.tar.gz "$TEMP_PKG_DIR"/$REPOPATH/125/foo/ooo/foo-0.0.tar.gz
    ln -sf ../../../$POOLPATH/foo-1.0.tar.gz "$TEMP_PKG_DIR"/$REPOPATH/124/foo/ooo/foo-1.0.tar.gz
    ln -sf ../../../$POOLPATH/foo-2.0.tar.gz "$TEMP_PKG_DIR"/$REPOPATH/123/foo/ooo/foo-2.0.tar.gz
    ln -sf ../../../$POOLPATH/foo-0.0.tar.gz.sig "$TEMP_PKG_DIR"/$REPOPATH/325/foo/ooo/foo-0.0.tar.gz.sig
    ln -sf ../../../$POOLPATH/foo-1.0.tar.gz.sig "$TEMP_PKG_DIR"/$REPOPATH/424/foo/ooo/foo-1.0.tar.gz.sig
    ln -sf ../../../$POOLPATH/foo-2.0.tar.gz.sig "$TEMP_PKG_DIR"/$REPOPATH/523/foo/ooo/foo-2.0.tar.gz.sig
    cat <<END > "$TEMP_PKG_DIR"/$REPOPATH/index.html
<html>
<head>
  <meta charset="utf-8">
</head>
<body>
<a href="/125/foo/ooo/foo-0.0.tar.gz">Very old</a> <br/ >
<a href="/124/foo/ooo/foo-1.0.tar.gz">A bit OLD</a> <br />
<a href="/123/foo/ooo/foo-2.0.tar.gz">Latest</a> <br />
<a href="/325/foo/ooo/foo-0.0.tar.gz.sig">Very old sig</a> <br/ >
<a href="/424/foo/ooo/foo-1.0.tar.gz.sig">A bit OLD sig</a> <br />
<a href="/523/foo/ooo/foo-2.0.tar.gz.sig">Latest sig</a> <br />
</body>
<html>
END
    elif [ "$SIGMODE" = "SELF" ]; then
    ln -sf ../../../$POOLPATH/foo-0.0.tar.gz.gpg "$TEMP_PKG_DIR"/$REPOPATH/325/foo/ooo/foo-0.0.tar.gz.gpg
    ln -sf ../../../$POOLPATH/foo-1.0.tar.gz.gpg "$TEMP_PKG_DIR"/$REPOPATH/424/foo/ooo/foo-1.0.tar.gz.gpg
    ln -sf ../../../$POOLPATH/foo-2.0.tar.gz.gpg "$TEMP_PKG_DIR"/$REPOPATH/523/foo/ooo/foo-2.0.tar.gz.gpg
    cat <<END > "$TEMP_PKG_DIR"/$REPOPATH/index.html
<html>
<head>
  <meta charset="utf-8">
</head>
<body>
<a href="/125/foo/ooo/foo-0.0.tar.gz">Very old</a> <br/ >
<a href="/124/foo/ooo/foo-1.0.tar.gz">A bit OLD</a> <br />
<a href="/123/foo/ooo/foo-2.0.tar.gz">Latest</a> <br />
<a href="/325/foo/ooo/foo-0.0.tar.gz.gpg">Very old sig</a> <br/ >
<a href="/424/foo/ooo/foo-1.0.tar.gz.gpg">A bit OLD sig</a> <br />
<a href="/523/foo/ooo/foo-2.0.tar.gz.gpg">Latest sig</a> <br />
</body>
<html>
END
    fi
}

sitePrWebNonNative() {
    siteNonNative
    cat <<END > "$TEMP_PKG_DIR"/$REPOPATH/index.html
<html>
<head>
  <meta charset="utf-8">
</head>
<body>
<a href="/0.0/boo/xxx/boo-0.0.tar.gz">Very old</a> <br/ >
<a href="/1.0/boo/xxx/boo-1.0.tar.gz">A bit OLD</a> <br />
<a href="/2.0/boo/xxx/boo-2.0.tar.gz">Latest</a> <br />
</body>
<html>
END
}

siteWebNonNativeLarge() {
    makeUpstreamTar foo 19990101 gz non-native
    makeUpstreamTar foo 20000101 gz non-native
    makeUpstreamTar foo 20010101 gz non-native
    mkdir -p $REPOPATH/0.0/foo/ooo/
    mkdir -p $REPOPATH/1.0/foo/ooo/
    mkdir -p $REPOPATH/2.0/foo/ooo/
    ln -sf ../../../$POOLPATH/foo-19990101.tar.gz "$TEMP_PKG_DIR"/$REPOPATH/0.0/foo/ooo/foo-19990101.tar.gz
    ln -sf ../../../$POOLPATH/foo-20000101.tar.gz "$TEMP_PKG_DIR"/$REPOPATH/1.0/foo/ooo/foo-20000101.tar.gz
    ln -sf ../../../$POOLPATH/foo-20010101.tar.gz "$TEMP_PKG_DIR"/$REPOPATH/2.0/foo/ooo/foo-20010101.tar.gz
    cat <<END > "$TEMP_PKG_DIR"/$REPOPATH/index.html
<html>
<head>
  <meta charset="utf-8">
</head>
<body>
<a href="/0.0/foo/ooo/foo-19990101.tar.gz">Very old</a> <br/ >
<a href="/1.0/foo/ooo/foo-20000101.tar.gz">A bit OLD</a> <br />
<a href="/2.0/foo/ooo/foo-20010101.tar.gz">Latest</a> <br />
</body>
<html>
END
}

siteXmlNonNative() {
    siteNonNative
    cat <<END > "$TEMP_PKG_DIR"/$REPOPATH/index.html
<html>
<head>
  <meta charset="utf-8">
</head>
<body>
<Key>/0.0/foo/ooo/foo-0.0.tar.gz</Key> <br/ >
<Key>/1.0/foo/ooo/foo-1.0.tar.gz</Key> <br />
<Key>/2.0/foo/ooo/foo-2.0.tar.gz</Key> <br />
</body>
<html>
END
}

siteWebNonNativeMUT() {
    siteNonNative foo
    siteNonNative bar EXTRA
    siteNonNative baz EXTRA
    cat <<END > "$TEMP_PKG_DIR"/$REPOPATH/index.html
<html>
<head>
  <meta charset="utf-8">
</head>
<body>
<a href="/0.0/foo/ooo/foo-0.0.tar.gz">Very old</a> <br/ >
<a href="/1.0/foo/ooo/foo-1.0.tar.gz">A bit OLD</a> <br />
<a href="/2.0/foo/ooo/foo-2.0.tar.gz">Latest</a> <br />
<a href="/2.0/foo/ooo/foo-2.0.tar.gz.asc">Latest sig</a> <br />
<a href="/0.0/bar/ooo/bar-0.0.tar.gz">Very old</a> <br/ >
<a href="/1.0/bar/ooo/bar-1.0.tar.gz">A bit OLD</a> <br />
<a href="/2.0/bar/ooo/bar-2.0.tar.gz">Latest</a> <br />
<a href="/3.0/bar/ooo/bar-3.0.tar.gz">OOPS Latest</a> <br />
<a href="/3.0/bar/ooo/bar-3.0.tar.gz.asc">Latest sig</a> <br />
<a href="/0.0/baz/ooo/baz-0.0.tar.gz">Very old</a> <br/ >
<a href="/1.0/baz/ooo/baz-1.0.tar.gz">A bit OLD</a> <br />
<a href="/2.0/baz/ooo/baz-2.0.tar.gz">Latest</a> <br />
<a href="/3.0/baz/ooo/baz-3.0.tar.gz">OOPS Latest</a> <br />
<a href="/3.0/baz/ooo/baz-3.0.tar.gz.asc">Latest sig</a> <br />
</body>
<html>
END
}

siteWebNonNativeMUT_filenamemangle() {
    siteNonNative foo
    siteNonNative bar EXTRA
    siteNonNative baz EXTRA
    cat <<END > "$TEMP_PKG_DIR"/$REPOPATH/index.html
<html>
<head>
  <meta charset="utf-8">
</head>
<body>
<a href="/0.0/foo/ooo/foo-0.0.tar.gz">Very old</a> <br/ >
<a href="/1.0/foo/ooo/foo-1.0.tar.gz">A bit old</a> <br />
<a href="/2.0/foo/ooo/foo-2.0.tar.gz">Latest</a> <br />
<a href="/2.0/foo/ooo/foo-2.0.tar.gz.asc">Latest sig</a> <br />
<a href="/0.0/bar/ooo/bar-0.0.tar.gz">Very old</a> <br/ >
<a href="/1.0/bar/ooo/bar-1.0.tar.gz">A bit old</a> <br />
<a href="/2.0/bar/ooo/bar-2.0.tar.gz">Latest</a> <br />
<a href="/3.0/bar/ooo/bar-2.0.tar.gz.asc">Latest sig</a> <br />
<a href="/0.0/baz/ooo/baz-0.0.tar.gz">Very old</a> <br/ >
<a href="/1.0/baz/ooo/baz-1.0.tar.gz">A bit old</a> <br />
<a href="/2.0/baz/ooo/baz-2.0.tar.gz">Latest</a> <br />
<a href="/3.0/baz/ooo/baz-2.0.tar.gz.asc">Latest sig</a> <br />
</body>
<html>
END
}

siteWebNonNativeGetOnlyHref() {
    siteNonNative foo
    cat <<END > "$TEMP_PKG_DIR"/$REPOPATH/index.html
<html>
<head>
  <meta charset="utf-8">
</head>
<body>
<a href="/0.0/foo/ooo/foo-0.0.tar.gz">Very old</a> <br/ >
<a href="/1.0/bar/ooo/foo-1.0.tar.gz">A bit OLD</a> <br />
<a href="/2.0/foo/ooo/foo-2.0.tar.gz" data-foobar-href="">Latest</a> <br />
<aueu href="/2.0/foo/ooo/foo-3.0.tar.gz" data-foobar-href="">Nothing here</a> <br />
</body>
<html>
END
}

# test a watch files

### VERSION3 ###
# version locking calls suffer changes due to uupdate calling differences

# test --download-current-version
testWatch3WebNonNativeDlCurrent() {
    WATCHVER=3
    XCOMMAND="$COMMAND --download-current-version"
    WATCHLINE='@@@url@@@/ (?:.*)/foo-([\.\d]+).tar.gz debian uupdate'
    helperWatch siteWebNonNative 1.0 1.0
}

# test --download-version
testWatch3WebNonNativeDlUversion() {
    WATCHVER=3
    XCOMMAND="$COMMAND --download-version 0.0"
    WATCHLINE='@@@url@@@/ (?:.*)/foo-([\.\d]+).tar.gz debian uupdate'
    helperWatch siteWebNonNative 1.0 0.0
}

# test --download-debversion uupdate 
testWatch3WebNonNativeDlDversion() {
    WATCHVER=3
    XCOMMAND="$COMMAND --download-debversion 0.0-1"
    WATCHLINE='@@@url@@@/ (?:.*)/foo-([\.\d]+).tar.gz debian uupdate'
    helperWatch siteWebNonNative 1.0 0.0
}

### VERSION 4 ###
# standard tests

# test native package w/o uupdate, bare HTTP server in normal order
testWatch4Native() {
    WATCHVER=4
    WATCHLINE='@@@url@@@/([\.\d]+)/(.+)/(.+)/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian'
    helperWatch siteNative
}

# test non-native package with uupdate, bare HTTP server in normal order
testWatch4NonNative() {
    WATCHVER=4
    WATCHLINE='@@@url@@@([\.\d]+)/(.+)/(.+)/ @PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian uupdate'
    helperWatch siteNonNative
}

# test non-native package with uupdate, bare HTTP server with dirversionmangle
testWatch4NonNativeDMangle() {
    WATCHVER=4
    WATCHLINE='opts="dirversionmangle=s/^\d*[13579]\./0~$&/, uversionmangle=s/^\d*[13579]\./0~$&/" @@@url@@@([\.\d]+)/(.+)/(.+)/ @PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian uupdate'
    helperWatch "siteNonNative foo EXTRA"
}

# ... and without dirversionmangle, should return version 3
testWatch4NonNativeDMangleWithoutD() {
    WATCHVER=4
    WATCHLINE='@@@url@@@([\.\d]+)/(.+)/(.+)/ @PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian uupdate'
    helperWatch "siteNonNative foo EXTRA" 1.0 3.0
}

# test non-native package with uupdate, bare HTTP server with dirversionmangle and base
testWatch4NonNativeDMangleB() {
    WATCHVER=4
    WATCHLINE='opts="dirversionmangle=s/^\d*[13579]\./0~$&/, uversionmangle=s/^\d*[13579]\./0~$&/" @@@url@@@([\.\d]+)/ @PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian uupdate'
    helperWatch "siteWebNonNativeRecWithBase foo EXTRA"
}

# ... and without dirversionmangle, should return version 3
testWatch4NonNativeDMangleBWithoutD() {
    WATCHVER=4
    WATCHLINE='@@@url@@@([\.\d]+)/ @PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian uupdate'
    helperWatch "siteWebNonNativeRecWithBase foo EXTRA" 1.0 3.0
}

# test 3 parameter watch line
testWatch4WebNative() {
    WATCHVER=4
    WATCHLINE='@@@url@@@ (?:.*)/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian'
    helperWatch siteWebNative
}

# test normal web page
testWatch4WebNonNative() {
    WATCHVER=4
    helperWatch
}

# test normal web page (Files-exclude)
testWatch4WebNonNativeFE() {
    MGZREPACK=xz
    FILEEXCLUDE=1
    WATCHVER=4
    helperWatch
}

# test normal web page (file path reverse order)
testWatch4WebNonNativeR() {
    WATCHVER=4
    helperWatch siteWebNonNativeR
}

# test for downloadurlmangle and filenamemangle for tricky web page
testWatch4PrWebNonNative() {
    WATCHVER=4
    WATCHLINE='opts="downloadurlmangle = s%boo/xxx%@PACKAGE@/ooo% ; s%boo-%@PACKAGE@-%, \
                     filenamemangle    = s%.*boo-(.*)%@PACKAGE@-$1% " \
    @@@url@@@/ (?:.*)/boo@ANY_VERSION@@ARCHIVE_EXT@ \
    debian uupdate'
    helperWatch sitePrWebNonNative
}

# test --download-current-version
testWatch4NonNativeDlCurrent() {
    WATCHVER=4
    XCOMMAND="$COMMAND --download-current-version"
    WATCHLINE='@@@url@@@/([\d\.]+)/@PACKAGE@/ooo/ @PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian uupdate'
    helperWatch siteNonNative 1.0 1.0
}

# test --download-version
testWatch4NonNativeDlUversion() {
    WATCHVER=4
    XCOMMAND="$COMMAND --download-version 0.0"
    WATCHLINE='@@@url@@@/([\d\.]+)/@PACKAGE@/ooo/ @PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian uupdate'
    helperWatch siteNonNative 1.0 0.0
}

# test --download-version with uversionmangle
testWatch4NonNativeDlUversion_uversionmangle() {
    VERNEW_MANGLED='1.0~rc-1'
    WATCHVER=4
    XCOMMAND="$COMMAND --download-version 1.0-rc-1"
    WATCHLINE='opts="dirversionmangle=s/-([a-z]+-)/~$1/,uversionmangle=s/-([a-z]+-)/~$1/" @@@url@@@/([\d][\d\.a-z-]+)/@PACKAGE@/ooo/ @PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian uupdate'
    helperWatch siteNonNative 1.0 1.0-rc-1
}

# test --download-debversion uupdate
testWatch4NonNativeDlDversion() {
    WATCHVER=4
    XCOMMAND="$COMMAND --download-debversion 0.0-1"
    WATCHLINE='@@@url@@@/([\d\.]+)/@PACKAGE@/ooo/ @PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian uupdate'
    helperWatch siteNonNative 1.0 0.0
}

# test --download-current-version
testWatch4WebNonNativeDlCurrent() {
    WATCHVER=4
    XCOMMAND="$COMMAND --download-current-version"
    WATCHLINE='@@@url@@@/ (?:.*)/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian uupdate'
    helperWatch siteWebNonNative 1.0 1.0
}

# test --download-version
testWatch4WebNonNativeDlUversion() {
    WATCHVER=4
    XCOMMAND="$COMMAND --download-version 0.0"
    WATCHLINE='@@@url@@@/ (?:.*)/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian uupdate'
    helperWatch siteWebNonNative 1.0 0.0
}

# test --download-debversion uupdate 
testWatch4WebNonNativeDlDversion() {
    WATCHVER=4
    XCOMMAND="$COMMAND --download-debversion 0.0-1"
    WATCHLINE='@@@url@@@/ (?:.*)/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian uupdate'
    helperWatch siteWebNonNative 1.0 0.0
}

# Debian version is 0.19990101 for future proof while upstream is 19990101
testWatch4WebNonNativeLarge() {
    WATCHVER=4
    WATCHLINE='opts=" dversionmangle = s/0\.(.*)/$1/ , \
        oversionmangle = s/(.*)/0.$1/" \
        @@@url@@@  (?:.*)/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian uupdate'
    helperWatch siteWebNonNativeLarge 20000101 20010101 0.
}

# test for pagemangle
testWatch4XmlNonNative() {
    WATCHVER=4
    WATCHLINE='opts="pagemangle = \
        s%<Key>([^<]*)</Key>%<Key><a href=\"$1\">$1</a></Key>%g" \
        @@@url@@@/ (?:.*)/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian uupdate'
    helperWatch siteXmlNonNative
}

# test user-agent string setting via opts=
testWatch4WebNonNativeUA() {
    WATCHVER=4
    KEYMODE=BIN
    USERAGENT="foo/bar; baz:12,3.45"
    WATCHLINE='opts="useragent= '$USERAGENT' "'" \
"'@@@url@@@/ (?:.*)/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian uupdate'
    helperWatchUA
    unset USERAGENT
}

# test repack and compression
testWatch4WebNonNativeBZ2() {
    WATCHVER=4
    WATCHLINE='opts=repack,compression=bz2 @@@url@@@/ (?:.*)/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian uupdate'
    MGZREPACK=bz2
    helperWatch
}

# test repack and compression
testWatch4WebNonNativeXZ() {
    MGZREPACK=xz
    WATCHVER=4
    WATCHLINE='opts=repack,compression=xz @@@url@@@/ (?:.*)/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian uupdate'
    helperWatch
}

# test spaces everywhere
testWatch4PrWebNonNativeXZ() {
    MGZREPACK=xz
    WATCHVER=4
    WATCHLINE='opts = "downloadurlmangle = s%boo/xxx%@PACKAGE@/ooo% ; s%boo-%@PACKAGE@-%, \
                     filenamemangle    = s%.*boo-(.*)%@PACKAGE@-$1% , \
                     repack , compression=xz" \
    @@@url@@@/ (?:.*)/boo@ANY_VERSION@@ARCHIVE_EXT@ \
    debian uupdate'
    helperWatch sitePrWebNonNative
}

# test get strictly href from links and not something like foo-href. See #904578 and MR !25
testWatchGetOnlyHref() {
    WATCHVER=4
        WATCHLINE='@@@url@@@/ (?:.*)/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian        uupdate'
    helperWatch siteWebNonNativeGetOnlyHref 1.0 2.0
}

### VERSION 4 with sig check ###

# test normal web page with sig(asc)
testWatch4WebNonNativeSig() {
    WATCHVER=4
    WATCHLINE='opts = "pgpsigurlmangle = s%(.*)%$1.asc%" \
                @@@url@@@/ (?:.*)/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian uupdate'
    helperWatch
}

# test normal web page with sig(asc) with < and >
testWatch4WebNonNativeSigAngleBraket() {
    WATCHVER=4
    WATCHLINE='opts = "pgpsigurlmangle = s<(.*)><$1.asc>" \
                @@@url@@@/ (?:.*)/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian uupdate'
    helperWatch
}

# test normal web page with sig(asc) with < and > with space
testWatch4WebNonNativeSigAngleBraketSpace() {
    WATCHVER=4
    WATCHLINE='opts = "pgpsigurlmangle = s<(.*)> <$1.asc>" \
                @@@url@@@/ (?:.*)/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian uupdate'
    helperWatch
}

# test normal web page with sig(asc) with < and > with tab
testWatch4WebNonNativeSigAngleBraketTab() {
    WATCHVER=4
    WATCHLINE='opts = "pgpsigurlmangle = s<(.*)>        <$1.asc>" \
                @@@url@@@/ (?:.*)/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian uupdate'
    helperWatch
}

# test normal web page with sig(asc) with [ and ]
testWatch4WebNonNativeSigSquareBraket() {
    WATCHVER=4
    WATCHLINE='opts = "pgpsigurlmangle = s[(.*)][$1.asc]" \
                @@@url@@@/ (?:.*)/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian uupdate'
    helperWatch
}

# test normal web page with sig(asc) with { and }
testWatch4WebNonNativeSigCurlyBraket() {
    WATCHVER=4
    WATCHLINE='opts = "pgpsigurlmangle = s{(.*)}{$1.asc}" \
                @@@url@@@/ (?:.*)/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian uupdate'
    helperWatch
}

# test normal web page with sig(asc) - auto
testWatch4WebNonNativeSigAuto() {
    WATCHVER=4
    WATCHLINE='opts = "pgpmode = auto" \
                @@@url@@@/ (?:.*)/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian uupdate'
    helperWatch
}

# test normal web page with sig(bin) (Files-exclude)
testWatch4WebNonNativeFESig() {
    MGZREPACK=xz
    FILEEXCLUDE=1
    WATCHVER=4
    SIGMODE=BIN
    KEYMODE=BIN
    WATCHLINE='opts = "pgpsigurlmangle = s%(.*)%$1.sig%" \
               @@@url@@@/ (?:.*)/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ \
               debian uupdate'
    helperWatch
}

# test normal web page with sig (different file path for sig and tar; reverse order)
testWatch4WebNonNativeRSig() {
    WATCHVER=4
    WATCHLINE='opts = "pgpmode=next" @@@url@@@/ (?:.*)/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian
opts = "pgpmode=previous" @@@url@@@/ (?:.*)/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@.asc previous uupdate'
    helperWatch siteWebNonNativeR
}

# test normal web page with sig (different file path for sig and tar; reverse order, BIN)
testWatch4WebNonNativeRSigBIN() {
    WATCHVER=4
    SIGMODE=BIN
    WATCHLINE='opts = "pgpmode=next" @@@url@@@/ (?:.*)/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian
opts = "pgpmode=previous" @@@url@@@/ (?:.*)/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@.sig previous uupdate'
    helperWatch siteWebNonNativeR
}

# test normal web page with sig (different file path for sig and tar; reverse order, BIN BIN)
testWatch4WebNonNativeRSigBINiBIN() {
    WATCHVER=4
    SIGMODE=BIN
    KEYMODE=BIN
    WATCHLINE='opts = "pgpmode=next" @@@url@@@/ (?:.*)/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian
opts = "pgpmode=previous" @@@url@@@/ (?:.*)/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@.sig previous uupdate'
    helperWatch siteWebNonNativeR
}

# test normal web page with sig (self)
testWatch4WebNonNativeSelfSig() {
    WATCHVER=4
    SIGMODE=SELF
    WATCHLINE='opts = "pgpmode = self" \
                @@@url@@@/ (?:.*)/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@.gpg debian uupdate'
    helperWatch siteWebNonNativeR
}

### VERSION 4 only ###

# filenamemangle supports two patterns, each causing different behaviour.
#   * The first pattern replaces the existing URL with the new filename.
#   * The second pattern modifies the filename component, creating a new (and invalid) URL.

# test normal web page (filenamemangle on main upstream tarball [pattern 1])
testWatch4WebNonNative_filenamemangle1a() {
    WATCHVER=4
    FILENAMEMANGLE=foo
    WATCHLINE='
opts="filenamemangle=s#.+/(@PACKAGE@-\d\S+)(@ARCHIVE_EXT@)#$1-filenamemangle$2#" \
      @@@url@@@ (?:.*)/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian'
    helperWatch siteWebNonNative
}

# test normal web page (signature and filenamemangle on main upstream tarball [pattern 1])
testWatch4WebNonNative_filenamemangle1b() {
    WATCHVER=4
    FILENAMEMANGLE=foo
    WATCHLINE='
opts="filenamemangle=s#.+/(@PACKAGE@-\d\S+)(@ARCHIVE_EXT@)#$1-filenamemangle$2#, \
      pgpsigurlmangle=s/$/.asc/" \
      @@@url@@@ (?:.*)/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian'
    helperWatch siteWebNonNative
}

# test normal web page (filenamemangle on main upstream tarball [pattern 2])
testWatch4WebNonNative_filenamemangle1c() {
    WATCHVER=4
    FILENAMEMANGLE=foo
    WATCHLINE='
opts="filenamemangle=s/(\d\S+)(@ARCHIVE_EXT@)/$1-filenamemangle$2/" \
      @@@url@@@ (?:.*)/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian'
    helperWatch siteWebNonNative
}

# test normal web page (signature and filenamemangle on main upstream tarball [pattern 2])
testWatch4WebNonNative_filenamemangle1d() {
    WATCHVER=4
    FILENAMEMANGLE=foo
    WATCHLINE='
opts="filenamemangle=s/(\d\S+)(@ARCHIVE_EXT@)/$1-filenamemangle$2/, \
      pgpsigurlmangle=s/$/.asc/" \
      @@@url@@@ (?:.*)/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian'
    helperWatch siteWebNonNative
}

# test normal web page (MUT)
testWatch4WebNonNativeMUT() {
    MGZREPACK=xz
    WATCHVER=4
    COMPONENTS="bar baz"
    SIGMODE=BIN
    FILEEXCLUDE=2
    WATCHLINE='
opts="              pgpsigurlmangle=s/$/.sig/" @@@url@@@ (?:.*)/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian
opts="component=bar,pgpsigurlmangle=s/$/.sig/" @@@url@@@ (?:.*)/bar@ANY_VERSION@@ARCHIVE_EXT@ same
opts="component=baz,pgpsigurlmangle=s/$/.sig/" @@@url@@@ (?:.*)/baz@ANY_VERSION@@ARCHIVE_EXT@ same uupdate'
    helperWatch siteWebNonNativeMUT
}

# test normal web page (MUT, filenamemangle on main upstream tarball [pattern 1])
testWatch4WebNonNativeMUT_filenamemangle1a() {
    WATCHVER=4
    COMPONENTS="bar baz"
    FILENAMEMANGLE=foo
    WATCHLINE='
opts="filenamemangle=s#.+/(@PACKAGE@-\d\S+)(@ARCHIVE_EXT@)#$1-filenamemangle$2#" \
                     @@@url@@@ (?:.*)/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian
opts="component=bar" @@@url@@@ (?:.*)/bar@ANY_VERSION@@ARCHIVE_EXT@ same
opts="component=baz" @@@url@@@ (?:.*)/baz@ANY_VERSION@@ARCHIVE_EXT@ same'
    helperWatch siteWebNonNativeMUT_filenamemangle
}

# test normal web page (MUT, signature and filenamemangle on main upstream tarball [pattern 1])
testWatch4WebNonNativeMUT_filenamemangle1b() {
    WATCHVER=4
    COMPONENTS="bar baz"
    FILENAMEMANGLE=foo
    WATCHLINE='
opts="filenamemangle=s#.+/(@PACKAGE@-\d\S+)(@ARCHIVE_EXT@)#$1-filenamemangle$2#, \
      pgpsigurlmangle=s/$/.asc/" \
                     @@@url@@@ (?:.*)/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian
opts="component=bar" @@@url@@@ (?:.*)/bar@ANY_VERSION@@ARCHIVE_EXT@ same
opts="component=baz" @@@url@@@ (?:.*)/baz@ANY_VERSION@@ARCHIVE_EXT@ same'
    helperWatch siteWebNonNativeMUT_filenamemangle
}

# test normal web page (MUT, filenamemangle on main upstream tarball [pattern 2])
testWatch4WebNonNativeMUT_filenamemangle1c() {
    WATCHVER=4
    COMPONENTS="bar baz"
    FILENAMEMANGLE=foo
    WATCHLINE='
opts="filenamemangle=s/(@PACKAGE@-\d\S+)(@ARCHIVE_EXT@)/$1-filenamemangle$2/" \
                     @@@url@@@ (?:.*)/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian
opts="component=bar" @@@url@@@ (?:.*)/bar@ANY_VERSION@@ARCHIVE_EXT@ same
opts="component=baz" @@@url@@@ (?:.*)/baz@ANY_VERSION@@ARCHIVE_EXT@ same'
    helperWatch siteWebNonNativeMUT_filenamemangle
}

# test normal web page (MUT, signature and filenamemangle on main upstream tarball [pattern 2])
testWatch4WebNonNativeMUT_filenamemangle1d() {
    WATCHVER=4
    COMPONENTS="bar baz"
    FILENAMEMANGLE=foo
    WATCHLINE='
opts="filenamemangle=s/(@PACKAGE@-\d\S+)(@ARCHIVE_EXT@)/$1-filenamemangle$2/, \
      pgpsigurlmangle=s/$/.asc/" \
                     @@@url@@@ (?:.*)/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian
opts="component=bar" @@@url@@@ (?:.*)/bar@ANY_VERSION@@ARCHIVE_EXT@ same
opts="component=baz" @@@url@@@ (?:.*)/baz@ANY_VERSION@@ARCHIVE_EXT@ same'
    helperWatch siteWebNonNativeMUT_filenamemangle
}

# test normal web page (MUT, filenamemangle on first component tarball [pattern 1])
testWatch4WebNonNativeMUT_filenamemangle2a() {
    WATCHVER=4
    COMPONENTS="bar baz"
    FILENAMEMANGLE=bar
    WATCHLINE='
                     @@@url@@@ (?:.*)/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian
opts="component=bar, filenamemangle=s#.+/(bar-)#@PACKAGE@-$1#" \
                     @@@url@@@ (?:.*)/bar@ANY_VERSION@@ARCHIVE_EXT@ same
opts="component=baz" @@@url@@@ (?:.*)/baz@ANY_VERSION@@ARCHIVE_EXT@ same'
    helperWatch siteWebNonNativeMUT_filenamemangle
}

# test normal web page (MUT, signature and filenamemangle on first component tarball [pattern 1])
testWatch4WebNonNativeMUT_filenamemangle2b() {
    WATCHVER=4
    COMPONENTS="bar baz"
    FILENAMEMANGLE=bar
    WATCHLINE='
                     @@@url@@@ (?:.*)/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian
opts="component=bar, filenamemangle=s#.+/(bar-)#@PACKAGE@-$1#, pgpsigurlmangle=s/$/.asc/" \
                     @@@url@@@ (?:.*)/bar@ANY_VERSION@@ARCHIVE_EXT@ same
opts="component=baz" @@@url@@@ (?:.*)/baz@ANY_VERSION@@ARCHIVE_EXT@ same'
    helperWatch siteWebNonNativeMUT_filenamemangle
}

# test normal web page (MUT, filenamemangle on first component tarball [pattern 2])
testWatch4WebNonNativeMUT_filenamemangle2c() {
    WATCHVER=4
    COMPONENTS="bar baz"
    FILENAMEMANGLE=bar
    WATCHLINE='
                     @@@url@@@ (?:.*)/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian
opts="component=bar, filenamemangle=s/(bar-)/@PACKAGE@-$1/" \
                     @@@url@@@ (?:.*)/bar@ANY_VERSION@@ARCHIVE_EXT@ same
opts="component=baz" @@@url@@@ (?:.*)/baz@ANY_VERSION@@ARCHIVE_EXT@ same'
    helperWatch siteWebNonNativeMUT_filenamemangle
}

# test normal web page (MUT, signature and filenamemangle on first component tarball [pattern 2])
testWatch4WebNonNativeMUT_filenamemangle2d() {
    WATCHVER=4
    COMPONENTS="bar baz"
    FILENAMEMANGLE=bar
    WATCHLINE='
                     @@@url@@@ (?:.*)/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian
opts="component=bar, filenamemangle=s/(bar-)/@PACKAGE@-$1/, pgpsigurlmangle=s/$/.asc/" \
                     @@@url@@@ (?:.*)/bar@ANY_VERSION@@ARCHIVE_EXT@ same
opts="component=baz" @@@url@@@ (?:.*)/baz@ANY_VERSION@@ARCHIVE_EXT@ same'
    helperWatch siteWebNonNativeMUT_filenamemangle
}

# test normal web page (MUT, filenamemangle on second component tarball [pattern 1])
testWatch4WebNonNativeMUT_filenamemangle3a() {
    WATCHVER=4
    COMPONENTS="bar baz"
    FILENAMEMANGLE=baz
    WATCHLINE='
                     @@@url@@@ (?:.*)/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian
opts="component=bar" @@@url@@@ (?:.*)/bar@ANY_VERSION@@ARCHIVE_EXT@ same
opts="component=baz, filenamemangle=s#.+/(baz-)#@PACKAGE@-$1#" \
                     @@@url@@@ (?:.*)/baz@ANY_VERSION@@ARCHIVE_EXT@ same'
    helperWatch siteWebNonNativeMUT_filenamemangle
}

# test normal web page (MUT, signature and filenamemangle on second component tarball [pattern 1])
testWatch4WebNonNativeMUT_filenamemangle3b() {
    WATCHVER=4
    COMPONENTS="bar baz"
    FILENAMEMANGLE=baz
    WATCHLINE='
                     @@@url@@@ (?:.*)/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian
opts="component=bar" @@@url@@@ (?:.*)/bar@ANY_VERSION@@ARCHIVE_EXT@ same
opts="component=baz, filenamemangle=s#.+/(baz-)#@PACKAGE@-$1#, pgpsigurlmangle=s/$/.asc/" \
                     @@@url@@@ (?:.*)/baz@ANY_VERSION@@ARCHIVE_EXT@ same'
    helperWatch siteWebNonNativeMUT_filenamemangle
}

# test normal web page (MUT, filenamemangle on second component tarball [pattern 2])
testWatch4WebNonNativeMUT_filenamemangle3c() {
    WATCHVER=4
    COMPONENTS="bar baz"
    FILENAMEMANGLE=baz
    WATCHLINE='
                     @@@url@@@ (?:.*)/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian
opts="component=bar" @@@url@@@ (?:.*)/bar@ANY_VERSION@@ARCHIVE_EXT@ same
opts="component=baz, filenamemangle=s/(baz-)/@PACKAGE@-$1/" \
                     @@@url@@@ (?:.*)/baz@ANY_VERSION@@ARCHIVE_EXT@ same'
    helperWatch siteWebNonNativeMUT_filenamemangle
}

# test normal web page (MUT, signature and filenamemangle on second component tarball [pattern 2])
testWatch4WebNonNativeMUT_filenamemangle3d() {
    WATCHVER=4
    COMPONENTS="bar baz"
    FILENAMEMANGLE=baz
    WATCHLINE='
                     @@@url@@@ (?:.*)/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian
opts="component=bar" @@@url@@@ (?:.*)/bar@ANY_VERSION@@ARCHIVE_EXT@ same
opts="component=baz, filenamemangle=s/(baz-)/@PACKAGE@-$1/, pgpsigurlmangle=s/$/.asc/" \
                     @@@url@@@ (?:.*)/baz@ANY_VERSION@@ARCHIVE_EXT@ same'
    helperWatch siteWebNonNativeMUT_filenamemangle
}

# test normal web page (MUT, filenamemangle on both component tarballs [pattern 1])
testWatch4WebNonNativeMUT_filenamemangle4a() {
    WATCHVER=4
    COMPONENTS="bar baz"
    FILENAMEMANGLE="$COMPONENTS"
    WATCHLINE='
                     @@@url@@@ (?:.*)/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian
opts="component=bar, filenamemangle=s#.+/(bar-)#@PACKAGE@-$1#" \
                     @@@url@@@ (?:.*)/bar@ANY_VERSION@@ARCHIVE_EXT@ same
opts="component=baz, filenamemangle=s#.+/(baz-)#@PACKAGE@-$1#" \
                     @@@url@@@ (?:.*)/baz@ANY_VERSION@@ARCHIVE_EXT@ same'
    helperWatch siteWebNonNativeMUT_filenamemangle
}

# test normal web page (MUT, signatures and filenamemangle on both component tarballs [pattern 1])
testWatch4WebNonNativeMUT_filenamemangle4b() {
    WATCHVER=4
    COMPONENTS="bar baz"
    FILENAMEMANGLE="$COMPONENTS"
    WATCHLINE='
                     @@@url@@@ (?:.*)/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian
opts="component=bar, filenamemangle=s#.+/(bar-)#@PACKAGE@-$1#, pgpsigurlmangle=s/$/.asc/" \
                     @@@url@@@ (?:.*)/bar@ANY_VERSION@@ARCHIVE_EXT@ same
opts="component=baz, filenamemangle=s#.+/(baz-)#@PACKAGE@-$1#, pgpsigurlmangle=s/$/.asc/" \
                     @@@url@@@ (?:.*)/baz@ANY_VERSION@@ARCHIVE_EXT@ same'
    helperWatch siteWebNonNativeMUT_filenamemangle
}

# test normal web page (MUT, filenamemangle on both component tarballs [pattern 2])
testWatch4WebNonNativeMUT_filenamemangle4c() {
    WATCHVER=4
    COMPONENTS="bar baz"
    FILENAMEMANGLE="$COMPONENTS"
    WATCHLINE='
                     @@@url@@@ (?:.*)/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian
opts="component=bar, filenamemangle=s/(bar-)/@PACKAGE@-$1/" \
                     @@@url@@@ (?:.*)/bar@ANY_VERSION@@ARCHIVE_EXT@ same
opts="component=baz, filenamemangle=s/(baz-)/@PACKAGE@-$1/" \
                     @@@url@@@ (?:.*)/baz@ANY_VERSION@@ARCHIVE_EXT@ same'
    helperWatch siteWebNonNativeMUT_filenamemangle
}

# test normal web page (MUT, signatures and filenamemangle on both component tarballs [pattern 2])
testWatch4WebNonNativeMUT_filenamemangle4d() {
    WATCHVER=4
    COMPONENTS="bar baz"
    FILENAMEMANGLE="$COMPONENTS"
    WATCHLINE='
                     @@@url@@@ (?:.*)/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian
opts="component=bar, filenamemangle=s/(bar-)/@PACKAGE@-$1/, pgpsigurlmangle=s/$/.asc/" \
                     @@@url@@@ (?:.*)/bar@ANY_VERSION@@ARCHIVE_EXT@ same
opts="component=baz, filenamemangle=s/(baz-)/@PACKAGE@-$1/, pgpsigurlmangle=s/$/.asc/" \
                     @@@url@@@ (?:.*)/baz@ANY_VERSION@@ARCHIVE_EXT@ same'
    helperWatch siteWebNonNativeMUT_filenamemangle
}

# test normal web page (MUT, filenamemangle on all upstream tarballs [pattern 1])
testWatch4WebNonNativeMUT_filenamemangle5a() {
    WATCHVER=4
    COMPONENTS="bar baz"
    FILENAMEMANGLE="foo $COMPONENTS"
    WATCHLINE='
opts="filenamemangle=s#.+/(@PACKAGE@-\d\S+)(@ARCHIVE_EXT@)#$1-filenamemangle$2#" \
                     @@@url@@@ (?:.*)/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian
opts="component=bar, filenamemangle=s#.+/(bar-)#@PACKAGE@-$1#" \
                     @@@url@@@ (?:.*)/bar@ANY_VERSION@@ARCHIVE_EXT@ same
opts="component=baz, filenamemangle=s#.+/(baz-)#@PACKAGE@-$1#" \
                     @@@url@@@ (?:.*)/baz@ANY_VERSION@@ARCHIVE_EXT@ same'
    helperWatch siteWebNonNativeMUT_filenamemangle
}

# test normal web page (MUT, signatures and filenamemangle on all upstream tarballs [pattern 1])
testWatch4WebNonNativeMUT_filenamemangle5b() {
    WATCHVER=4
    COMPONENTS="bar baz"
    FILENAMEMANGLE="foo $COMPONENTS"
    WATCHLINE='
opts="filenamemangle=s#.+/(@PACKAGE@-\d\S+)(@ARCHIVE_EXT@)#$1-filenamemangle$2#, \
      pgpsigurlmangle=s/$/.asc/" \
                     @@@url@@@ (?:.*)/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian
opts="component=bar, filenamemangle=s#.+/(bar-)#@PACKAGE@-$1#, pgpsigurlmangle=s/$/.asc/" \
                     @@@url@@@ (?:.*)/bar@ANY_VERSION@@ARCHIVE_EXT@ same
opts="component=baz, filenamemangle=s#.+/(baz-)#@PACKAGE@-$1#, pgpsigurlmangle=s/$/.asc/" \
                     @@@url@@@ (?:.*)/baz@ANY_VERSION@@ARCHIVE_EXT@ same'
    helperWatch siteWebNonNativeMUT_filenamemangle
}

# test normal web page (MUT, filenamemangle on all upstream tarballs [pattern 2])
testWatch4WebNonNativeMUT_filenamemangle5c() {
    WATCHVER=4
    COMPONENTS="bar baz"
    FILENAMEMANGLE="foo $COMPONENTS"
    WATCHLINE='
opts="filenamemangle=s/(@PACKAGE@-\d\S+)(@ARCHIVE_EXT@)/$1-filenamemangle$2/" \
                     @@@url@@@ (?:.*)/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian
opts="component=bar, filenamemangle=s/(bar-)/@PACKAGE@-$1/" \
                     @@@url@@@ (?:.*)/bar@ANY_VERSION@@ARCHIVE_EXT@ same
opts="component=baz, filenamemangle=s/(baz-)/@PACKAGE@-$1/" \
                     @@@url@@@ (?:.*)/baz@ANY_VERSION@@ARCHIVE_EXT@ same'
    helperWatch siteWebNonNativeMUT_filenamemangle
}

# test normal web page (MUT, signatures and filenamemangle on all upstream tarballs [pattern 2])
testWatch4WebNonNativeMUT_filenamemangle5d() {
    WATCHVER=4
    COMPONENTS="bar baz"
    FILENAMEMANGLE="foo $COMPONENTS"
    WATCHLINE='
opts="filenamemangle=s/(@PACKAGE@-\d\S+)(@ARCHIVE_EXT@)/$1-filenamemangle$2/, \
      pgpsigurlmangle=s/$/.asc/" \
                     @@@url@@@ (?:.*)/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian
opts="component=bar, filenamemangle=s/(bar-)/@PACKAGE@-$1/, pgpsigurlmangle=s/$/.asc/" \
                     @@@url@@@ (?:.*)/bar@ANY_VERSION@@ARCHIVE_EXT@ same
opts="component=baz, filenamemangle=s/(baz-)/@PACKAGE@-$1/, pgpsigurlmangle=s/$/.asc/" \
                     @@@url@@@ (?:.*)/baz@ANY_VERSION@@ARCHIVE_EXT@ same'
    helperWatch siteWebNonNativeMUT_filenamemangle
}

# test normal web page (MUT with O main)
testWatch4WebNonNativeMUT0() {
    WATCHVER=4
    COMPONENTS="foo bar baz"
    FILEEXCLUDE=3
    MGZREPACK=xz
    WATCHLINE='
opts="component=foo,pgpsigurlmangle=s/$/.asc/" @@@url@@@ (?:.*)/foo@ANY_VERSION@@ARCHIVE_EXT@ debian
opts="component=bar,pgpsigurlmangle=s/$/.asc/" @@@url@@@ (?:.*)/bar@ANY_VERSION@@ARCHIVE_EXT@ same
opts="component=baz,pgpsigurlmangle=s/$/.asc/" @@@url@@@ (?:.*)/baz@ANY_VERSION@@ARCHIVE_EXT@ same uupdate'
    helperWatch siteWebNonNativeMUT
}

# Group test without signatures
testWatch4WebNonNativeGroup() {
    WATCHVER=4
    COMPONENTS="bar baz"
    FILEEXCLUDE=3
    UVERSION=2.0
    CMPVERSION=3.0
    WATCHLINE='
opts="pgpmode=none" @@@url@@@ (?:.*)/foo@ANY_VERSION@@ARCHIVE_EXT@ group
opts="component=bar,pgpmode=none" @@@url@@@ (?:.*)/bar@ANY_VERSION@@ARCHIVE_EXT@ group
opts="component=baz,pgpmode=none" @@@url@@@ (?:.*)/baz@ANY_VERSION@@ARCHIVE_EXT@ group'
    helperWatch siteWebNonNativeMUT 1.0 2.0+~3.0+~3.0
}

# Group test with repack suffix
testWatch4WebNonNativeGroupRepackSuffix() {
    WATCHVER=4
    COMPONENTS="bar baz"
    FILEEXCLUDE=3
    UVERSION=2.0
    CMPVERSION=3.0
    WATCHLINE='
opts="pgpmode=none" @@@url@@@ (?:.*)/foo@ANY_VERSION@@ARCHIVE_EXT@ group
opts="component=bar,repacksuffix=+ds,pgpmode=none" @@@url@@@ (?:.*)/bar@ANY_VERSION@@ARCHIVE_EXT@ group
opts="component=baz,pgpmode=none" @@@url@@@ (?:.*)/baz@ANY_VERSION@@ARCHIVE_EXT@ group'
    helperWatch siteWebNonNativeMUT 1.0 2.0+~3.0+ds+~3.0
}

testWatch4WebNonNativeGroupRepackSuffix2() {
    WATCHVER=4
    COMPONENTS="bar baz"
    FILEEXCLUDE=3
    UVERSION=2.0
    CMPVERSION=3.0
    WATCHLINE='
opts="dversionmangle=auto,pgpmode=none" @@@url@@@ (?:.*)/foo@ANY_VERSION@@ARCHIVE_EXT@ group
opts="dversionmangle=auto,component=bar,repacksuffix=~ds,pgpmode=none" @@@url@@@ (?:.*)/bar@ANY_VERSION@@ARCHIVE_EXT@ group
opts="dversionmangle=auto,component=baz,pgpmode=none" @@@url@@@ (?:.*)/baz@ANY_VERSION@@ARCHIVE_EXT@ group'
    helperWatch siteWebNonNativeMUT 1.0 2.0+~3.0~ds+~3.0
}

# Group test with pgpsigurlmangle
testWatch4WebNonNativeGroupSigned() {
    WATCHVER=4
    COMPONENTS="bar baz"
    FILEEXCLUDE=3
    UVERSION=2.0
    CMPVERSION=3.0
    WATCHLINE='
opts="pgpsigurlmangle=s/$/.asc/" @@@url@@@ (?:.*)/foo@ANY_VERSION@@ARCHIVE_EXT@ group
opts="component=bar,pgpsigurlmangle=s/$/.asc/" @@@url@@@ (?:.*)/bar@ANY_VERSION@@ARCHIVE_EXT@ group
opts="component=baz,pgpsigurlmangle=s/$/.asc/" @@@url@@@ (?:.*)/baz@ANY_VERSION@@ARCHIVE_EXT@ group'
    helperWatch siteWebNonNativeMUT 1.0 2.0+~3.0+~3.0
}

# Group test with pgpmode next/previous
testWatch4WebNonNativeGroupSignedNext() {
    WATCHVER=4
    COMPONENTS="bar baz"
    FILEEXCLUDE=3
    UVERSION=2.0
    CMPVERSION=3.0
    SIGMODE=ASC
    WATCHLINE='
opts="pgpmode=next" @@@url@@@ (?:.*)/foo@ANY_VERSION@@ARCHIVE_EXT@ group
opts="pgpmode=previous" @@@url@@@/ (?:.*)/foo@ANY_VERSION@@ARCHIVE_EXT@.asc previous
opts="component=bar,pgpmode=next" @@@url@@@ (?:.*)/bar@ANY_VERSION@@ARCHIVE_EXT@ group
opts="component=bar,pgpmode=previous" @@@url@@@ (?:.*)/bar@ANY_VERSION@@ARCHIVE_EXT@.asc previous
opts="component=baz,pgpmode=next" @@@url@@@ (?:.*)/baz@ANY_VERSION@@ARCHIVE_EXT@ group
opts="component=baz,pgpmode=previous" @@@url@@@ (?:.*)/baz@ANY_VERSION@@ARCHIVE_EXT@.asc previous'
    helperWatch siteWebNonNativeMUT 1.0 2.0+~3.0+~3.0
}

testWatch4WebNonNativeGroupWithCompression() {
    WATCHVER=4
    COMPONENTS="bar baz"
    FILEEXCLUDE=3
    UVERSION=2.0
    CMPVERSION=3.0
    WATCHLINE='
opts="pgpmode=none" @@@url@@@ (?:.*)/foo@ANY_VERSION@@ARCHIVE_EXT@ group
opts="component=bar,compression=xz,repack,pgpmode=none" @@@url@@@ (?:.*)/bar@ANY_VERSION@@ARCHIVE_EXT@ group
opts="component=baz,repack,pgpmode=none" @@@url@@@ (?:.*)/baz@ANY_VERSION@@ARCHIVE_EXT@ group'
    helperWatch siteWebNonNativeMUT 1.0 2.0+~3.0+~3.0
}

testWatch4WebNonNativeGroupWithChecksum1() {
    WATCHVER=4
    COMPONENTS="bar baz"
    FILEEXCLUDE=3
    UVERSION=2.0
    CMPVERSION=3.0
    WATCHLINE='
opts="pgpmode=none" @@@url@@@ (?:.*)/foo@ANY_VERSION@@ARCHIVE_EXT@ group
opts="component=bar,compression=xz,repack,pgpmode=none" @@@url@@@ (?:.*)/bar@ANY_VERSION@@ARCHIVE_EXT@ group
opts="component=baz,repack,pgpmode=none" @@@url@@@ (?:.*)/baz@ANY_VERSION@@ARCHIVE_EXT@ checksum'
    helperWatch siteWebNonNativeMUT 1.0 2.0+~3.0+~cs3.0
}

testWatch4WebNonNativeGroupWithChecksum2() {
    WATCHVER=4
    COMPONENTS="bar baz"
    FILEEXCLUDE=3
    UVERSION=2.0
    CMPVERSION=3.0
    WATCHLINE='
opts="pgpmode=none" @@@url@@@ (?:.*)/foo@ANY_VERSION@@ARCHIVE_EXT@ group
opts="component=bar,compression=xz,repack,pgpmode=none" @@@url@@@ (?:.*)/bar@ANY_VERSION@@ARCHIVE_EXT@ checksum
opts="component=baz,repack,pgpmode=none" @@@url@@@ (?:.*)/baz@ANY_VERSION@@ARCHIVE_EXT@ checksum'
    helperWatch siteWebNonNativeMUT 1.0 2.0+~cs6.0
}

testWatch4WebNonNativeGroupWithChecksumAndIgnore() {
    WATCHVER=4
    COMPONENTS="bar baz"
    FILEEXCLUDE=3
    UVERSION=2.0
    CMPVERSION=3.0
    WATCHLINE='
opts="pgpmode=none" @@@url@@@ (?:.*)/foo@ANY_VERSION@@ARCHIVE_EXT@ group
opts="component=bar,compression=xz,repack,pgpmode=none" @@@url@@@ (?:.*)/bar@ANY_VERSION@@ARCHIVE_EXT@ checksum
opts="component=baz,repack,pgpmode=none" @@@url@@@ (?:.*)/baz@ANY_VERSION@@ARCHIVE_EXT@ ignore'
    helperWatch siteWebNonNativeMUT 1.0 2.0+~cs3.0
}

. shunit2
