#!/bin/bash

# testsuite to test pbuilder-satisfydepends-funcs.

if [ -n "$PBUILDER_CHECKOUT" ]; then
    . "$PBUILDER_CHECKOUT/testlib.sh"

    . "$PBUILDER_CHECKOUT/pbuilder-satisfydepends-funcs"
else
    # these currently don't need to be exported
    PBUILDER_TEST_ROOT="${PBUILDER_ROOT:-}"
    PBUILDER_TEST_PKGLIBDIR="${PBUILDER_PKGLIBDIR:-$PBUILDER_ROOT/usr/lib/pbuilder}"
    . "$PBUILDER_TEST_PKGLIBDIR/testlib.sh"

    . "$PBUILDER_TEST_PKGLIBDIR/pbuilder-satisfydepends-funcs"
fi

DEBIAN_CONTROL=""

cleanup() {
    if [ -n "$DEBIAN_CONTROL" ]; then
        rm -f "$DEBIAN_CONTROL"
    fi
}

test_get_build_deps() {
    local BINARY_ARCH

    BINARY_ARCH="$1"

    cat <<EOF >"$DEBIAN_CONTROL"
Source: amule
XXXX:
Build-Depends: 
 autotools-dev ( >= 1.2 ) ,
	 debhelper 	,
 quilt(<<12:0),
##
 libwxgtk2.8-dev
Build-Depends-Indep: test [ amd64 i386 ], test1, 
 test2[!i386 ! amd64], test3 | 
 test4, test5
Misc: test

Build-Depends: wrong build depends, line
Description: test
 other things
 wow
EOF
    get_build_deps
}

test_get_build_deps_dsc() {
    cat <<EOF >"$DEBIAN_CONTROL"
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256

Format: 1.0
Source: hello-debhelper
Build-Depends: debhelper (>= 7)
Checksums-Sha1: 
 fcbf0264928900adf03a7797474375e1a6fa3836 499638 hello-debhelper_2.4.orig.tar.gz
 0ea70eb46b4c90a8dbefbe60bebe4b9f9abb2733 5308 hello-debhelper_2.4-3.diff.gz


-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.9 (GNU/Linux)

iQEcBAEBCAAGBQJKml74AAoJEEHOfwufG4sysC4H/26EikyIgIqRuSXMiykc1hmd
97id9nWl+QzgCpUEg/+uDqEW+Bl6291FstGvzTFCwmB5JjH9ErH1LsyG1OLXbFUb
H89Em7qkl4o2ACTh255oM7FhVweof3UEaLCZMH+HZVVpHXNpEnhrfDvpTBbPGjUi
-----END PGP SIGNATURE-----
EOF
    get_build_deps
}

trap cleanup sigpipe sighup exit

# TODO move to build dir
DEBIAN_CONTROL="$(tempfile)"

expect_output "autotools-dev (>= 1.2), debhelper, quilt (<< 12:0), libwxgtk2.8-dev, test [amd64 i386], test1, test2 [!i386 !amd64], test3 | test4, test5" \
    test_get_build_deps "no"
expect_output "autotools-dev (>= 1.2), debhelper, quilt (<< 12:0), libwxgtk2.8-dev" \
    test_get_build_deps "yes"

expect_fail checkbuilddep_archdeps "foo [amd64]" "amd64"
expect_success checkbuilddep_archdeps "foo [i386]" "amd64"
expect_fail checkbuilddep_archdeps "foo [i386 amd64]" "amd64"
expect_success checkbuilddep_archdeps "foo [!amd64]" "amd64"
expect_success checkbuilddep_archdeps "foo [!i386 !amd64]" "amd64"

test_filter_arch_deps() {
    echo "$1" | filter_arch_deps "$2"
}

expect_output "foo" test_filter_arch_deps "foo" "amd64"
expect_output "foo" test_filter_arch_deps "foo [amd64]" "amd64"
expect_output "bar, foo" test_filter_arch_deps "bar, foo [amd64]" "amd64"
expect_output "bar | foo" test_filter_arch_deps "bar | foo [amd64]" "amd64"
expect_output "bar" test_filter_arch_deps "bar | foo [amd64]" "i386"

expect_fail checkbuilddep_restrictiondeps "foo <!stage1>" ""
expect_success checkbuilddep_restrictiondeps "foo <!stage1>" "stage1"
expect_fail checkbuilddep_restrictiondeps "foo <!stage1>" "notest"
expect_success checkbuilddep_restrictiondeps "foo <!stage1>" "stage1 notest"

expect_success checkbuilddep_restrictiondeps "foo <stage1>" ""
expect_fail checkbuilddep_restrictiondeps "foo <stage1>" "stage1"
expect_success checkbuilddep_restrictiondeps "foo <stage1>" "notest"
expect_fail checkbuilddep_restrictiondeps "foo <stage1>" "stage1 notest"

expect_fail checkbuilddep_restrictiondeps "foo <!stage1 !notest>" ""
expect_success checkbuilddep_restrictiondeps "foo <!stage1 !notest>" "stage1"
expect_success checkbuilddep_restrictiondeps "foo <!stage1 !notest>" "notest"
expect_success checkbuilddep_restrictiondeps "foo <!stage1 !notest>" "stage1 notest"

expect_success checkbuilddep_restrictiondeps "foo <stage1 notest>" ""
expect_success checkbuilddep_restrictiondeps "foo <stage1 notest>" "stage1"
expect_success checkbuilddep_restrictiondeps "foo <stage1 notest>" "notest"
expect_fail checkbuilddep_restrictiondeps "foo <stage1 notest>" "stage1 notest"

expect_success checkbuilddep_restrictiondeps "foo <!stage1 notest>" ""
expect_success checkbuilddep_restrictiondeps "foo <!stage1 notest>" "stage1"
expect_fail checkbuilddep_restrictiondeps "foo <!stage1 notest>" "notest"
expect_success checkbuilddep_restrictiondeps "foo <!stage1 notest>" "stage1 notest"

expect_success checkbuilddep_restrictiondeps "foo <stage1 !notest>" ""
expect_fail checkbuilddep_restrictiondeps "foo <stage1 !notest>" "stage1"
expect_success checkbuilddep_restrictiondeps "foo <stage1 !notest>" "notest"
expect_success checkbuilddep_restrictiondeps "foo <stage1 !notest>" "stage1 notest"

test_filter_restriction_deps() {
    echo "$1" | filter_restriction_deps "$2"
}

expect_output "foo" test_filter_restriction_deps "foo <!stage1>" ""
expect_output "" test_filter_restriction_deps "foo <!stage1>" "stage1"
expect_output "foo" test_filter_restriction_deps "foo <stage1>" "stage1"
expect_output "bar, foo" test_filter_restriction_deps "bar, foo <stage1>" "stage1"
expect_output "bar | foo" test_filter_restriction_deps "bar | foo <stage1>" "stage1"
expect_output "bar" test_filter_restriction_deps "bar | foo <!stage1>" "stage1"

test_filter_arch_restriction_deps() {
    echo "$1" | filter_arch_deps "$2" | filter_restriction_deps "$3"
}

expect_output "foo" test_filter_arch_restriction_deps "foo [amd64] <!stage1>" "amd64" ""
expect_output "" test_filter_arch_restriction_deps "foo [amd64] <stage1>" "amd64" ""
expect_output "foo" test_filter_arch_restriction_deps "foo [amd64] <!stage1>" "amd64" ""
expect_output "" test_filter_arch_restriction_deps "foo [i386] <stage1>" "amd64" "stage1"

expect_output "debhelper (>= 7)" test_get_build_deps_dsc

testlib_summary
