1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
|
use strict;
use warnings;
use Test::More;
use URI ();
my $u = URI->new('mailto:gisle@aas.no');
is $u->to, 'gisle@aas.no', 'parsing normal URI sets to()';
is $u, 'mailto:gisle@aas.no', '... and stringification works';
my $old = $u->to('larry@wall.org');
is $old, 'gisle@aas.no', 'to() returns old value';
is $u->to, 'larry@wall.org', '... and sets new value';
is $u, 'mailto:larry@wall.org', '... and stringification works';
$u->to("?/#");
is $u->to, "?/#", 'to() accepts chars that need escaping';
is $u, 'mailto:%3F/%23', '... and stringification escapes them';
my @h = $u->headers;
ok @h == 2 && "@h" eq "to ?/#", '... and headers() returns the correct values';
$u->headers(
to => 'gisle@aas.no',
cc => 'gisle@ActiveState.com,larry@wall.org',
Subject => 'How do you do?',
garbage => '/;?#=&',
);
@h = $u->headers;
ok @h == 8
&& "@h" eq
'to gisle@aas.no cc gisle@ActiveState.com,larry@wall.org Subject How do you do? garbage /;?#=&',
'setting multiple headers at once works';
is $u->to, 'gisle@aas.no', '... and to() returns the new value';
#print "$u\n";
is $u,
'mailto:gisle@aas.no?cc=gisle%40ActiveState.com%2Clarry%40wall.org&Subject=How+do+you+do%3F&garbage=%2F%3B%3F%23%3D%26',
'... and stringification works';
$u = URI->new("mailto:");
$u->to("gisle");
is $u, 'mailto:gisle', 'starting with an empty URI and setting to() works';
$u = URI->new('mailto:user+detail@example.com');
is $u->to, 'user+detail@example.com', 'subaddress with `+` parsed correctly';
is $u, 'mailto:user+detail@example.com', '... and stringification works';
TODO: {
local $TODO = "We can't handle quoted local parts without properly parsing the email addresses";
$u = URI->new('mailto:"foo bar+baz"@example.com');
is $u->to, '"foo bar+baz"@example.com', 'address with quoted local part containing spaces is parsed correctly';
is $u, 'mailto:%22foo%20bar+baz%22@example.com', '... and stringification works';
}
# RFC 5321 (4.1.3) - Address Literals
# IPv4
$u = URI->new('mailto:user@[127.0.0.1]');
is $u->to, 'user@[127.0.0.1]', 'IPv4 host name';
is $u, 'mailto:user@[127.0.0.1]', '... and stringification works';
# IPv6
$u = URI->new('mailto:user@[IPv6:fe80::e828:209d:20e:c0ae]');
is $u->to, 'user@[IPv6:fe80::e828:209d:20e:c0ae]', 'IPv4 host name';
is $u, 'mailto:user@[IPv6:fe80::e828:209d:20e:c0ae]', '... and stringification works';
done_testing;
|