Add extract_sigle method to archive

Change-Id: Ic2eb6578c6e8fb57e2191f685a000fd712ec463d
diff --git a/t/archive.t b/t/archive.t
index 1cd3c00..f86277f 100644
--- a/t/archive.t
+++ b/t/archive.t
@@ -1,6 +1,7 @@
 #!/usr/bin/env perl
 use strict;
 use warnings;
+use Data::Dumper;
 use Test::More;
 use File::Basename 'dirname';
 use File::Spec::Functions qw/catfile catdir/;
@@ -52,6 +53,35 @@
 $archive = KorAP::XML::Archive->new($file);
 ok(!$archive->check_prefix, 'Archive has no dot prefix');
 
+my @cmd = map { join ' ', @{$_} } $archive->cmds_from_sigle(['REI/RB*', 'REI/BNG/00071']);
+
+like($cmd[0], qr!unzip -qo -uo t/corpus/archive_rei\.zip!);
+like($cmd[0], qr!\QREI/header.xml REI/RB*/header.xml REI/RB* REI/BNG/header.xml REI/BNG/00071/*\E!);
+ok(!$cmd[1]);
+
+# New temporary directory
+$dir = tempdir(CLEANUP => 1);
+
+{
+  local $SIG{__WARN__} = sub {};
+  ok($archive->extract_sigle(['REI/RB*', 'REI/BNG/00071'], $dir), 'Fine');
+};
+
+ok(-d catdir($dir, 'REI'), 'Test corpus directory exists');
+ok(-d catdir($dir, 'REI','BNG'), 'Test corpus directory exists');
+ok(-d catdir($dir, 'REI','BNG','00071'), 'Test corpus directory exists');
+
+ok(-f catdir($dir, 'REI', 'header.xml'), 'Test corpus directory exists');
+ok(-f catdir($dir, 'REI','BNG', 'header.xml'), 'Test corpus directory exists');
+ok(-f catdir($dir, 'REI','BNG','00071', 'header.xml'), 'Test corpus directory exists');
+
+ok(-f catdir($dir, 'REI','RBR', 'header.xml'), 'Test corpus directory exists');
+ok(-f catdir($dir, 'REI','RBR','00610', 'header.xml'), 'Test corpus directory exists');
+ok(-f catdir($dir, 'REI','RBR','00610', 'header.xml'), 'Test corpus directory exists');
+
+ok(!-e catdir($dir, 'REI','BNG','00128'), 'Test corpus directory does not exist');
+
+
 done_testing;
 
 __END__
diff --git a/t/script/archive.t b/t/script/archive.t
index 8d0fba1..290784b 100644
--- a/t/script/archive.t
+++ b/t/script/archive.t
@@ -38,7 +38,6 @@
 
 my $input = catfile($f, '..', 'corpus', 'archive.zip');
 ok(-f $input, 'Input archive found');
-
 my $output = File::Temp->newdir(CLEANUP => 0);
 $output->unlink_on_destroy(0);
 
@@ -221,5 +220,38 @@
   $call
 );
 
+
+
+# Test with sigles
+$input = catfile($f, '..', 'corpus', 'archive.zip');
+ok(-f $input, 'Input archive found');
+
+unlink($output);
+
+$call = join(
+  ' ',
+  'perl', $script,
+  'archive',
+  '--input' => '' . $input,
+  '--output' => $output,
+  '--sigle' => 'TEST/BSP/2',
+  '--sigle' => 'TEST/BSP/5',
+  '-t' => 'Base#tokens_aggr',
+  '-m' => 'Sgbr'
+);
+
+{
+  local $SIG{__WARN__} = sub {};
+  my $out = stdout_from(sub { system($call); });
+
+  like($out, qr!TEST-BSP-1\.json!s, $call);
+
+  $out =~ m!Processed (.+?\.json)!;
+  $json = $1;
+};
+
+ok(-f $json, 'Json file exists');
+
+
 done_testing;
 __END__
diff --git a/t/script/extract.t b/t/script/extract.t
index e9f666f..11d7cf3 100644
--- a/t/script/extract.t
+++ b/t/script/extract.t
@@ -167,7 +167,7 @@
   sub {
     system($call);
   },
-  qr!Extract .+? REI/BN\*!s,
+  qr!Extract .+? REI/BN!s,
   $call
 );