-
Notifications
You must be signed in to change notification settings - Fork 135
/
heredocs.t
151 lines (117 loc) · 2.83 KB
/
heredocs.t
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
use Test;
plan 17;
my $foo = "FOO";
my $bar = "BAR";
sub no-r(Str $in) { $in.subst(/\r/, '', :g) }
# L<S02/Heredocs/Heredocs are no longer written>
{ # qq:to
my @q = ();
@q = qq:to/FOO/;
blah
$bar
blah
$foo
FOO
is(+@q, 1, "q:to// is singular");
is(no-r(@q[0]), "blah\nBAR\nblah\nFOO\n", "here doc interpolated");
};
{ # qq:to
my @q = ();
@q = qq:to/FOO/;
blah
$bar
blah
$foo
FOO
is(no-r(@q[0]), "blah\nBAR\nblah\nFOO\n", "here doc interpolating with indentation");
};
# L<S02/Optional whitespace/Heredocs allow optional whitespace>
{ # q:to indented
my @q = ();
@q = q:to/FOO/;
blah blah
$foo
FOO
is(+@q, 1, "q:to// is singular, also when indented");
is(no-r(@q[0]), "blah blah\n\$foo\n", "indentation stripped");
};
{ # q:heredoc backslash bug
my @q = q:heredoc/FOO/
yoink\n
splort\\n
FOO
;
is(+@q, 1, "q:heredoc// is singular");
is(no-r(@q[0]), "yoink\\n\nsplort\\n\n", "backslashes");
}
my $multiline = "Hello\nWorld";
# some dedent tests
{
my @q = qq:to/END/;
first line
$multiline
another line
END
is no-r(@q[0]), "first line\nHello\nWorld\nanother line\n", "indent with multiline interpolation";
}
$multiline = "Hello\n World";
{
my @q = qq:to/END/;
first line
$multiline
another line
END
is no-r(@q[0]), "first line\nHello\n World\nanother line\n", "indent with multiline interpolation with spaces at the beginning";
}
{
my @q = qq:to/END/;
first line
$multiline something
another line
END
is no-r(@q[0]), "first line\nHello\n World something\nanother line\n", "extra spaces after interpolation will be kept";
}
{
my ($one, $two) = <foo bar>;
my @q = qq:to/END/;
{$one}{$two}
stuff
END
is no-r(@q[0]), "foobar\nstuff\n", "interpolations without constant strings in the middle";
my @q2 = qq:to/END/;
stuff
{$one}{$two}
END
is no-r(@q2[0]), "stuff\nfoobar\n", "interpolations at the very end";
my @q3 = qq:to/END/;
line one
line two
$one
END
is no-r(@q3[0]), "line one\n\nline two\n\nfoo\n", "empty lines";
}
{
my @q = qq:to/END/;
stuff
stuff
END
is no-r(@q[0]), "stuff\nstuff\n", "Tabs get correctly removed";
my @q2 = qq:to/END/;
stuff
barfoo
END
is no-r(@q2[0]), "stuff\nbarfoo\n", "mixed tabs and spaces get correctly removed";
my @q3 = qq:to/END/;
line one
line two
END
is no-r(@q3[0]), "line one\nline two\n", "mixing tabs and spaces even more evil-ly";
}
# RT #117853
{
constant TEXT = q :to 'END';
Hello world
:)
END
is no-r(TEXT), "Hello world\n:)\n", "Constant heredocs work";
}