summaryrefslogtreecommitdiff
path: root/t
diff options
context:
space:
mode:
authorLorry Tar Creator <lorry-tar-importer@lorry>2015-06-09 20:08:11 +0000
committerLorry Tar Creator <lorry-tar-importer@lorry>2015-06-09 20:08:11 +0000
commite4bf16d2fde5df6eadd91475e3dcca56b87b1eb0 (patch)
tree2e5c28acc5e330429c166c5e26afb1025754ea4b /t
downloadEncode-Locale-tarball-e4bf16d2fde5df6eadd91475e3dcca56b87b1eb0.tar.gz
Diffstat (limited to 't')
-rw-r--r--t/alias.t22
-rw-r--r--t/arg.t45
-rw-r--r--t/env.t25
-rw-r--r--t/tain.t19
-rw-r--r--t/warn_once.t20
5 files changed, 131 insertions, 0 deletions
diff --git a/t/alias.t b/t/alias.t
new file mode 100644
index 0000000..c18d027
--- /dev/null
+++ b/t/alias.t
@@ -0,0 +1,22 @@
+#!perl -w
+
+use strict;
+use warnings;
+use Test::More tests => 8;
+
+use Encode::Locale;
+use Encode qw(find_encoding);
+
+sub cmp_encoding {
+ my ($arg, $var) = @_;
+ my $lcarg = lc $arg;
+ is find_encoding($lcarg), find_encoding(${ $Encode::Locale::{$var} }),
+ "$lcarg eq $var";
+ is find_encoding($arg), find_encoding(${ $Encode::Locale::{$var} }),
+ "$arg eq $var";
+}
+
+cmp_encoding 'Locale', 'ENCODING_LOCALE';
+cmp_encoding 'Locale_FS', 'ENCODING_LOCALE_FS';
+cmp_encoding 'Console_IN', 'ENCODING_CONSOLE_IN';
+cmp_encoding 'Console_OUT', 'ENCODING_CONSOLE_OUT';
diff --git a/t/arg.t b/t/arg.t
new file mode 100644
index 0000000..a754541
--- /dev/null
+++ b/t/arg.t
@@ -0,0 +1,45 @@
+#!perl -w
+
+use strict;
+use warnings;
+use Test::More;
+
+use Encode::Locale qw($ENCODING_LOCALE decode_argv);
+use Encode;
+use utf8;
+
+diag "ENCODING_LOCALE is $ENCODING_LOCALE\n";
+my @chars = qw(funny chars š ™);
+my @octets = map { Encode::encode(locale => $_) } @chars;
+@ARGV = @octets;
+
+plan tests => scalar(@ARGV);
+
+decode_argv();
+
+TODO: {
+ local $TODO = "ARGV decoding";
+ for (my $i = 0; $i < @ARGV; $i++) {
+ is $chars[$i], $ARGV[$i],
+ "chars(" . prettify($chars[$i]) .
+ ") octets(" . prettify($octets[$i]) .
+ ") argv(" . prettify($ARGV[$i]) . ")";
+ }
+}
+
+sub prettify {
+ my $text = shift;
+ my @r;
+ for (split(//, $text)) {
+ if (ord() > 32 && ord() < 128) {
+ push @r, $_;
+ }
+ elsif (ord() < 256) {
+ push @r, sprintf "\\x%02X", ord();
+ }
+ else {
+ push @r, sprintf "\\x{%04X}", ord();
+ }
+ }
+ join '', @r;
+}
diff --git a/t/env.t b/t/env.t
new file mode 100644
index 0000000..dfc7203
--- /dev/null
+++ b/t/env.t
@@ -0,0 +1,25 @@
+#!perl -w
+
+use strict;
+use warnings;
+use Test::More tests => 13;
+
+use Encode::Locale qw(env);
+
+$ENV{foo} = "bar";
+is env("foo"), "bar", 'env read';
+is env("foo", "baz"), "bar", 'env write retval old value';
+is env("foo"), "baz", 'env write worked';
+is $ENV{foo}, "baz", 'env affected %ENV';
+is env("foo", undef), "baz", 'env write retval old value';
+is env("foo"), undef, 'env write worked';
+ok !exists $ENV{foo}, 'env write undef deletes from %ENV';
+
+Encode::Locale::reinit("cp1252");
+$ENV{"m\xf6ney"} = "\x80uro";
+is env("m\xf6ney", "\x{20AC}"), "\x{20AC}uro", 'env write retval encoded';
+is env("m\xf6ney"), "\x{20AC}", 'env write worked';
+is $ENV{"m\xf6ney"}, "\x80", 'env affected %ENV';
+is env("\x{20AC}", 1), undef, 'env write retval old value';
+is env("\x{20AC}"), 1, 'env write worked';
+is $ENV{"\x80"}, 1, 'env affected %ENV';
diff --git a/t/tain.t b/t/tain.t
new file mode 100644
index 0000000..f38cacf
--- /dev/null
+++ b/t/tain.t
@@ -0,0 +1,19 @@
+#!perl -Tw
+
+use strict;
+use warnings;
+
+# taint mode testing as seen in WWW::Mechanize
+
+use Test::More tests => 1;
+my @warns;
+BEGIN {
+ $SIG{__WARN__} = sub { push @warns, @_ };
+}
+BEGIN {
+ delete @ENV{qw( PATH IFS CDPATH ENV BASH_ENV )}; # Placates taint-unsafe Cwd.pm in 5.6.1
+}
+
+require Encode::Locale;
+
+is "@warns", "", 'no warnings';
diff --git a/t/warn_once.t b/t/warn_once.t
new file mode 100644
index 0000000..e2dc61c
--- /dev/null
+++ b/t/warn_once.t
@@ -0,0 +1,20 @@
+#!perl -w
+
+use strict;
+use warnings;
+
+use Test::More tests => 2;
+my @warns;
+BEGIN {
+ $SIG{__WARN__} = sub { push @warns, @_ };
+}
+
+use Encode::Locale;
+
+BEGIN {
+ use Encode;
+ my $a = encode("UTF-8", "foo\xFF");
+ ok $a, "foo\xC3\xBF";
+}
+
+is "@warns", "", 'no warnings';