The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl

use warnings 'FATAL' => 'all';
use strict;
use Test::More tests => 13;

use WWW::AUR::PKGBUILD;
use WWW::AUR::Package;
use Scalar::Util qw(blessed);

*unquote_bash = *WWW::AUR::PKGBUILD::_unquote_bash;

my ($empty) = unquote_bash( q{ <-- Space should fail!} );
is $empty, q{};

my $str;
($str) = unquote_bash( "HI" );
is $str, q{HI};

($str) = unquote_bash( q{"Hello, World!"} );
is $str, q{Hello, World!};

sub pbtext_ok
{
    my ($pbtext, $expect_ref, $test_name) = @_;

    my ($line) = reverse caller;

    my $pbobj = WWW::AUR::PKGBUILD->new( $pbtext );
    my %parsed = $pbobj->fields;
    is_deeply( \%parsed, $expect_ref, "line $line: $test_name" );
    return;
}

my $pbtext = <<'END_PKGBUILD';
pkgname='perl-cpanplus-dist-arch-git'
pkgver='20100530'
pkgrel='1'
pkgdesc='Developer release for CPANPLUS::Dist::Arch perl module'
arch=('any')
license=('PerlArtistic' 'GPL')
options=('!emptydirs')
makedepends=('perl-test-pod-coverage' 'perl-test-pod')
depends=('perl')
provides=('perl-cpanplus-dist-arch')
url='http://github.com/juster/perl-cpanplus-dist-arch'
md5sums=()
source=()
END_PKGBUILD

pbtext_ok( $pbtext,
           { 'pkgname'  => 'perl-cpanplus-dist-arch-git',
             'pkgver'   => '20100530',
             'pkgrel'   => '1',
             'pkgdesc'  => ( 'Developer release for CPANPLUS::Dist::Arch '
                             . 'perl module' ),
             'arch'     => [ 'any' ],
             'license'  => [ 'PerlArtistic', 'GPL' ],
             'options'  => [ '!emptydirs' ],
             'makedepends' => [ { 'pkg' => 'perl-test-pod-coverage',
                                  'cmp' => undef,
                                  'ver' => undef,
                                  'str' => 'perl-test-pod-coverage' },
                                { 'pkg' => 'perl-test-pod',
                                  'cmp' => undef,
                                  'ver' => undef,
                                  'str' => 'perl-test-pod' },
                               ],
             'depends'  => [ { 'pkg' => 'perl',
                               'cmp' => undef,
                               'ver' => undef,
                               'str' => 'perl', } ],
             'provides' => [ { 'pkg' => 'perl-cpanplus-dist-arch',
                               'ver' => undef,
                               'str' => 'perl-cpanplus-dist-arch' } ],
             'url'      => 'http://github.com/juster/perl-cpanplus-dist-arch',
             ( map { ( $_ => [] ) }
               qw { md5sums sha1sums sha256sums sha384sums sha512sums
                    noextract source replaces conflicts groups backup
                    optdepends } ),
            },
           'perl-cpanplus-dist-arch-git PKGBUILD parses' );

$pbtext = <<'END_PKGBUILD';
pkgname='depends-string-test'
depends=('dep>=0.01' 'dep-two')
conflicts=('conflict<999.999' 'conflict-two')
END_PKGBUILD

my %parsed = WWW::AUR::PKGBUILD->new( $pbtext )->fields;
is_deeply( $parsed{depends}, [ { 'pkg' => 'dep',
                                 'ver' => '0.01',
                                 'cmp' => '>=',
                                 'str' => 'dep>=0.01',
                                },
                               { 'pkg' => 'dep-two',
                                 'ver' => undef,
                                 'cmp' => undef,
                                 'str' => 'dep-two',
                                }]);
is_deeply( $parsed{conflicts}, [ { 'pkg' => 'conflict',
                                   'ver' => '999.999',
                                   'cmp' => '<',
                                   'str' => 'conflict<999.999',
                                  },
                                 { 'pkg' => 'conflict-two',
                                   'ver' => undef,
                                   'cmp' => undef,
                                   'str' => 'conflict-two',
                                  }]);

my $pkg      = WWW::AUR::Package->new( 'perl-alpm', basepath => 't/tmp' );
my $pkgbuild = $pkg->pkgbuild;
is blessed( $pkgbuild ), 'WWW::AUR::PKGBUILD';

is $pkgbuild->pkgname, 'perl-alpm';

ok $pkg->extract;
$pkgbuild = $pkg->pkgbuild;
is blessed( $pkgbuild ), 'WWW::AUR::PKGBUILD';
is $pkgbuild->pkgname, 'perl-alpm';
is $pkgbuild->pkgdesc, 'ArchLinux Package Manager backend library.';

$pbtext = <<'END_PKGBUILD';
arch=(''i686' 'x86_64'')
END_PKGBUILD
$pkgbuild = WWW::AUR::PKGBUILD->new( $pbtext );
is_deeply $pkgbuild->arch, [ qw/ i686 x86_64 / ];