This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
[Merge] New PADLIST type
[perl5.git] / t / op / heredoc.t
CommitLineData
c8e9f72f 1# tests for heredocs besides what is tested in base/lex.t
c49688b0 2
c8e9f72f
DN
3BEGIN {
4 chdir 't' if -d 't';
5 @INC = '../lib';
6 require './test.pl';
7}
8
c49688b0 9use strict;
112d1284 10plan(tests => 7);
c49688b0
MS
11
12
13# heredoc without newline (#65838)
14{
15 my $string = <<'HEREDOC';
c8e9f72f
DN
16testing for 65838
17HEREDOC
c8e9f72f 18
c49688b0
MS
19 my $code = "<<'HEREDOC';\n${string}HEREDOC"; # HD w/o newline, in eval-string
20 my $hd = eval $code or warn "$@ ---";
21 is($hd, $string, "no terminating newline in string-eval");
22}
23
24
25# here-doc edge cases
26{
27 my $string = "testing for 65838";
28
29 fresh_perl_is(
30 "print <<'HEREDOC';\n${string}\nHEREDOC",
31 $string,
32 {},
33 "heredoc at EOF without trailing newline"
34 );
35
36 fresh_perl_is(
37 "print <<;\n$string\n",
38 $string,
3f29db7f 39 { switches => ['-X'] },
c49688b0
MS
40 "blank-terminated heredoc at EOF"
41 );
112d1284
FC
42 fresh_perl_is(
43 "print <<\n$string\n",
44 $string,
45 { switches => ['-X'] },
46 "blank-terminated heredoc at EOF and no semicolon"
47 );
c8e9f72f 48}
c8e9f72f 49
c49688b0
MS
50
51# here-doc parse failures
52{
53 fresh_perl_like(
54 "print <<HEREDOC;\nwibble\n HEREDOC",
55 qr/find string terminator/,
56 {},
57 "string terminator must start at newline"
58 );
59
60 fresh_perl_like(
61 "print <<;\nno more newlines",
62 qr/find string terminator/,
3f29db7f 63 { switches => ['-X'] },
c49688b0
MS
64 "empty string terminator still needs a newline"
65 );
66
67 fresh_perl_like(
68 "print <<ThisTerminatorIsLongerThanTheData;\nno more newlines",
69 qr/find string terminator/,
70 {},
71 "long terminator fails correctly"
72 );
73}