File: fold_blocks.t

package info (click to toggle)
libmodule-compile-perl 0.38-3
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 332 kB
  • sloc: perl: 1,831; makefile: 2
file content (246 lines) | stat: -rw-r--r-- 2,892 bytes parent folder | download | duplicates (5)
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
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
use lib (-e 't' ? 't' : 'test'), 'inc';
use TestModuleCompile tests => 9;

filters({ perl => 'process' });

no_diff;
run_is perl => 'folded';

sub process { Module::Compile->pmc_fold_blocks(shift) }

__DATA__

=== Fold a heredoc whilst preserving ~s
--- perl
my $x = "~ ~~ ~~~ ~~~~ ~~~~~";

sub foo {
    my $self = shift;
    $self->baz(<<END);
sub bar {
    print "bar";
} 
END
}

--- folded
my $x = "~ ~~ ~~~ ~~~~ ~~~~~";

sub foo {
    my $self = shift;
    $self->baz(<<END);
8dc957d71f448e926d28ebe8444d5b33c1d69dc2
END
}


=== Folded heredoc, ignoring <<=
--- perl
my $x = 1234;
$x <<= 3;
my $y = 4321;

sub foo {
    my $self = shift;
    $self->baz(<<END);
sub bar {
    print "bar";
} 
END
}

--- folded
my $x = 1234;
$x <<= 3;
my $y = 4321;

sub foo {
    my $self = shift;
    $self->baz(<<END);
8dc957d71f448e926d28ebe8444d5b33c1d69dc2
END
}


=== Empty string termination
--- perl
sub foo {
    my $self = shift;
    $self->baz(<<'');
sub bar {
    print "bar";
} 

}

--- folded
sub foo {
    my $self = shift;
    $self->baz(<<'');
8dc957d71f448e926d28ebe8444d5b33c1d69dc2

}


=== A double heredoc
--- perl
sub foo {
    my $self = shift;
    $self->baz(<<'THIS', <<"THAT");
THERE
THAT
THIS
THIS
THAT
THERE
}

--- folded
sub foo {
    my $self = shift;
    $self->baz(<<'THIS', <<"THAT");
fe5485c0595b48c3a4126af814e8d53517ecd1d8
THIS
5b35b1abf837461ac7f9b09d42f8560601b028f6
THAT
THERE
}

=== A double heredoc. Same END token
--- perl
sub foo {
    my $self = shift;
    $self->baz(<<END, <<END);
THERE
THAT
END
THIS
END
THERE
}

--- folded
sub foo {
    my $self = shift;
    $self->baz(<<END, <<END);
fe5485c0595b48c3a4126af814e8d53517ecd1d8
END
5b35b1abf837461ac7f9b09d42f8560601b028f6
END
THERE
}

=== A Heredoc inside Pod
--- perl
my $a = 1;

=head1 Stuffy Stuff

my $foo = <<END;

=cut

my $bar = <<END;
ONE
TWO
END
THREE

--- folded
my $a = 1;

=pod 6d44253d8e3ebb3bc202ea5a2585d542c7c3c57b
=cut

my $bar = <<END;
0a1177eb51a480f6ae3ff77264820e6068284b0f
END
THREE


=== A Heredoc inside comment block
--- perl
my $a = 1;

# my $foo = <<END;
# my $baz = <<END;

my $bar = <<END;
ONE
TWO
END
THREE

--- folded
my $a = 1;

# 04e1a5fcd227db0d2beed0a1dacadb4562451127

my $bar = <<END;
0a1177eb51a480f6ae3ff77264820e6068284b0f
END
THREE


=== Not a heredoc, but a literal "<<"
--- perl
(

    '<<'  => 
    '>>',

);
--- folded
(

    '<<'  => 
    '>>',

);
=== All kinds
--- perl
print "ok 1";

# $xxx = <<END;
# =head1 Hey1
# =cut
# __END__

=head1 Hey2
$xxx = <<END;
__END__
# comment
=cut

my $foo = <<'END';
__END__
$bar = <<BAR;
XXX
=head1 Hey3
=cut
END

print $foo;

__END__
$foo = <<FOO;
=head1 Hey4
# comment

--- folded
print "ok 1";

# 0aaf3d0e5f1c247fa72dd952df5728719b4f474e

=pod 401ec699fc81869e1c155a19c05ac9e9e622817b
=cut

my $foo = <<'END';
557737b9b1378f1b8ef45b92d739ddca273705f6
END

print $foo;

__DATA__
124fdf752349d6465bd0462bc8195df2ef333bc9