The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl -w
use strict;
use SVK::Util qw( catdir tmpdir );
use File::Spec;
use SVK::Test;
plan tests => 18;

our ($answer, $output, @TOCLEAN);
my $xd = SVK::XD->new (depotmap => {},
		       checkout => Data::Hierarchy->new);
my $svk = SVK->new (xd => $xd, output => \$output);
push @TOCLEAN, [$xd, $svk];

my $repospath = catdir(tmpdir(), "svk-$$-".int(rand(1000)));
my $quoted = quotemeta($repospath);

set_editor(<< "TMP");
\$_ = shift;
open _, ">\$_" or die \$!;
print _ << "EOF";
'': '$quoted/'

===edit the above depot map===

EOF

TMP

$answer = 'n';
$svk->depotmap;
ok (!-e $repospath, '... did not initialize a repospath');

$answer = 'y';
$svk->depotmap ('--init');
ok (-d $repospath);
is_output_like ($svk, 'depotmap', ['--list'],
	       qr"//.*\Q$repospath\E", 'depotpath - list');
is_output ($svk, 'depotmap', ['--detach', '//'],
	   ["Depot '' detached."], 'depotpath - detach');
is_output ($svk, 'depotmap', ['--detach', '//'],
	   ["Depot '' does not exist in the depot map."], 'depotpath - detach again');
is_output ($svk, 'depotmap', ['//', $repospath],
	   ['New depot map saved.'], 'depotpath - add');
is_output ($svk, 'depotmap', ['--detach', $repospath],
	   ["Depot '' detached."], 'depotpath - detach with repospath');
is_output_like ($svk, 'depotmap', ['--detach', $repospath],
           qr/Depot '.+' does not exist in the depot map/,
           'depotpath - detach with repospath again');
is_output ($svk, 'depotmap', ['//', $repospath],
	   ['New depot map saved.'], 'depotpath - add again');
is_output ($svk, 'depotmap', ['//', $repospath],
	   ["Depot '' already exists; use 'svk depotmap --detach' to remove it first."], 'depotpath - add again');

is_output ($svk, 'depotmap', ['--relocate', '//'],
	   ["Need to specify a path name for depot."]);

$answer = 'n';
is_output ($svk, 'depotmap', ['--relocate', '//', "$repospath.new"],
	   [__("Depot '' relocated to '$repospath.new'.")], 'depotpath - relocate');
ok (!-e "$repospath.new", '... did not create a new repospath');
is_output ($svk, 'depotmap', ['--relocate', '//', $repospath],
	   [__("Depot '' relocated to '$repospath'.")], 'depotpath - relocate back');

is_output ($svk, 'depotmap', ['--relocate', $repospath => "$repospath.new"],
	   [__("Depot '' relocated to '$repospath.new'.")], 'depotpath - relocate from path');
ok (-e "$repospath.new", '... did create a new repospath');
is_output ($svk, 'depotmap', ['--relocate', "$repospath.new" => $repospath],
	   [__("Depot '' relocated to '$repospath'.")], 'depotpath - relocate back');
is_output ($svk, 'depotmap', ['--relocate', $repospath => catdir($repospath, 'db')], [
            __("Cannot rename $repospath to $repospath/db; please move it manually."),
            __("Depot '' relocated to '$repospath/db'."),
           ], 'depotpath - relocate impossibly');

rmtree [$repospath];
rmtree ["$repospath.new"];