File: header-rename.t

package info (click to toggle)
libemail-simple-perl 2.218-1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, forky, sid, trixie
  • size: 336 kB
  • sloc: perl: 462; makefile: 2
file content (106 lines) | stat: -rw-r--r-- 2,293 bytes parent folder | download
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
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
use v5.12.0;
use warnings;

use Test::More tests => 3;

use Email::Simple::Header;

sub header ($) { Email::Simple::Header->new($_[0]); }
sub normal ($) { my $s = $_[0]; $s =~ s/\x0d\x0a/\n/g; $s }

subtest "basic renaming" => sub {
  my $head = header <<'END_HEADER';
Foo: F1
fOO: F2
bar: B1
FoO: F3
Baz: Z1
BAR: B2
END_HEADER

  $head->header_raw_set('Bar', qw( B1A B2A ));
  $head->header_rename('Foo', 'XYZ');
  $head->header_rename('XYZ', 'ZZZ');
  $head->header_rename('Bar', 'AAA');

  my $want = <<'END_HEADER';
ZZZ: F1
ZZZ: F2
AAA: B1A
ZZZ: F3
Baz: Z1
AAA: B2A
END_HEADER

  my $have = normal $head->as_string;

  is($have, $want, "header has been updated as expected");
};

subtest "nth header renaming" => sub {
  my $head = header <<'END_HEADER';
Foo: F1
fOO: F2
bar: B1
FoO: F3
Baz: Z1
BAR: B2
END_HEADER

  {
    my $ok = eval { $head->header_rename('Foo', 'XYZ', -1) };
    my $error = $@;
    like($error, qr/negative header index/, "can't use negative index");
  }

  {
    my $ok = eval { $head->header_rename('Foo', 'XYZ', 3) };
    my $error = $@;
    like($error, qr/3 exceeds/, "can't use too-large");
  }

  $head->header_rename('Foo', 'Two', 2);
  $head->header_rename('Foo', 'One', 1);
  $head->header_rename('Foo', 'Zero', 0);

  my $want = <<'END_HEADER';
Zero: F1
One: F2
bar: B1
Two: F3
Baz: Z1
BAR: B2
END_HEADER

  my $have = normal $head->as_string;

  is($have, $want, "header has been updated as expected");
};

subtest "wrapping-related things" => sub {
  my $input = <<'END_HEADER';
Foo: Wrapped
  Needlessly
Foo: Not wrapped, but may need wrapping if the field name becomes long.
Foo: Wrapped, and will generally need to be wrapped again, if the field
  name stays long.
END_HEADER

  my $head = header $input;

  is(normal $head->as_string, $input, 'round-trip works as expected');

  $head->header_rename('Foo', 'The-Field-Formerly-Known-As-Foo');

my $expect = <<'END_HEADER';
The-Field-Formerly-Known-As-Foo: Wrapped Needlessly
The-Field-Formerly-Known-As-Foo: Not wrapped, but may need wrapping if the
 field name becomes long.
The-Field-Formerly-Known-As-Foo: Wrapped, and will generally need to be
 wrapped again, if the field name stays long.
END_HEADER

  is(normal $head->as_string, $expect, 'rewrapping occurred as expected');
};

done_testing;