]> git.donarmstrong.com Git - perltidy.git/blobdiff - t/snippets4.t
New upstream version 20190601
[perltidy.git] / t / snippets4.t
diff --git a/t/snippets4.t b/t/snippets4.t
new file mode 100644 (file)
index 0000000..374e4c2
--- /dev/null
@@ -0,0 +1,573 @@
+# Created with: ./make_t.pl
+
+# Contents:
+#1 gnu1.gnu
+#2 gnu2.def
+#3 gnu2.gnu
+#4 gnu3.def
+#5 gnu3.gnu
+#6 gnu4.def
+#7 gnu4.gnu
+#8 hanging_side_comments1.def
+#9 hanging_side_comments2.def
+#10 hash1.def
+#11 hashbang.def
+#12 here1.def
+#13 html1.def
+#14 html1.html
+#15 ident1.def
+#16 if1.def
+#17 iscl1.def
+#18 iscl1.iscl
+#19 label1.def
+#20 lextest1.def
+
+# To locate test #13 you can search for its name or the string '#13'
+
+use strict;
+use Test;
+use Carp;
+use Perl::Tidy;
+my $rparams;
+my $rsources;
+my $rtests;
+
+BEGIN {
+
+    ###########################################
+    # BEGIN SECTION 1: Parameter combinations #
+    ###########################################
+    $rparams = {
+        'def'  => "",
+        'gnu'  => "-gnu",
+        'html' => <<'----------',
+-fmt="html"
+-nts
+----------
+        'iscl' => "-iscl",
+    };
+
+    ############################
+    # BEGIN SECTION 2: Sources #
+    ############################
+    $rsources = {
+
+        'gnu1' => <<'----------',
+@common_sometimes = (
+    "aclocal.m4", "acconfig.h", "config.h.top", "config.h.bot",
+    "stamp-h.in", 'stamp-vti'
+);
+----------
+
+        'gnu2' => <<'----------',
+$search_mb = $menu_bar->Menubutton(
+    '-text'        => 'Search',
+    '-relief'      => 'raised',
+    '-borderwidth' => 2,
+)->pack(
+    '-side' => 'left',
+    '-padx' => 2
+);
+----------
+
+        'gnu3' => <<'----------',
+$output_rules .= &file_contents_with_transform( 's/\@TEXI\@/' . $info_cursor . '/g; ' . 's/\@VTI\@/' . $vti . '/g; ' . 's/\@VTEXI\@/' . $vtexi . '/g;' . 's,\@MDDIR\@,' . $conf_pat . ',g;', 'texi-vers');
+----------
+
+        'gnu4' => <<'----------',
+my $mzef = Bio::Tools::MZEF->new( '-file' => Bio::Root::IO->catfile("t", "genomic-seq.mzef"));
+----------
+
+        'hanging_side_comments1' => <<'----------',
+$valuestr .= $value . " " ;    # with a trailing space in case there are multiple values
+   # for this tag (allowed in GFF2 and .ace format)
+----------
+
+        'hanging_side_comments2' => <<'----------',
+# keep '=' lined up even with hanging side comments
+$ax=1;# side comment
+ # hanging side comment
+$boondoggle=5;# side comment
+$beetle=5;# side comment
+ # hanging side comment
+$d=3;
+----------
+
+        'hash1' => <<'----------',
+%TV=(flintstones=>{series=>"flintstones",nights=>[qw(monday thursday friday)],
+members=>[{name=>"fred",role=>"lead",age=>36,},{name=>"wilma",role=>"wife",
+age=>31,},{name=>"pebbles",role=>"kid",age=>4,},],},jetsons=>{series=>"jetsons",
+nights=>[qw(wednesday saturday)],members=>[{name=>"george",role=>"lead",age=>41,
+},{name=>"jane",role=>"wife",age=>39,},{name=>"elroy",role=>"kid",age=>9,},],},
+simpsons=>{series=>"simpsons",nights=>[qw(monday)],members=>[{name=>"homer",
+role=>"lead",age=>34,},{name=>"marge",role=>"wife",age=>37,},{name=>"bart",
+role=>"kid",age=>11,},],},);
+----------
+
+        'hashbang' => <<'----------',
+#!/usr/bin/perl
+----------
+
+        'here1' => <<'----------',
+is( <<~`END`, "ok\n", '<<~`HEREDOC`' );
+  $Perl -le "print 'ok'"
+  END
+----------
+
+        'html1' => <<'----------',
+if   ( $editlblk eq 1 ) { $editlblk = "on";  $editlblkchecked = "checked" }
+else                    { $editlblk = "off"; $editlblkchecked = "unchecked" }
+----------
+
+        'ident1' => <<'----------',
+package A;
+sub new  {
+   print "A::new! $_[0] $_[1]\n";
+   return 1;
+}
+package main;
+my $scanner = new A::() ;
+$scanner = new A::;
+$scanner = new A 'a';
+----------
+
+        'if1' => <<'----------',
+# one-line blocks
+if ( $editlblk eq 1 ) { $editlblk = "on"; $editlblkchecked = "checked" }
+else { $editlblk = "off"; $editlblkchecked = "unchecked" }
+----------
+
+        'iscl1' => <<'----------',
+       # -iscl will not allow alignment of hanging side comments (currently)
+        $gsmatch = ( $sub >= 50 ) ? "equal" : "lequal"; # Force an equal match for
+               # dev, but be more forgiving
+               # for releases
+----------
+
+        'label1' => <<'----------',
+INIT : { 
+$a++;
+print "looping with label INIT:, a=$a\n";
+  if ($a<10) {goto INIT}
+}
+package: {
+    print "hello!\n";
+}
+sub: {
+    print "hello!\n";
+}
+----------
+
+        'lextest1' => <<'----------',
+$_= <<'EOL';
+   $url = new URI::URL "http://www/";   die if $url eq "xXx";
+EOL
+LOOP:{print(" digits"),redo LOOP if/\G\d+\b[,.;]?\s*/gc;print(" lowercase"),
+redo LOOP if/\G[a-z]+\b[,.;]?\s*/gc;print(" UPPERCASE"), redo 
+LOOP if/\G[A-Z]+\b[,.;]?\s*/gc;print(" Capitalized"),
+redo LOOP if/\G[A-Z][a-z]+\b[,.;]?\s*/gc;
+print(" MiXeD"),redo LOOP if/\G[A-Za-z]+\b[,.;]?\s*/gc;print(
+" alphanumeric"),redo LOOP if/\G[A-Za-z0-9]+\b[,.;]?\s*/gc;print(" line-noise"
+),redo LOOP if/\G[^A-Za-z0-9]+/gc;print". That's all!\n";}
+----------
+    };
+
+    ####################################
+    # BEGIN SECTION 3: Expected output #
+    ####################################
+    $rtests = {
+
+        'gnu1.gnu' => {
+            source => "gnu1",
+            params => "gnu",
+            expect => <<'#1...........',
+@common_sometimes = (
+                     "aclocal.m4",   "acconfig.h",
+                     "config.h.top", "config.h.bot",
+                     "stamp-h.in",   'stamp-vti'
+                    );
+#1...........
+        },
+
+        'gnu2.def' => {
+            source => "gnu2",
+            params => "def",
+            expect => <<'#2...........',
+$search_mb = $menu_bar->Menubutton(
+    '-text'        => 'Search',
+    '-relief'      => 'raised',
+    '-borderwidth' => 2,
+)->pack(
+    '-side' => 'left',
+    '-padx' => 2
+);
+#2...........
+        },
+
+        'gnu2.gnu' => {
+            source => "gnu2",
+            params => "gnu",
+            expect => <<'#3...........',
+$search_mb = $menu_bar->Menubutton(
+                                   '-text'        => 'Search',
+                                   '-relief'      => 'raised',
+                                   '-borderwidth' => 2,
+  )->pack('-side' => 'left',
+          '-padx' => 2);
+#3...........
+        },
+
+        'gnu3.def' => {
+            source => "gnu3",
+            params => "def",
+            expect => <<'#4...........',
+$output_rules .= &file_contents_with_transform(
+    's/\@TEXI\@/'
+      . $info_cursor . '/g; '
+      . 's/\@VTI\@/'
+      . $vti . '/g; '
+      . 's/\@VTEXI\@/'
+      . $vtexi . '/g;'
+      . 's,\@MDDIR\@,'
+      . $conf_pat . ',g;',
+    'texi-vers'
+);
+#4...........
+        },
+
+        'gnu3.gnu' => {
+            source => "gnu3",
+            params => "gnu",
+            expect => <<'#5...........',
+$output_rules .=
+  &file_contents_with_transform(
+                                's/\@TEXI\@/'
+                                  . $info_cursor . '/g; '
+                                  . 's/\@VTI\@/'
+                                  . $vti . '/g; '
+                                  . 's/\@VTEXI\@/'
+                                  . $vtexi . '/g;'
+                                  . 's,\@MDDIR\@,'
+                                  . $conf_pat . ',g;',
+                                'texi-vers'
+                               );
+#5...........
+        },
+
+        'gnu4.def' => {
+            source => "gnu4",
+            params => "def",
+            expect => <<'#6...........',
+my $mzef = Bio::Tools::MZEF->new(
+    '-file' => Bio::Root::IO->catfile( "t", "genomic-seq.mzef" ) );
+#6...........
+        },
+
+        'gnu4.gnu' => {
+            source => "gnu4",
+            params => "gnu",
+            expect => <<'#7...........',
+my $mzef = Bio::Tools::MZEF->new(
+                    '-file' => Bio::Root::IO->catfile("t", "genomic-seq.mzef"));
+#7...........
+        },
+
+        'hanging_side_comments1.def' => {
+            source => "hanging_side_comments1",
+            params => "def",
+            expect => <<'#8...........',
+$valuestr .=
+  $value . " ";    # with a trailing space in case there are multiple values
+                   # for this tag (allowed in GFF2 and .ace format)
+#8...........
+        },
+
+        'hanging_side_comments2.def' => {
+            source => "hanging_side_comments2",
+            params => "def",
+            expect => <<'#9...........',
+# keep '=' lined up even with hanging side comments
+$ax         = 1;    # side comment
+                    # hanging side comment
+$boondoggle = 5;    # side comment
+$beetle     = 5;    # side comment
+                    # hanging side comment
+$d          = 3;
+#9...........
+        },
+
+        'hash1.def' => {
+            source => "hash1",
+            params => "def",
+            expect => <<'#10...........',
+%TV = (
+    flintstones => {
+        series  => "flintstones",
+        nights  => [qw(monday thursday friday)],
+        members => [
+            { name => "fred", role => "lead", age => 36, },
+            {
+                name => "wilma",
+                role => "wife",
+                age  => 31,
+            },
+            { name => "pebbles", role => "kid", age => 4, },
+        ],
+    },
+    jetsons => {
+        series  => "jetsons",
+        nights  => [qw(wednesday saturday)],
+        members => [
+            {
+                name => "george",
+                role => "lead",
+                age  => 41,
+            },
+            { name => "jane",  role => "wife", age => 39, },
+            { name => "elroy", role => "kid",  age => 9, },
+        ],
+    },
+    simpsons => {
+        series  => "simpsons",
+        nights  => [qw(monday)],
+        members => [
+            {
+                name => "homer",
+                role => "lead",
+                age  => 34,
+            },
+            { name => "marge", role => "wife", age => 37, },
+            {
+                name => "bart",
+                role => "kid",
+                age  => 11,
+            },
+        ],
+    },
+);
+#10...........
+        },
+
+        'hashbang.def' => {
+            source => "hashbang",
+            params => "def",
+            expect => <<'#11...........',
+#!/usr/bin/perl
+#11...........
+        },
+
+        'here1.def' => {
+            source => "here1",
+            params => "def",
+            expect => <<'#12...........',
+is( <<~`END`, "ok\n", '<<~`HEREDOC`' );
+  $Perl -le "print 'ok'"
+  END
+#12...........
+        },
+
+        'html1.def' => {
+            source => "html1",
+            params => "def",
+            expect => <<'#13...........',
+if   ( $editlblk eq 1 ) { $editlblk = "on";  $editlblkchecked = "checked" }
+else                    { $editlblk = "off"; $editlblkchecked = "unchecked" }
+#13...........
+        },
+
+        'html1.html' => {
+            source => "html1",
+            params => "html",
+            expect => <<'#14...........',
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
+   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<!-- Generated by perltidy  -->
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<title>perltidy</title>
+<style type="text/css">
+<!--
+/* default style sheet generated by perltidy */
+body {background: #FFFFFF; color: #000000}
+pre { color: #000000; 
+      background: #FFFFFF;
+      font-family: courier;
+    } 
+
+.c  { color: #228B22;} /* comment */
+.cm { color: #000000;} /* comma */
+.co { color: #000000;} /* colon */
+.h  { color: #CD5555; font-weight:bold;} /* here-doc-target */
+.hh { color: #CD5555; font-style:italic;} /* here-doc-text */
+.i  { color: #00688B;} /* identifier */
+.j  { color: #CD5555; font-weight:bold;} /* label */
+.k  { color: #8B008B; font-weight:bold;} /* keyword */
+.m  { color: #FF0000; font-weight:bold;} /* subroutine */
+.n  { color: #B452CD;} /* numeric */
+.p  { color: #000000;} /* paren */
+.pd { color: #228B22; font-style:italic;} /* pod-text */
+.pu { color: #000000;} /* punctuation */
+.q  { color: #CD5555;} /* quote */
+.s  { color: #000000;} /* structure */
+.sc { color: #000000;} /* semicolon */
+.v  { color: #B452CD;} /* v-string */
+.w  { color: #000000;} /* bareword */
+-->
+</style>
+</head>
+<body>
+<a name="-top-"></a>
+<h1>perltidy</h1>
+<hr />
+<!-- contents of filename: perltidy -->
+<pre>
+<span class="k">if</span>   <span class="s">(</span> <span class="i">$editlblk</span> <span class="k">eq</span> <span class="n">1</span> <span class="s">)</span> <span class="s">{</span> <span class="i">$editlblk</span> = <span class="q">&quot;on&quot;</span><span class="sc">;</span>  <span class="i">$editlblkchecked</span> = <span class="q">&quot;checked&quot;</span> <span class="s">}</span>
+<span class="k">else</span>                    <span class="s">{</span> <span class="i">$editlblk</span> = <span class="q">&quot;off&quot;</span><span class="sc">;</span> <span class="i">$editlblkchecked</span> = <span class="q">&quot;unchecked&quot;</span> <span class="s">}</span>
+</pre>
+</body>
+</html>
+#14...........
+        },
+
+        'ident1.def' => {
+            source => "ident1",
+            params => "def",
+            expect => <<'#15...........',
+package A;
+
+sub new {
+    print "A::new! $_[0] $_[1]\n";
+    return 1;
+}
+
+package main;
+my $scanner = new A::();
+$scanner = new A::;
+$scanner = new A 'a';
+#15...........
+        },
+
+        'if1.def' => {
+            source => "if1",
+            params => "def",
+            expect => <<'#16...........',
+# one-line blocks
+if   ( $editlblk eq 1 ) { $editlblk = "on";  $editlblkchecked = "checked" }
+else                    { $editlblk = "off"; $editlblkchecked = "unchecked" }
+#16...........
+        },
+
+        'iscl1.def' => {
+            source => "iscl1",
+            params => "def",
+            expect => <<'#17...........',
+        # -iscl will not allow alignment of hanging side comments (currently)
+        $gsmatch =
+          ( $sub >= 50 ) ? "equal" : "lequal";    # Force an equal match for
+                                                  # dev, but be more forgiving
+                                                  # for releases
+#17...........
+        },
+
+        'iscl1.iscl' => {
+            source => "iscl1",
+            params => "iscl",
+            expect => <<'#18...........',
+        # -iscl will not allow alignment of hanging side comments (currently)
+        $gsmatch = ( $sub >= 50 ) ? "equal" : "lequal"; # Force an equal match for
+             # dev, but be more forgiving
+             # for releases
+#18...........
+        },
+
+        'label1.def' => {
+            source => "label1",
+            params => "def",
+            expect => <<'#19...........',
+INIT: {
+    $a++;
+    print "looping with label INIT:, a=$a\n";
+    if ( $a < 10 ) { goto INIT }
+}
+package: {
+    print "hello!\n";
+}
+sub: {
+    print "hello!\n";
+}
+#19...........
+        },
+
+        'lextest1.def' => {
+            source => "lextest1",
+            params => "def",
+            expect => <<'#20...........',
+$_ = <<'EOL';
+   $url = new URI::URL "http://www/";   die if $url eq "xXx";
+EOL
+LOOP: {
+    print(" digits"),       redo LOOP if /\G\d+\b[,.;]?\s*/gc;
+    print(" lowercase"),    redo LOOP if /\G[a-z]+\b[,.;]?\s*/gc;
+    print(" UPPERCASE"),    redo LOOP if /\G[A-Z]+\b[,.;]?\s*/gc;
+    print(" Capitalized"),  redo LOOP if /\G[A-Z][a-z]+\b[,.;]?\s*/gc;
+    print(" MiXeD"),        redo LOOP if /\G[A-Za-z]+\b[,.;]?\s*/gc;
+    print(" alphanumeric"), redo LOOP if /\G[A-Za-z0-9]+\b[,.;]?\s*/gc;
+    print(" line-noise"),   redo LOOP if /\G[^A-Za-z0-9]+/gc;
+    print ". That's all!\n";
+}
+#20...........
+        },
+    };
+
+    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 ) {
+        if ($err) {
+            print STDERR
+"This error received calling Perl::Tidy with '$sname' + '$pname'\n";
+            ok( !$err );
+        }
+        if ($stderr_string) {
+            print STDERR "---------------------\n";
+            print STDERR "<<STDERR>>\n$stderr_string\n";
+            print STDERR "---------------------\n";
+            print STDERR
+"This error received calling Perl::Tidy with '$sname' + '$pname'\n";
+            ok( !$stderr_string );
+        }
+        if ($errorfile_string) {
+            print STDERR "---------------------\n";
+            print STDERR "<<.ERR file>>\n$errorfile_string\n";
+            print STDERR "---------------------\n";
+            print STDERR
+"This error received calling Perl::Tidy with '$sname' + '$pname'\n";
+            ok( !$errorfile_string );
+        }
+    }
+    else {
+        ok( $output, $expect );
+    }
+}