summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--MANIFEST3
-rw-r--r--lib/GnuPG/Interface.pm24
-rw-r--r--t/Interface.t4
-rw-r--r--t/version_updates.t30
-rwxr-xr-xtest/fake-gpg-v12
-rwxr-xr-xtest/fake-gpg-v22
6 files changed, 56 insertions, 9 deletions
diff --git a/MANIFEST b/MANIFEST
index 7c04bb9..8b9c4a4 100644
--- a/MANIFEST
+++ b/MANIFEST
@@ -50,10 +50,13 @@ t/sign.t
t/sign_and_encrypt.t
t/UserId.t
t/verify.t
+t/version_updates.t
t/wrap_call.t
t/zzz_cleanup.t
test/encrypted.1.gpg
test/encrypted.2.gpg
+test/fake-gpg-v1
+test/fake-gpg-v2
test/fake-pinentry.pl
test/gpg.conf
test/key.1.asc
diff --git a/lib/GnuPG/Interface.pm b/lib/GnuPG/Interface.pm
index b11e4d2..c265443 100644
--- a/lib/GnuPG/Interface.pm
+++ b/lib/GnuPG/Interface.pm
@@ -30,11 +30,18 @@ use GnuPG::Handles;
$VERSION = '1.00';
-has $_ => (
+has passphrase => (
isa => 'Any',
is => 'rw',
- clearer => 'clear_' . $_,
-) for qw(call passphrase);
+ clearer => 'clear_passphrase',
+);
+
+has call => (
+ isa => 'Any',
+ is => 'rw',
+ trigger => 1,
+ clearer => 'clear_call',
+);
# NB: GnuPG versions
#
@@ -68,10 +75,7 @@ sub gnupg_call { shift->call(@_); }
sub BUILD {
my ( $self, $args ) = @_;
-
- $self->hash_init( call => 'gpg' );
- $self->hash_init(%$args);
- $self->_set_version($self->_version());
+ $self->hash_init( call => 'gpg', %$args );
}
struct(
@@ -82,6 +86,12 @@ struct(
}
);
+# Update version if "call" is updated
+sub _trigger_call {
+ my ( $self, $gpg ) = @_;
+ $self->_set_version( $self->_version() );
+}
+
#################################################################
# real worker functions
diff --git a/t/Interface.t b/t/Interface.t
index 6d97956..ec5dfe5 100644
--- a/t/Interface.t
+++ b/t/Interface.t
@@ -10,8 +10,8 @@ use MyTest;
use GnuPG::Interface;
-my $v1 = 'gpg';
-my $v2 = 'gnupg';
+my $v1 = './test/fake-gpg-v1';
+my $v2 = './test/fake-gpg-v2';
my $gnupg = GnuPG::Interface->new( call => $v1 );
diff --git a/t/version_updates.t b/t/version_updates.t
new file mode 100644
index 0000000..758ee7b
--- /dev/null
+++ b/t/version_updates.t
@@ -0,0 +1,30 @@
+#!/usr/bin/perl -w
+
+use strict;
+
+use lib './t';
+use MyTest;
+use MyTestSpecific;
+
+TEST
+{
+ my $gpg = GnuPG::Interface->new(call => './test/fake-gpg-v1');
+ return ($gpg->version() eq '1.4.23');
+};
+
+
+TEST
+{
+ my $gpg = GnuPG::Interface->new(call => './test/fake-gpg-v2');
+ return ($gpg->version() eq '2.2.12');
+};
+
+TEST
+{
+ my $gpg = GnuPG::Interface->new(call => './test/fake-gpg-v1');
+ my $v1 = $gpg->version();
+ $gpg->call('./test/fake-gpg-v2');
+ my $v2 = $gpg->version();
+
+ return ($v1 eq '1.4.23' && $v2 eq '2.2.12');
+}
diff --git a/test/fake-gpg-v1 b/test/fake-gpg-v1
new file mode 100755
index 0000000..0a2a68f
--- /dev/null
+++ b/test/fake-gpg-v1
@@ -0,0 +1,2 @@
+#!/bin/sh
+echo 'gpg (GnuPG) 1.4.23'
diff --git a/test/fake-gpg-v2 b/test/fake-gpg-v2
new file mode 100755
index 0000000..2578a44
--- /dev/null
+++ b/test/fake-gpg-v2
@@ -0,0 +1,2 @@
+#!/bin/sh
+echo 'gpg (GnuPG) 2.2.12'