#!/usr/bin/env perl
use strict;
use warnings;
use File::Basename;
use lib File::Basename::dirname(__FILE__)."/../../../lib";
use UR;
use Test::More;
use File::Temp;
BEGIN {
eval "use Getopt::Complete::Cache;";
if ($@ =~ qr(Can't locate Getopt/Complete/Cache.pm in \@INC)) {
plan skip_all => 'Getopt::Complete::Cache does not exist on the system';
} else {
plan tests => 11; # This should match the number of keys in %tests below
use_ok('Getopt::Complete::Cache');
}
}
my $fh = File::Temp->new();
my $fname = $fh->filename;
# Create the file
my $cmd = UR::Namespace::Command::Update::TabCompletionSpec->create(classname => 'UR::Namespace::Command', output => $fname);
ok($cmd, 'Created command object');
$cmd->dump_error_messages(0);
$cmd->dump_warning_messages(0);
$cmd->queue_error_messages(1);
$cmd->queue_warning_messages(1);
ok($cmd->execute(), 'creating ur spec file in tmp');
my @messages = $cmd->warning_messages();
ok(!scalar(@messages), 'executing command generated no warning messages');
@messages = $cmd->error_messages();
is(scalar(@messages), 1, 'executing command generated one error message');
like($messages[0],
qr/Command\.pm\.opts is 0 bytes, reverting to previous/,
'Error message was correct');
# Try loading/parsing the file
ok(-f $fname, 'Output options file exists');
my $content = join('', $fh->getlines);
my $spec = eval $content;
is($@, '', 'eval of spec file worked');
# first look for >define, the next item in the list is subcommands for define
my $found = 0;
for (my $i = 0; $i < @$spec; $i++) {
if ($spec->[$i] eq '>define') {
$found = 1;
$spec = $spec->[$i+1];
last;
}
}
ok($found, 'Found define top-level command data');
$found = 0;
for (my $i = 0; $i < @$spec; $i++) {
if ($spec->[$i] eq '>namespace') {
$found = 1;
last;
}
}
ok($found, 'Found define namespace command data');
# Try importing the file
my $rv = Getopt::Complete::Cache->import(file => $fname, above => 1, comp_cword => 1);
is($rv, 1, 'importing ur spec from tmp');