#!/usr/bin/perl -w

# The script tests Arch::Name parsing.

use strict;

use FindBin;
use lib "$FindBin::Bin/../perllib";

use Test::More tests => 83;
use_ok("Arch::Name");

sub check_name ($;$) {
	my $string = shift;
	my $level = shift;
	my $label = defined $level? $level: "valid";

	my $name = Arch::Name->new($string);
	#print "[expected $label] [ got ", $name->level, "]\n";
	ok($name->is_valid($level), "'$string' is $label");
}

check_name('migo@homemail.com--Perl-GPL');
check_name('migo@homemail.com--Perl-GPL/arch-perl');
check_name('migo@homemail.com--Perl-GPL/arch-perl--devel');
check_name('migo@homemail.com--Perl-GPL/arch-perl--devel--0');
check_name('migo@homemail.com--Perl-GPL/arch-perl--devel--0--patch-73');

check_name('some@project');
check_name('some@project/c');
check_name('some@project/c--');
check_name('some@project/c----00');
check_name('some@project/c----00--versionfix-22');

check_name('some@project/c--b--FIRST', 4);
check_name('some@project/c--b--LATEST', 4);
check_name('some@project/c--b--FIRST--versionfix-2', 5);
check_name('some@project/c--b--LATEST--version-0', 5);
check_name('some@project/c--b--FIRST--LATEST', 5);
check_name('some@project/c--b--LATEST--FIRST', 5);
check_name('some@project/c--b--1--FIRST', 5);
check_name('some@project/c--b--1--LATEST', 5);

check_name('some-project', 0);
check_name('some@project/@', 0);
check_name('some@project/c--@', 0);
check_name('some@project/c--b--v', 0);
check_name('some@project/c--b--0--base-2', 0);

check_name('@aaa', 0);
check_name('aaa@@ddd', 0);
check_name('aaa@ddd/', 0);
check_name('aaa@ddd//', 0);
check_name('aaa@ddd/c@', 0);
check_name('aaa@ddd/@c', 0);
check_name('aaa@ddd/c@c', 0);
check_name('aaa@ddd/_', 0);
check_name('aaa@ddd/_b', 0);
check_name('aaa@ddd/-', 0);
check_name('aaa@ddd/--', 0);
check_name('aaa@ddd/---', 0);
check_name('aaa@ddd/c/', 0);
check_name('aaa@ddd/-c', 0);
check_name('aaa@ddd/c-', 0);
check_name('aaa@ddd/c---', 0);
check_name('aaa@ddd/c--_', 0);
check_name('aaa@ddd/c--_b', 0);
check_name('aaa@ddd/c--b-', 0);
check_name('aaa@ddd/c--b--', 0);
check_name('aaa@ddd/c--b---', 0);
check_name('aaa@ddd/c--b--.0', 0);
check_name('aaa@ddd/c--b--0.', 0);
check_name('aaa@ddd/c--b--1.1.', 0);
check_name('aaa@ddd/c--b--11a', 0);
check_name('aaa@ddd/c--b--1.a', 0);
check_name('aaa@ddd/c--b--1-', 0);
check_name('aaa@ddd/c--b--1--', 0);
check_name('aaa@ddd/c--b--1---', 0);
check_name('aaa@ddd/c--b--1--patch-a', 0);

check_name(' ', 0);
check_name('a @d', 0);
check_name('a@d/ ', 0);
check_name('a@d/c ', 0);
check_name('a@d/c-- ', 0);
check_name('a@d/c-- b', 0);
check_name('a@d/c--b-- ', 0);
check_name('a@d/c--b-- 1', 0);
check_name('a@d/c--b--1-- ', 0);
check_name('a@d/c--b--1-- base-0', 0);
check_name('a@d/c--b--1--base-0 ', 0);

check_name('', 0);
check_name('a@', 1);
check_name('a@/c', 2);
check_name('a@/c--', 3);
check_name('a@/c----0', 4);
check_name('a@/c----0--version-0', 5);

check_name('', 'none');
check_name('a1@d2', 'archive');
check_name('a1@d2/c3', 'category');
check_name('a1@d2/c3--b4', 'branch');
check_name('a1@d2/c3--b4--56', 'version');
check_name('a1@d2/c3--b4--00.11.22--patch-11111111', 'revision');

check_name('a1@d2/c3--b4--5.6--patch-7', 'none+');
check_name('a1@d2/c3--b4--5.6--patch-7', 'archive+');
check_name('a1@d2/c3--b4--5.6--patch-7', 'category+');
check_name('a1@d2/c3--b4--5.6--patch-7', 'branch+');
check_name('a1@d2/c3--b4--5.6--patch-7', 'version+');
check_name('a1@d2/c3--b4--5.6--patch-7', 'revision+');
