]> git.donarmstrong.com Git - perltidy.git/blobdiff - t/snippets21.t
New upstream version 20210717
[perltidy.git] / t / snippets21.t
diff --git a/t/snippets21.t b/t/snippets21.t
new file mode 100644 (file)
index 0000000..3ed043e
--- /dev/null
@@ -0,0 +1,865 @@
+# Created with: ./make_t.pl
+
+# Contents:
+#1 lop.lop
+#2 switch_plain.def
+#3 switch_plain.switch_plain
+#4 sot.def
+#5 sot.sot
+#6 prune.def
+#7 align33.def
+#8 gnu7.def
+#9 gnu7.gnu
+#10 git33.def
+#11 git33.git33
+#12 rt133130.def
+#13 rt133130.rt133130
+#14 nib.def
+#15 nib.nib1
+#16 nib.nib2
+#17 scbb-csc.def
+#18 scbb-csc.scbb-csc
+#19 here_long.def
+
+# To locate test #13 you can search for its name or the string '#13'
+
+use strict;
+use Test::More;
+use Carp;
+use Perl::Tidy;
+my $rparams;
+my $rsources;
+my $rtests;
+
+BEGIN {
+
+    ###########################################
+    # BEGIN SECTION 1: Parameter combinations #
+    ###########################################
+    $rparams = {
+        'def'   => "",
+        'git33' => <<'----------',
+-wls='->' -wrs='->'
+
+----------
+        'gnu'  => "-gnu",
+        'lop'  => "-nlop",
+        'nib1' => "-nnib",
+        'nib2' => <<'----------',
+-nib -nibp='#\+\+'
+----------
+        'rt133130' => <<'----------',
+# only the method should get a csc:
+-csc -cscl=sub -sal=method
+----------
+        'scbb-csc'     => "-scbb -csc",
+        'sot'          => "-sot -sct",
+        'switch_plain' => "-nola",
+    };
+
+    ############################
+    # BEGIN SECTION 2: Sources #
+    ############################
+    $rsources = {
+
+        'align33' => <<'----------',
+$wl  = int( $wl * $f + .5 );
+$wr  = int( $wr * $f + .5 );
+$pag = int( $pageh * $f + .5 );
+$fe  = $opt_F ? "t" : "f";
+$cf  = $opt_U ? "t" : "f";
+$tp  = $opt_t ? "t" : "f";
+$rm  = $numbstyle ? "t" : "f";
+$pa = $showurl   ? "t" : "f";
+$nh = $seq_number ? "t" : "f";
+----------
+
+        'git33' => <<'----------',
+# test -wls='->' -wrs='->'
+use Net::Ping;
+my ($ping) = Net::Ping->new();
+$ping->ping($host);
+
+----------
+
+        'gnu7' => <<'----------',
+# hanging side comments
+if ( $seen == 1 ) {    # We're the first word so far to have
+    # this abbreviation.
+    $hashref->{$abbrev} = $word;
+}
+elsif ( $seen == 2 ) {    # We're the second word to have this
+    # abbreviation, so we can't use it.
+    delete $hashref->{$abbrev};
+}
+else {                    # We're the third word to have this
+    # abbreviation, so skip to the next word.
+    next WORD;
+}
+----------
+
+        'here_long' => <<'----------',
+# must not break after here target regardless of maximum-line-length
+$sth= $dbh->prepare (<<"END_OF_SELECT") or die "Couldn't prepare SQL" ;
+    SELECT COUNT(duration),SUM(duration) 
+    FROM logins WHERE username='$user'
+END_OF_SELECT
+
+----------
+
+        'lop' => <<'----------',
+# logical padding examples
+$same =
+  (      ( $aP eq $bP )
+      && ( $aS eq $bS )
+      && ( $aT eq $bT )
+      && ( $a->{'title'} eq $b->{'title'} )
+      && ( $a->{'href'} eq $b->{'href'} ) );
+
+$bits =
+    $top > 0xffff ? 32
+  : $top > 0xff   ? 16
+  : $top > 1      ? 8
+  :                 1;
+
+lc( $self->mime_attr('content-type')
+        || $self->{MIH_DefaultType}
+        || 'text/plain' );
+
+# Padding can also remove spaces; here the space after the '(' is lost:
+elsif ( $statement_type =~ /^sub\b/
+    || $paren_type[$paren_depth] =~ /^sub\b/ )
+----------
+
+        'nib' => <<'----------',
+{    #<<<
+{    #<<<
+{    #++
+    print "hello world\n";
+}
+}
+}
+
+{    #++
+    {    #++
+        {    #<<<
+        print "hello world\n";
+        }
+    }
+}
+
+----------
+
+        'prune' => <<'----------',
+# some tests for 'sub prune_alignment_tree'
+
+$request->header( 'User-Agent' => $agent )              if $agent;
+$request->header( 'From'       => $from )               if $from;
+$request->header( 'Range'      => "bytes=0-$max_size" ) if $max_size;
+
+for (
+    [ 'CONSTANT', sub { join "foo", "bar" },         0, "bar" ],
+    [ 'CONSTANT', sub { join "foo", "bar", 3 },      1, "barfoo3" ],
+    [ '$var',     sub { join $_, "bar" },            0, "bar" ],
+    [ '$myvar',   sub { my $var; join $var, "bar" }, 0, "bar" ],
+);
+
+[
+    [ [NewXSHdr],     [ NewXSName, NewXSArgs ],            "XSHdr" ],
+    [ [NewXSCHdrs],   [ NewXSName, NewXSArgs, GlobalNew ], "XSCHdrs" ],
+    [ [DefSyms],      [StructName],                        "MkDefSyms" ],
+    [ [NewXSSymTab],  [ DefSyms, NewXSArgs ],              "AddArgsyms" ],
+    [ [NewXSLocals],  [NewXSSymTab],                       "Sym2Loc" ],
+    [ [IsAffineFlag], [],                                  sub { return "0" } ],
+];
+
+@degen_nums[ 1, 2, 4, 8 ]         = ( 'a', 'c', 'g', 't' );
+@degen_nums[ 5, 10, 9, 6, 3, 12 ] = ( 'r', 'y', 'w', 's', 'm', 'k' );
+@degen_nums[ 14, 13, 11, 7, 15 ]  = ( 'b', 'd', 'h', 'v', 'n' );
+
+$_CreateFile   = ff( "k32", "CreateFile",   [ P, N, N, N, N, N, N ], N );
+$_CloseHandle  = ff( "k32", "CloseHandle",  [N],                     N );
+$_GetCommState = ff( "k32", "GetCommState", [ N, P ],                I );
+$_SetCommState = ff( "k32", "SetCommState", [ N, P ],                I );
+$_SetupComm    = ff( "k32", "SetupComm",    [ N, N, N ],             I );
+$_PurgeComm    = ff( "k32", "PurgeComm",    [ N, N ],                I );
+$_CreateEvent  = ff( "k32", "CreateEvent",  [ P, I, I, P ],          N );
+
+
+is_deeply \@t, [
+
+ [3],  [0],  [1],  [0],
+ 3,   [1],  3,   [1],
+ 2,   [0],  [1],  [0],
+ [1],  [1],  [1],  2,
+ 3,   [1],  2,   [3],
+ 4,   [ 7, 8 ],  9,   ["a"],
+ "b",  3,   2,   5,
+ 3,   2,   5,   3,
+  [2],    5,      4,      5,
+  [ 3, 2, 1 ],  1,      2,      3,
+  [ -1, -2, -3 ], [ -1, -2, -3 ], [ -1, -2, -3 ], [ -1, -2 ],
+  3,      [ -1, -2 ],   3,      [ -1, -2, -3 ],
+  [ !1 ],   [ 8, 7, 6 ],  [ 8, 7, 6 ],  [4],
+  !!0,
+];
+----------
+
+        'rt133130' => <<'----------',
+method sum_radlinks {
+    my ( $global_radiation_matrix, $local_radiation_matrix, $rngg ) = @_;
+    my ( $i, $j, $n1, $n2, $num );
+    my $rggij;
+    $num = @$rngg;
+    for ( $i = 0 ; $i < $num ; $i++ ) {
+        $n1 = $rngg->[$i];
+        for ( $j = 0 ; $j < $num ; $j++ ) {
+            $n2    = $rngg->[$j];
+            $rggij = $local_radiation_matrix->[$i][$j];
+            if ( $rggij && ( $n1 != $n2 ) ) {
+                $global_radiation_matrix->[$n1][$n2] += $rggij;
+            }
+        }
+    }
+}
+----------
+
+        'scbb-csc' => <<'----------',
+sub perlmod_install_advice
+{
+my(@mod) = @_;
+if ($auto_install_cpan) {
+require AutoInstall::Tk;
+my $r = AutoInstall::Tk::do_autoinstall_tk(@mod);
+if ($r > 0) {
+for my $mod (@mod) {
+warn "Re-require $mod...\n";
+eval "require $mod";
+die __LINE__ . ": $@" if $@;
+}}
+} 
+else {
+my $shell = ($os eq 'win' ? M"Eingabeaufforderung" : M"Shell");
+status_message
+(
+Mfmt(
+(
+@mod > 1
+? "Die fehlenden Perl-Module können aus der %s mit dem Kommando\n"
+: "Das fehlende Perl-Modul kann aus der %s mit dem Kommando\n"
+),
+$shell
+)
+.
+"    perl -MCPAN -e \"install " . join(", ", @mod) . "\"\n" .
+"aus dem Internet geholt und installiert werden.\n",
+"err"
+);
+} 
+} 
+
+----------
+
+        'sot' => <<'----------',
+$opt_c = Text::CSV_XS->new(
+{
+    binary       => 1, sep_char     => $opt_c, always_quote => 1,
+}
+);
+
+$c->Tk::bind(
+'<Control-f>' => sub {
+my ($c) = @_;
+my $e = $c->XEvent;
+itemsUnderArea $c;
+} );
+
+__PACKAGE__->load_components( qw(
+PK::Auto
+Core
+) );
+----------
+
+        'switch_plain' => <<'----------',
+# run with -nola to keep default from outdenting
+use Switch::Plain;
+my $r = 'fail';
+my $x = int rand 100_000;
+nswitch (1 + $x * 2) {
+    case $x: {}
+    default: {
+        $r = 'ok';
+    }
+}
+
+my @words = qw(cinnamon ginger nutmeg cloves);
+my $test = 1;
+$r = $test
+  ? do {
+    sswitch( $words[ rand @words ] ) {
+        case $words[0]:
+        case $words[1]:
+        case $words[2]:
+        case $words[3]: { 'ok' }
+      default: { 'default case' }
+    }
+  }
+  : 'not ok';
+----------
+    };
+
+    ####################################
+    # BEGIN SECTION 3: Expected output #
+    ####################################
+    $rtests = {
+
+        'lop.lop' => {
+            source => "lop",
+            params => "lop",
+            expect => <<'#1...........',
+# logical padding examples
+$same =
+  ( ( $aP eq $bP )
+      && ( $aS eq $bS )
+      && ( $aT eq $bT )
+      && ( $a->{'title'} eq $b->{'title'} )
+      && ( $a->{'href'} eq $b->{'href'} ) );
+
+$bits =
+  $top > 0xffff ? 32
+  : $top > 0xff ? 16
+  : $top > 1    ? 8
+  :               1;
+
+lc( $self->mime_attr('content-type')
+      || $self->{MIH_DefaultType}
+      || 'text/plain' );
+
+# Padding can also remove spaces; here the space after the '(' is lost:
+elsif ( $statement_type =~ /^sub\b/
+    || $paren_type[$paren_depth] =~ /^sub\b/ )
+#1...........
+        },
+
+        'switch_plain.def' => {
+            source => "switch_plain",
+            params => "def",
+            expect => <<'#2...........',
+# run with -nola to keep default from outdenting
+use Switch::Plain;
+my $r = 'fail';
+my $x = int rand 100_000;
+nswitch( 1 + $x * 2 ) {
+    case $x: { }
+  default: {
+        $r = 'ok';
+    }
+}
+
+my @words = qw(cinnamon ginger nutmeg cloves);
+my $test  = 1;
+$r = $test
+  ? do {
+    sswitch( $words[ rand @words ] ) {
+        case $words[0]:
+        case $words[1]:
+        case $words[2]:
+        case $words[3]: { 'ok' }
+      default: { 'default case' }
+    }
+  }
+  : 'not ok';
+#2...........
+        },
+
+        'switch_plain.switch_plain' => {
+            source => "switch_plain",
+            params => "switch_plain",
+            expect => <<'#3...........',
+# run with -nola to keep default from outdenting
+use Switch::Plain;
+my $r = 'fail';
+my $x = int rand 100_000;
+nswitch( 1 + $x * 2 ) {
+    case $x: { }
+    default: {
+        $r = 'ok';
+    }
+}
+
+my @words = qw(cinnamon ginger nutmeg cloves);
+my $test  = 1;
+$r = $test
+  ? do {
+    sswitch( $words[ rand @words ] ) {
+        case $words[0]:
+        case $words[1]:
+        case $words[2]:
+        case $words[3]: { 'ok' }
+        default: { 'default case' }
+    }
+  }
+  : 'not ok';
+#3...........
+        },
+
+        'sot.def' => {
+            source => "sot",
+            params => "def",
+            expect => <<'#4...........',
+$opt_c = Text::CSV_XS->new(
+    {
+        binary       => 1,
+        sep_char     => $opt_c,
+        always_quote => 1,
+    }
+);
+
+$c->Tk::bind(
+    '<Control-f>' => sub {
+        my ($c) = @_;
+        my $e = $c->XEvent;
+        itemsUnderArea $c;
+    }
+);
+
+__PACKAGE__->load_components(
+    qw(
+      PK::Auto
+      Core
+    )
+);
+#4...........
+        },
+
+        'sot.sot' => {
+            source => "sot",
+            params => "sot",
+            expect => <<'#5...........',
+$opt_c = Text::CSV_XS->new( {
+    binary       => 1,
+    sep_char     => $opt_c,
+    always_quote => 1,
+} );
+
+$c->Tk::bind(
+    '<Control-f>' => sub {
+        my ($c) = @_;
+        my $e = $c->XEvent;
+        itemsUnderArea $c;
+    } );
+
+__PACKAGE__->load_components( qw(
+      PK::Auto
+      Core
+) );
+#5...........
+        },
+
+        'prune.def' => {
+            source => "prune",
+            params => "def",
+            expect => <<'#6...........',
+# some tests for 'sub prune_alignment_tree'
+
+$request->header( 'User-Agent' => $agent )              if $agent;
+$request->header( 'From'       => $from )               if $from;
+$request->header( 'Range'      => "bytes=0-$max_size" ) if $max_size;
+
+for (
+    [ 'CONSTANT', sub { join "foo", "bar" },         0, "bar" ],
+    [ 'CONSTANT', sub { join "foo", "bar", 3 },      1, "barfoo3" ],
+    [ '$var',     sub { join $_, "bar" },            0, "bar" ],
+    [ '$myvar',   sub { my $var; join $var, "bar" }, 0, "bar" ],
+);
+
+[
+    [ [NewXSHdr],     [ NewXSName, NewXSArgs ],            "XSHdr" ],
+    [ [NewXSCHdrs],   [ NewXSName, NewXSArgs, GlobalNew ], "XSCHdrs" ],
+    [ [DefSyms],      [StructName],                        "MkDefSyms" ],
+    [ [NewXSSymTab],  [ DefSyms, NewXSArgs ],              "AddArgsyms" ],
+    [ [NewXSLocals],  [NewXSSymTab],                       "Sym2Loc" ],
+    [ [IsAffineFlag], [],                                  sub { return "0" } ],
+];
+
+@degen_nums[ 1, 2, 4, 8 ]         = ( 'a', 'c', 'g', 't' );
+@degen_nums[ 5, 10, 9, 6, 3, 12 ] = ( 'r', 'y', 'w', 's', 'm', 'k' );
+@degen_nums[ 14, 13, 11, 7, 15 ]  = ( 'b', 'd', 'h', 'v', 'n' );
+
+$_CreateFile   = ff( "k32", "CreateFile",   [ P, N, N, N, N, N, N ], N );
+$_CloseHandle  = ff( "k32", "CloseHandle",  [N],                     N );
+$_GetCommState = ff( "k32", "GetCommState", [ N, P ],                I );
+$_SetCommState = ff( "k32", "SetCommState", [ N, P ],                I );
+$_SetupComm    = ff( "k32", "SetupComm",    [ N, N, N ],             I );
+$_PurgeComm    = ff( "k32", "PurgeComm",    [ N, N ],                I );
+$_CreateEvent  = ff( "k32", "CreateEvent",  [ P, I, I, P ],          N );
+
+is_deeply \@t, [
+
+    [3],            [0],            [1],            [0],
+    3,              [1],            3,              [1],
+    2,              [0],            [1],            [0],
+    [1],            [1],            [1],            2,
+    3,              [1],            2,              [3],
+    4,              [ 7, 8 ],       9,              ["a"],
+    "b",            3,              2,              5,
+    3,              2,              5,              3,
+    [2],            5,              4,              5,
+    [ 3, 2, 1 ],    1,              2,              3,
+    [ -1, -2, -3 ], [ -1, -2, -3 ], [ -1, -2, -3 ], [ -1, -2 ],
+    3,              [ -1, -2 ],     3,              [ -1, -2, -3 ],
+    [ !1 ],         [ 8, 7, 6 ],    [ 8, 7, 6 ],    [4],
+    !!0,
+];
+#6...........
+        },
+
+        'align33.def' => {
+            source => "align33",
+            params => "def",
+            expect => <<'#7...........',
+$wl  = int( $wl * $f + .5 );
+$wr  = int( $wr * $f + .5 );
+$pag = int( $pageh * $f + .5 );
+$fe  = $opt_F      ? "t" : "f";
+$cf  = $opt_U      ? "t" : "f";
+$tp  = $opt_t      ? "t" : "f";
+$rm  = $numbstyle  ? "t" : "f";
+$pa  = $showurl    ? "t" : "f";
+$nh  = $seq_number ? "t" : "f";
+#7...........
+        },
+
+        'gnu7.def' => {
+            source => "gnu7",
+            params => "def",
+            expect => <<'#8...........',
+# hanging side comments
+if ( $seen == 1 ) {    # We're the first word so far to have
+                       # this abbreviation.
+    $hashref->{$abbrev} = $word;
+}
+elsif ( $seen == 2 ) {    # We're the second word to have this
+                          # abbreviation, so we can't use it.
+    delete $hashref->{$abbrev};
+}
+else {    # We're the third word to have this
+          # abbreviation, so skip to the next word.
+    next WORD;
+}
+#8...........
+        },
+
+        'gnu7.gnu' => {
+            source => "gnu7",
+            params => "gnu",
+            expect => <<'#9...........',
+# hanging side comments
+if ($seen == 1)
+{    # We're the first word so far to have
+     # this abbreviation.
+    $hashref->{$abbrev} = $word;
+}
+elsif ($seen == 2)
+{    # We're the second word to have this
+     # abbreviation, so we can't use it.
+    delete $hashref->{$abbrev};
+}
+else
+{    # We're the third word to have this
+     # abbreviation, so skip to the next word.
+    next WORD;
+}
+#9...........
+        },
+
+        'git33.def' => {
+            source => "git33",
+            params => "def",
+            expect => <<'#10...........',
+# test -wls='->' -wrs='->'
+use Net::Ping;
+my ($ping) = Net::Ping->new();
+$ping->ping($host);
+
+#10...........
+        },
+
+        'git33.git33' => {
+            source => "git33",
+            params => "git33",
+            expect => <<'#11...........',
+# test -wls='->' -wrs='->'
+use Net::Ping;
+my ($ping) = Net::Ping -> new();
+$ping -> ping($host);
+
+#11...........
+        },
+
+        'rt133130.def' => {
+            source => "rt133130",
+            params => "def",
+            expect => <<'#12...........',
+method sum_radlinks {
+    my ( $global_radiation_matrix, $local_radiation_matrix, $rngg ) = @_;
+    my ( $i, $j, $n1, $n2, $num );
+    my $rggij;
+    $num = @$rngg;
+    for ( $i = 0 ; $i < $num ; $i++ ) {
+        $n1 = $rngg->[$i];
+        for ( $j = 0 ; $j < $num ; $j++ ) {
+            $n2    = $rngg->[$j];
+            $rggij = $local_radiation_matrix->[$i][$j];
+            if ( $rggij && ( $n1 != $n2 ) ) {
+                $global_radiation_matrix->[$n1][$n2] += $rggij;
+            }
+        }
+    }
+}
+#12...........
+        },
+
+        'rt133130.rt133130' => {
+            source => "rt133130",
+            params => "rt133130",
+            expect => <<'#13...........',
+method sum_radlinks {
+    my ( $global_radiation_matrix, $local_radiation_matrix, $rngg ) = @_;
+    my ( $i, $j, $n1, $n2, $num );
+    my $rggij;
+    $num = @$rngg;
+    for ( $i = 0 ; $i < $num ; $i++ ) {
+        $n1 = $rngg->[$i];
+        for ( $j = 0 ; $j < $num ; $j++ ) {
+            $n2    = $rngg->[$j];
+            $rggij = $local_radiation_matrix->[$i][$j];
+            if ( $rggij && ( $n1 != $n2 ) ) {
+                $global_radiation_matrix->[$n1][$n2] += $rggij;
+            }
+        }
+    }
+} ## end sub sum_radlinks
+#13...........
+        },
+
+        'nib.def' => {
+            source => "nib",
+            params => "def",
+            expect => <<'#14...........',
+{ #<<<
+{ #<<<
+{    #++
+    print "hello world\n";
+}
+}
+}
+
+{    #++
+    {    #++
+        { #<<<
+        print "hello world\n";
+        }
+    }
+}
+
+#14...........
+        },
+
+        'nib.nib1' => {
+            source => "nib",
+            params => "nib1",
+            expect => <<'#15...........',
+{    #<<<
+    {    #<<<
+        {    #++
+            print "hello world\n";
+        }
+    }
+}
+
+{    #++
+    {    #++
+        {    #<<<
+            print "hello world\n";
+        }
+    }
+}
+
+#15...........
+        },
+
+        'nib.nib2' => {
+            source => "nib",
+            params => "nib2",
+            expect => <<'#16...........',
+{    #<<<
+    {    #<<<
+        { #++
+        print "hello world\n";
+        }
+    }
+}
+
+{ #++
+{ #++
+{    #<<<
+    print "hello world\n";
+}
+}
+}
+
+#16...........
+        },
+
+        'scbb-csc.def' => {
+            source => "scbb-csc",
+            params => "def",
+            expect => <<'#17...........',
+sub perlmod_install_advice {
+    my (@mod) = @_;
+    if ($auto_install_cpan) {
+        require AutoInstall::Tk;
+        my $r = AutoInstall::Tk::do_autoinstall_tk(@mod);
+        if ( $r > 0 ) {
+            for my $mod (@mod) {
+                warn "Re-require $mod...\n";
+                eval "require $mod";
+                die __LINE__ . ": $@" if $@;
+            }
+        }
+    }
+    else {
+        my $shell = ( $os eq 'win' ? M "Eingabeaufforderung" : M "Shell" );
+        status_message(
+            Mfmt(
+                (
+                    @mod > 1
+                    ? "Die fehlenden Perl-Module können aus der %s mit dem Kommando\n"
+                    : "Das fehlende Perl-Modul kann aus der %s mit dem Kommando\n"
+                ),
+                $shell
+              )
+              . "    perl -MCPAN -e \"install "
+              . join( ", ", @mod ) . "\"\n"
+              . "aus dem Internet geholt und installiert werden.\n",
+            "err"
+        );
+    }
+}
+
+#17...........
+        },
+
+        'scbb-csc.scbb-csc' => {
+            source => "scbb-csc",
+            params => "scbb-csc",
+            expect => <<'#18...........',
+sub perlmod_install_advice {
+    my (@mod) = @_;
+    if ($auto_install_cpan) {
+        require AutoInstall::Tk;
+        my $r = AutoInstall::Tk::do_autoinstall_tk(@mod);
+        if ( $r > 0 ) {
+            for my $mod (@mod) {
+                warn "Re-require $mod...\n";
+                eval "require $mod";
+                die __LINE__ . ": $@" if $@;
+            }
+        } ## end if ( $r > 0 )
+    } ## end if ($auto_install_cpan)
+    else {
+        my $shell = ( $os eq 'win' ? M "Eingabeaufforderung" : M "Shell" );
+        status_message(
+            Mfmt(
+                (
+                    @mod > 1
+                    ? "Die fehlenden Perl-Module können aus der %s mit dem Kommando\n"
+                    : "Das fehlende Perl-Modul kann aus der %s mit dem Kommando\n"
+                ),
+                $shell
+              )
+              . "    perl -MCPAN -e \"install "
+              . join( ", ", @mod ) . "\"\n"
+              . "aus dem Internet geholt und installiert werden.\n",
+            "err"
+        );
+    } ## end else [ if ($auto_install_cpan)]
+} ## end sub perlmod_install_advice
+
+#18...........
+        },
+
+        'here_long.def' => {
+            source => "here_long",
+            params => "def",
+            expect => <<'#19...........',
+# must not break after here target regardless of maximum-line-length
+$sth = $dbh->prepare(<<"END_OF_SELECT") or die "Couldn't prepare SQL";
+    SELECT COUNT(duration),SUM(duration) 
+    FROM logins WHERE username='$user'
+END_OF_SELECT
+
+#19...........
+        },
+    };
+
+    my $ntests = 0 + keys %{$rtests};
+    plan tests => $ntests;
+}
+
+###############
+# EXECUTE TESTS
+###############
+
+foreach my $key ( sort keys %{$rtests} ) {
+    my $output;
+    my $sname  = $rtests->{$key}->{source};
+    my $expect = $rtests->{$key}->{expect};
+    my $pname  = $rtests->{$key}->{params};
+    my $source = $rsources->{$sname};
+    my $params = defined($pname) ? $rparams->{$pname} : "";
+    my $stderr_string;
+    my $errorfile_string;
+    my $err = Perl::Tidy::perltidy(
+        source      => \$source,
+        destination => \$output,
+        perltidyrc  => \$params,
+        argv        => '',             # for safety; hide any ARGV from perltidy
+        stderr      => \$stderr_string,
+        errorfile   => \$errorfile_string,    # not used when -se flag is set
+    );
+    if ( $err || $stderr_string || $errorfile_string ) {
+        print STDERR "Error output received for test '$key'\n";
+        if ($err) {
+            print STDERR "An error flag '$err' was returned\n";
+            ok( !$err );
+        }
+        if ($stderr_string) {
+            print STDERR "---------------------\n";
+            print STDERR "<<STDERR>>\n$stderr_string\n";
+            print STDERR "---------------------\n";
+            ok( !$stderr_string );
+        }
+        if ($errorfile_string) {
+            print STDERR "---------------------\n";
+            print STDERR "<<.ERR file>>\n$errorfile_string\n";
+            print STDERR "---------------------\n";
+            ok( !$errorfile_string );
+        }
+    }
+    else {
+        if ( !is( $output, $expect, $key ) ) {
+            my $leno = length($output);
+            my $lene = length($expect);
+            if ( $leno == $lene ) {
+                print STDERR
+"#> Test '$key' gave unexpected output.  Strings differ but both have length $leno\n";
+            }
+            else {
+                print STDERR
+"#> Test '$key' gave unexpected output.  String lengths differ: output=$leno, expected=$lene\n";
+            }
+        }
+    }
+}