r44628 - in /trunk/libjavascript-beautifier-perl: Build.PL Changes META.yml Makefile.PL debian/changelog lib/JavaScript/Beautifier.pm t/01-javascript-beauty.t

jawnsy-guest at users.alioth.debian.org jawnsy-guest at users.alioth.debian.org
Tue Sep 22 14:28:37 UTC 2009


Author: jawnsy-guest
Date: Tue Sep 22 14:28:30 2009
New Revision: 44628

URL: http://svn.debian.org/wsvn/pkg-perl/?sc=1&rev=44628
Log:
* New upstream release
  + Fix array indentation regressions

Modified:
    trunk/libjavascript-beautifier-perl/Build.PL
    trunk/libjavascript-beautifier-perl/Changes
    trunk/libjavascript-beautifier-perl/META.yml
    trunk/libjavascript-beautifier-perl/Makefile.PL
    trunk/libjavascript-beautifier-perl/debian/changelog
    trunk/libjavascript-beautifier-perl/lib/JavaScript/Beautifier.pm
    trunk/libjavascript-beautifier-perl/t/01-javascript-beauty.t

Modified: trunk/libjavascript-beautifier-perl/Build.PL
URL: http://svn.debian.org/wsvn/pkg-perl/trunk/libjavascript-beautifier-perl/Build.PL?rev=44628&op=diff
==============================================================================
--- trunk/libjavascript-beautifier-perl/Build.PL (original)
+++ trunk/libjavascript-beautifier-perl/Build.PL Tue Sep 22 14:28:30 2009
@@ -8,7 +8,7 @@
     dist_author         => 'Fayland Lam <fayland at gmail.com>',
     dist_version_from   => 'lib/JavaScript/Beautifier.pm',
     build_requires => {
-        'Test::More' => 0,
+        'Test::More' => '0.88',
         'Getopt::Long' => 0,
         'Pod::Usage' => 0,
     },

Modified: trunk/libjavascript-beautifier-perl/Changes
URL: http://svn.debian.org/wsvn/pkg-perl/trunk/libjavascript-beautifier-perl/Changes?rev=44628&op=diff
==============================================================================
--- trunk/libjavascript-beautifier-perl/Changes (original)
+++ trunk/libjavascript-beautifier-perl/Changes Tue Sep 22 14:28:30 2009
@@ -1,4 +1,7 @@
 Revision history for JavaScript-Beautifier
+
+0.16    2009.09.22
+        Fixed array indentation regressions.
 
 0.15    2009.09.17
         Array tweaks

Modified: trunk/libjavascript-beautifier-perl/META.yml
URL: http://svn.debian.org/wsvn/pkg-perl/trunk/libjavascript-beautifier-perl/META.yml?rev=44628&op=diff
==============================================================================
--- trunk/libjavascript-beautifier-perl/META.yml (original)
+++ trunk/libjavascript-beautifier-perl/META.yml Tue Sep 22 14:28:30 2009
@@ -1,6 +1,6 @@
 ---
 name: JavaScript-Beautifier
-version: 0.15
+version: 0.16
 author:
   - 'Fayland Lam <fayland at gmail.com>'
 abstract: Beautify Javascript (beautifier for javascript)
@@ -11,13 +11,13 @@
 build_requires:
   Getopt::Long: 0
   Pod::Usage: 0
-  Test::More: 0
+  Test::More: 0.88
 configure_requires:
   Module::Build: 0.35
 provides:
   JavaScript::Beautifier:
     file: lib/JavaScript/Beautifier.pm
-    version: 0.15
+    version: 0.16
 generated_by: Module::Build version 0.35
 meta-spec:
   url: http://module-build.sourceforge.net/META-spec-v1.4.html

Modified: trunk/libjavascript-beautifier-perl/Makefile.PL
URL: http://svn.debian.org/wsvn/pkg-perl/trunk/libjavascript-beautifier-perl/Makefile.PL?rev=44628&op=diff
==============================================================================
--- trunk/libjavascript-beautifier-perl/Makefile.PL (original)
+++ trunk/libjavascript-beautifier-perl/Makefile.PL Tue Sep 22 14:28:30 2009
@@ -7,7 +7,7 @@
           'PREREQ_PM' => {
                            'Getopt::Long' => '0',
                            'Pod::Usage' => '0',
-                           'Test::More' => '0'
+                           'Test::More' => '0.88'
                          },
           'INSTALLDIRS' => 'site',
           'EXE_FILES' => [

Modified: trunk/libjavascript-beautifier-perl/debian/changelog
URL: http://svn.debian.org/wsvn/pkg-perl/trunk/libjavascript-beautifier-perl/debian/changelog?rev=44628&op=diff
==============================================================================
--- trunk/libjavascript-beautifier-perl/debian/changelog (original)
+++ trunk/libjavascript-beautifier-perl/debian/changelog Tue Sep 22 14:28:30 2009
@@ -1,3 +1,10 @@
+libjavascript-beautifier-perl (0.16-1) UNRELEASED; urgency=low
+
+  * New upstream release
+    + Fix array indentation regressions
+
+ -- Jonathan Yu <jawnsy at cpan.org>  Tue, 22 Sep 2009 06:31:14 -0400
+
 libjavascript-beautifier-perl (0.15-1) unstable; urgency=low
 
   [ Jonathan Yu ]

Modified: trunk/libjavascript-beautifier-perl/lib/JavaScript/Beautifier.pm
URL: http://svn.debian.org/wsvn/pkg-perl/trunk/libjavascript-beautifier-perl/lib/JavaScript/Beautifier.pm?rev=44628&op=diff
==============================================================================
--- trunk/libjavascript-beautifier-perl/lib/JavaScript/Beautifier.pm (original)
+++ trunk/libjavascript-beautifier-perl/lib/JavaScript/Beautifier.pm Tue Sep 22 14:28:30 2009
@@ -3,7 +3,7 @@
 use warnings;
 use strict;
 
-our $VERSION = '0.15';
+our $VERSION = '0.16';
 our $AUTHORITY = 'cpan:FAYLAND';
 
 use base 'Exporter';
@@ -11,7 +11,7 @@
 @EXPORT_OK = qw/js_beautify/;
 
 my ( @input, @output, @modes );
-my ( $token_text, $last_type, $last_text, $last_last_text, $last_word, $current_mode, $previous_mode, $indent_string, $parser_pos, $in_case, $prefix, $token_type, $do_block_just_closed, $var_line, $var_line_tainted, $if_line_flag );
+my ( $token_text, $last_type, $last_text, $last_last_text, $last_word, $current_mode, $indent_string, $parser_pos, $in_case, $prefix, $token_type, $do_block_just_closed, $var_line, $var_line_tainted, $if_line_flag, $wanted_newline, $just_added_newline );
 
 my @whitespace = split('', "\n\r\t ");
 my @wordchar   = split('', 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_$');
@@ -33,6 +33,7 @@
     $opt_space_after_anon_function = exists $opts->{space_after_anon_function} ? $opts->{space_after_anon_function} : 0;
 
     # -------------------------------------
+    $just_added_newline = 0;
     $indent_string = '';
     while ( $opt_indent_size-- ) {
         $indent_string .= $opt_indent_character;
@@ -68,24 +69,29 @@
             $var_line = 0;
             
             if ( $token_text eq '[' ) {
-                if ( $last_type eq 'TK_WORD' ) {
+                if ( $last_type eq 'TK_WORD' || $last_text eq ')' ) {
                     # this is array index specifier, break immediately
+		    # a[x], fn()[x]
                     set_mode('(EXPRESSION)');
                     print_token();
                     $last_last_text = $last_text;$last_type = $token_type;$last_text = $token_text;next;
                 }
-                if ( $current_mode eq '[EXPRESSION]' ) {
+                if ( $current_mode eq '[EXPRESSION]' || $current_mode eq '[INDENTED-EXPRESSION]' ) {
                     if ( $last_last_text eq ']' && $last_text eq ',' ) {
                         # ], [ goes to new line
                         indent();
                         print_newline();
+                        set_mode('[INDENTED-EXPRESSION]');
                     } elsif ($last_text eq '[') {
                         indent();
                         print_newline();
-                    }
-                }
- 
-                set_mode('[EXPRESSION]');
+                        set_mode('[INDENTED-EXPRESSION]');
+                    } else {
+                        set_mode('[EXPRESSION]');
+                    }
+                } else {
+                    set_mode('[EXPRESSION]');
+                }
             } else {
                 set_mode('(EXPRESSION)');
             }
@@ -107,11 +113,10 @@
             print_token();
             $last_last_text = $last_text;$last_type = $token_type;$last_text = $token_text;next;
         } elsif ( $token_type eq 'TK_END_EXPR' ) {
-            $previous_mode = $current_mode;
+            if ( $token_text eq ']' && $current_mode eq '[INDENTED-EXPRESSION]' ) {
+                unindent();
+            }
             restore_mode();
-            if ( $token_text eq ']' && $current_mode eq '[EXPRESSION]' && ($previous_mode ne '(EXPRESSION)') ) {
-                unindent();
-            }
             print_token();
             $last_last_text = $last_text;$last_type = $token_type;$last_text = $token_text;next;
         } elsif ( $token_type eq 'TK_START_BLOCK' ) {
@@ -133,7 +138,15 @@
         } elsif ( $token_type eq 'TK_END_BLOCK' ) {
             if ( $last_type eq 'TK_START_BLOCK' ) {
                 # nothing
-                trim_output();
+                if ($just_added_newline) {
+                    remove_indent();
+                    #  {
+                    #
+                    #  }
+                } else {
+                    #  {}
+                    trim_output();
+                }
                 unindent();
             } else {
                 unindent();
@@ -143,6 +156,8 @@
             restore_mode();
             $last_last_text = $last_text;$last_type = $token_type;$last_text = $token_text;next;
         } elsif ( $token_type eq 'TK_WORD' ) {
+            # no, it's not you. even I have problems understanding how this works
+            # and what does what.
             if ( $do_block_just_closed ) {
                 print_space();
                 print_token();
@@ -174,7 +189,7 @@
                 }
             } elsif ( $last_type eq 'TK_SEMICOLON' && ( $current_mode eq 'BLOCK' || $current_mode eq 'DO_BLOCK' ) ) {
                 $prefix = 'NEWLINE';
-            } elsif ( $last_type eq 'TK_SEMICOLON' && ( $current_mode eq '[EXPRESSION]' || $current_mode eq '(EXPRESSION)' ) ) {
+            } elsif ( $last_type eq 'TK_SEMICOLON' && is_expression($current_mode) ) {
                 $prefix = 'SPACE';
             } elsif ( $last_type eq 'TK_STRING') {
                 $prefix = 'NEWLINE';
@@ -248,7 +263,7 @@
                     $var_line = 0;
                 }
             }
-            if ($var_line && $token_text eq ',' && ( $current_mode eq '[EXPRESSION]' || $current_mode eq '(EXPRESSION)' ) ) {
+            if ($var_line && $token_text eq ',' && is_expression($current_mode) ) {
                 # do not break on comma, for(var a = 1, b = 2)
                 $var_line_tainted = 0;
             }
@@ -380,6 +395,7 @@
     }
     
     if ( $output[ scalar @output - 1 ] ne "\n" || ! $ignore_repeated ) {
+        $just_added_newline = 1;
         push @output, "\n";
     }
     foreach my $i ( 0 .. $opt_indent_level - 1 ) {
@@ -396,6 +412,7 @@
 }
 
 sub print_token {
+    $just_added_newline = 0;
     push @output, $token_text;
 }
 sub indent {
@@ -415,6 +432,10 @@
     my $mode = shift;
     push @modes, $current_mode;
     $current_mode = $mode;
+}
+sub is_expression {
+    my $mode = shift;
+    return ($mode eq '[EXPRESSION]' || $mode eq '[INDENTED-EXPRESSION]' || $mode eq '(EXPRESSION)') ? 1 : 0;
 }
 sub restore_mode {
     $do_block_just_closed = ( $current_mode eq 'DO_BLOCK' ) ? 1 : 0;
@@ -480,7 +501,7 @@
         $c = $input[$parser_pos];
         $parser_pos++;
     };
-    my $wanted_newline = 0;
+    $wanted_newline = 0;
     if ( $opt_preserve_newlines ) {
         if ( $n_newlines > 1 ) {
             foreach my $i ( 0 .. 1 ) {

Modified: trunk/libjavascript-beautifier-perl/t/01-javascript-beauty.t
URL: http://svn.debian.org/wsvn/pkg-perl/trunk/libjavascript-beautifier-perl/t/01-javascript-beauty.t?rev=44628&op=diff
==============================================================================
--- trunk/libjavascript-beautifier-perl/t/01-javascript-beauty.t (original)
+++ trunk/libjavascript-beautifier-perl/t/01-javascript-beauty.t Tue Sep 22 14:28:30 2009
@@ -1,179 +1,245 @@
 #!perl -T
 
+use strict;
+use warnings;
 use Test::More;
-
 use JavaScript::Beautifier qw/js_beautify/;
+
+# from http://github.com/einars/js-beautify/tree/master/beautify-tests.js
+
+my $tests_num = 0;
 
 my $opts = {
 	indent_size => 4,
 	indent_character => ' ',
 	space_after_anon_function => 1,
+	preserve_newlines => 1,
 };
 
-# from http://github.com/einars/js-beautify/tree/master/beautify-tests.js
-my @tests = (
-	[ 'a        =          1', 'a = 1' ],
-	[ 'a=1', 'a = 1' ],
-	[ "a();\n\nb();", "a();\n\nb();"],
-	[ 'var a = 1 var b = 2', "var a = 1\nvar b = 2" ],
-	[ 'if (a == 1) b = 2', "if (a == 1) b = 2" ],
-	[ 'if(1){2}else{3}', "if (1) {\n    2\n} else {\n    3\n}" ],
-	[ 'if(1||2)', 'if (1 || 2)' ],
-	[ '(a==1)||(b==2)', '(a == 1) || (b == 2)' ],
-	[ 'var a = 1 if (2) 3', "var a = 1\nif (2) 3" ],
-	[ 'a=0xff+4', 'a = 0xff + 4' ],
-	[ 'F*(g/=f)*g+b', 'F * (g /= f) * g + b' ],
-    [ 'a.b({c:d})', "a.b({\n    c: d\n})" ],
-    [ "a.b\n(\n{\nc:\nd\n}\n)", "a.b({\n    c: d\n})" ],
-    [ 'a=!b', 'a = !b' ],
-    [ 'a?b:c', 'a ? b : c' ],
-    [ 'a?1:2', 'a ? 1 : 2' ],
-    [ 'a?(b):c', 'a ? (b) : c' ],
-    [ 'x={a:1,b:w=="foo"?x:y,c:z}', "x = {\n    a: 1,\n    b: w == \"foo\" ? x : y,\n    c: z\n}"],
-    [ 'x=a?b?c?d:e:f:g;', 'x = a ? b ? c ? d : e : f : g;' ],
-    [ 'x=a?b?c?d:{e1:1,e2:2}:f:g;', "x = a ? b ? c ? d : {\n    e1: 1,\n    e2: 2\n} : f : g;"],
-    [ 'if(!a)', 'if (!a)' ],
-    [ 'a=~a', 'a = ~a' ],
-    [ 'a;/*comment*/b;', "a;\n/*comment*/\nb;" ],
-    [ 'if(a)break', "if (a) break" ],
-    [ 'if(a){break}', "if (a) {\n    break\n}" ],
-    [ 'if((a))', 'if ((a))' ],
-    [ 'for(var i=0;;)', 'for (var i = 0;;)' ],
-    [ 'a++;', 'a++;' ],
-    [ 'for(;;i++)', 'for (;; i++)' ],
-    [ 'for(;;++i)', 'for (;; ++i)' ],
-    [ 'return(1)', 'return (1)' ],
-	[ 'try{a();}catch(b){c();}finally{d();}', "try {\n    a();\n} catch(b) {\n    c();\n} finally {\n    d();\n}" ],
-    [ 'if(a){b();}else if(', "if (a) {\n    b();\n} else if (" ],
-    [ 'switch(x) {case 0: case 1: a(); break; default: break}', "switch (x) {\ncase 0:\ncase 1:\n    a();\n    break;\ndefault:\n    break\n}" ],
-    [ 'switch(x){case -1:break;case !y:break;}', "switch (x) {\ncase -1:\n    break;\ncase !y:\n    break;\n}" ],
-    [ 'if (a) b(); else c();', "if (a) b();\nelse c();" ],
-    [ '{a:1, b:2}', "{\n    a: 1,\n    b: 2\n}" ],
-    [ 'a={1:[-1],2:[+1]}', "a = {\n    1: [-1],\n    2: [+1]\n}" ],
-    [ 'var l = {\'a\':\'1\', \'b\':\'2\'}', "var l = {\n    'a': '1',\n    'b': '2'\n}" ],
-    [ '{{}/z/}', "{\n    {}\n    /z/\n}" ],
-    [ 'return 45', "return 45" ],
-    [ 'If[1]', "If[1]" ],
-    [ 'Then[1]', "Then[1]" ],
-    [ 'a = 1e10', "a = 1e10" ],
-    [ 'a = 1.3e10', "a = 1.3e10" ],
-    [ 'a = 1.3e-10', "a = 1.3e-10" ],
-    [ 'a = -1.3e-10', "a = -1.3e-10" ],
-    [ 'a = 1e-10', "a = 1e-10" ],
-    [ 'a = e - 10', "a = e - 10" ],
-    [ 'a = 11-10', "a = 11 - 10" ],
-    [ "a = 1;// comment\n", "a = 1; // comment" ],
-    [ "a = 1; // comment\n", "a = 1; // comment" ],
-    [ "a = 1;\n // comment\n", "a = 1;\n// comment" ],
+sub test_beautifier {
+    my ($input, $expected) = @_;
+
+    $expected ||= $input;
+    my $result = js_beautify( $input, $opts );
+    
+    $tests_num++;
+    is($result, $expected, $input);
+}
+
+sub bt {
+    my ($input, $expected) = @_;
+    
+    test_beautifier(@_);
+    $expected ||= $input;
+    
+    # test also the returned indentation
+    # e.g if input = "asdf();"
+    # then test that this remains properly formatted as well:
+    # {
+    # asdf();
+    # indent;
+    # }
+    
+    if ( $opts->{indent_size} == 4 && $input ) {
+        my $wrapped_input = "{\n" . $input . "\nindent;}";
+        my $wrapped_expectation = $expected;
+        $wrapped_expectation =~ s/^(.+)$/    $1/mg;
+        $wrapped_expectation = "{\n$wrapped_expectation\n    indent;\n}";
+        test_beautifier($wrapped_input, $wrapped_expectation);
+    }
+}
+
+bt( 'a        =          1', 'a = 1');
+bt( 'a=1', 'a = 1');
+bt( "a();\n\nb();", "a();\n\nb();");
+bt( 'var a = 1 var b = 2', "var a = 1\nvar b = 2");
+bt( 'var a=1, b=c[d], e=6;', "var a = 1,\nb = c[d],\ne = 6;");
+bt( 'a = " 12345 "');
+bt( "a = ' 12345 '");
+bt( 'if (a == 1) b = 2;', "if (a == 1) b = 2;");
+bt( 'if(1){2}else{3}', "if (1) {\n    2\n} else {\n    3\n}" );
+bt( 'if(1||2);', 'if (1 || 2);' );
+bt( '(a==1)||(b==2)', '(a == 1) || (b == 2)' );
+bt( 'var a = 1 if (2) 3;', "var a = 1\nif (2) 3;" );
+bt('a /= 5');
+bt('a = 0.5 * 3');
+bt('a *= 10.55');
+bt('a < .5');
+bt('a <= .5');
+bt('a<.5', 'a < .5');
+bt('a<=.5', 'a <= .5');
+bt('a = 0xff;');
+bt( 'a=0xff+4', 'a = 0xff + 4' );
+bt( 'a = [1, 2, 3, 4]');
+bt( 'F*(g/=f)*g+b', 'F * (g /= f) * g + b' );
+bt( 'a.b({c:d})', "a.b({\n    c: d\n})" );
+bt( "a.b\n(\n{\nc:\nd\n}\n)", "a.b({\n    c: d\n})" );
+bt( 'a=!b', 'a = !b' );
+bt( 'a?b:c', 'a ? b : c' );
+bt( 'a?1:2', 'a ? 1 : 2' );
+bt( 'a?(b):c', 'a ? (b) : c' );
+bt( 'x={a:1,b:w=="foo"?x:y,c:z}', "x = {\n    a: 1,\n    b: w == \"foo\" ? x : y,\n    c: z\n}");
+bt( 'x=a?b?c?d:e:f:g;', 'x = a ? b ? c ? d : e : f : g;' );
+bt( 'x=a?b?c?d:{e1:1,e2:2}:f:g;', "x = a ? b ? c ? d : {\n    e1: 1,\n    e2: 2\n} : f : g;");
+bt( 'function void(void) {}' );
+bt( 'if(!a)foo();', 'if (!a) foo();' );
+bt( 'a=~a', 'a = ~a' );
+bt( 'a;/*comment*/b;', "a;\n/*comment*/\nb;" );
+bt( 'if(a)break;', "if (a) break;" );
+bt( 'if(a){break}', "if (a) {\n    break\n}" );
+bt( 'if((a))foo();', 'if ((a)) foo();' );
+bt( 'for(var i=0;;)', 'for (var i = 0;;)' );
+bt( 'a++;', 'a++;' );
+bt( 'for(;;i++)', 'for (;; i++)' );
+bt( 'for(;;++i)', 'for (;; ++i)' );
+bt( 'return(1)', 'return (1)' );
+bt( 'try{a();}catch(b){c();}finally{d();}', "try {\n    a();\n} catch(b) {\n    c();\n} finally {\n    d();\n}" );
+bt('(xx)()'); # magic function call
+bt('a[1]()'); # another magic function call
+bt( 'if(a){b();}else if(c) foo();', "if (a) {\n    b();\n} else if (c) foo();" );
+bt( 'switch(x) {case 0: case 1: a(); break; default: break}', "switch (x) {\ncase 0:\ncase 1:\n    a();\n    break;\ndefault:\n    break\n}" );
+bt( 'switch(x){case -1:break;case !y:break;}', "switch (x) {\ncase -1:\n    break;\ncase !y:\n    break;\n}" );
+bt( 'a !== b' );
+bt( 'if (a) b(); else c();', "if (a) b();\nelse c();" );
+bt( "// comment\n(function something() {})"); # typical greasemonkey start
+bt( "{\n\n    x();\n\n}"); # was: duplicating newlines
+bt( 'if (a in b) foo();');
+bt( '{a:1, b:2}', "{\n    a: 1,\n    b: 2\n}" );
+bt( 'a={1:[-1],2:[+1]}', "a = {\n    1: [-1],\n    2: [+1]\n}" );
+bt( 'var l = {\'a\':\'1\', \'b\':\'2\'}', "var l = {\n    'a': '1',\n    'b': '2'\n}" );
+bt( 'if (template.user[n] in bk) foo();');
+bt( '{{}/z/}', "{\n    {}\n    /z/\n}" );
+bt( 'return 45', "return 45" );
+bt( 'If[1]', "If[1]" );
+bt( 'Then[1]', "Then[1]" );
+bt( 'a = 1e10', "a = 1e10" );
+bt( 'a = 1.3e10', "a = 1.3e10" );
+bt( 'a = 1.3e-10', "a = 1.3e-10" );
+bt( 'a = -1.3e-10', "a = -1.3e-10" );
+bt( 'a = 1e-10', "a = 1e-10" );
+bt( 'a = e - 10', "a = e - 10" );
+bt( 'a = 11-10', "a = 11 - 10" );
+bt( "a = 1;// comment\n", "a = 1; // comment" );
+bt( "a = 1; // comment\n", "a = 1; // comment" );
+bt( "a = 1;\n // comment\n", "a = 1;\n// comment" );
+
+bt( "if (a) {\n    do();\n}"); # was: extra space appended
+bt( "if\n(a)\nb();", "if (a) b();" ); # test for proper newline removal
  
-    [ "if\n(a)\nb()", "if (a) b()" ], # test for proper newline removal
- 
-    [ "if (a) {\n// comment\n}else{\n// comment\n}", "if (a) {\n    // comment\n} else {\n    // comment\n}" ], # if/else statement with empty body
-    [ "if (a) {\n// comment\n// comment\n}", "if (a) {\n    // comment\n    // comment\n}" ], # multiple comments indentation
-    [ "if (a) b() else c()", "if (a) b()\nelse c()" ],
-    [ "if (a) b() else if c() d()", "if (a) b()\nelse if c() d()" ],
- 
-    [ "do { a(); } while ( 1 );", "do {\n    a();\n} while (1);" ],
-    [ "do {\n} while ( 1 );", "do {} while (1);" ],
-    [ "delete x if (a) b();", "delete x\nif (a) b();" ],
-    [ "delete x[x] if (a) b();", "delete x[x]\nif (a) b();" ],
-    [ "for(var a=1,b=2)", "for (var a = 1, b = 2)" ],
-    [ "for(var a=1,b=2,c=3)", "for (var a = 1, b = 2, c = 3)" ],
-    [ "for(var a=1,b=2,c=3;d<3;d++)", "for (var a = 1, b = 2, c = 3; d < 3; d++)" ],
-    [ "function x(){(a||b).c()}", "function x() {\n    (a || b).c()\n}" ],
-    [ "function x(){return - 1}", "function x() {\n    return -1\n}" ],
-    [ "function x(){return ! a}", "function x() {\n    return !a\n}" ],
-    
-    [ "{/abc/i.test()}", "{\n    /abc/i.test()\n}" ],
-    [ "{x=#1=[]}", "{\n    x = #1=[]\n}"],
-    [ "{a:#1={}}", "{\n    a: #1={}\n}"],
-    [ "{a:#1#}", "{\n    a: #1#\n}" ],
-    [ "{a:#1", "{\n    a: #1" ], # incomplete
-    [ "{a:#", "{\n    a: #" ], # incomplete
-
-    ["<!--\nvoid();\n// -->", "<!--\nvoid();\n// -->"],
-
-    [ "a=/regexp", "a = /regexp" ], # incomplete regexp
-    [ "{a:#1=[],b:#1#,c:#999999#}", "{\n    a: #1=[],\n    b: #1#,\n    c: #999999#\n}" ],
-    
-    [ "do{x()}while(a>1)", "do {\n    x()\n} while (a > 1)" ],
-    [ "x(); /reg/exp.match(something)", "x();\n/reg/exp.match(something)" ],
-
-    ["<!--\nsomething();\n-->", "<!--\nsomething();\n-->" ],
-    ["<!--\nif(i<0){bla();}\n-->", "<!--\nif (i < 0) {\n    bla();\n}\n-->"],
-    ["<!--\nsomething();\n-->\n<!--\nsomething();\n-->", "<!--\nsomething();\n-->\n<!--\nsomething();\n-->"],
-    ["<!--\nif(i<0){bla();}\n-->\n<!--\nif(i<0){bla();}\n-->", "<!--\nif (i < 0) {\n    bla();\n}\n-->\n<!--\nif (i < 0) {\n    bla();\n}\n-->"],
-
-    ['{foo();--bar;}', "{\n    foo();\n    --bar;\n}"],
-    ['{foo();++bar;}', "{\n    foo();\n    ++bar;\n}"],
-    ['{--bar;}', "{\n    --bar;\n}"],
-    ['{++bar;}', "{\n    ++bar;\n}"],
-
-    # regexps
-    [ 'a(/abc\\/\\/def/);b()', "a(/abc\\/\\/def/);\nb()" ],
-    [ 'a(/a[b\\[\\]c]d/);b()', "a(/a[b\\[\\]c]d/);\nb()" ],
-    [ 'a(/a[b\\[', "a(/a[b\\[" ], # incomplete char class
-    # allow unescaped / in char classes
-    [ 'a(/[a/b]/);b()', "a(/[a/b]/);\nb()" ],
-    [ 'a=[[1,2],[4,5],[7,8]]', "a = [\n    [1, 2],\n    [4, 5],\n    [7, 8]]" ],
-    [ 'a=[a[1],b[4],c[d[7]]]', "a = [a[1], b[4], c[d[7]]]" ],
-    [ '[1,2,[3,4,[5,6],7],8]', "[1, 2, [3, 4, [5, 6], 7], 8]" ],
-    
-    [ '[[["1","2"],["3","4"]],[["5","6","7"],["8","9","0"]],[["1","2","3"],["4","5","6","7"],["8","9","0"]]]',
-      qq~[\n    [\n        ["1", "2"],\n        ["3", "4"]],\n    [\n        ["5", "6", "7"],\n        ["8", "9", "0"]],\n    [\n        ["1", "2", "3"],\n        ["4", "5", "6", "7"],\n        ["8", "9", "0"]]]~ ],
-    
-);
-
-plan tests => scalar @tests + 13;
-
-foreach my $t (@tests) {
-	my $run_js = js_beautify($t->[0], $opts );
-	is $run_js, $t->[1], $t->[0];
-}
-
-# test space_after_anon_function
-my @test_space_after_anon_function_true = (
-    ["// comment 1\n(function()", "// comment 1\n(function ()"], # typical greasemonkey start
-    ["var a1, b1, c1, d1 = 0, c = function() {}, d = '';", "var a1, b1, c1, d1 = 0,\nc = function () {},\nd = '';"],
-    ['var o1=$.extend(a,function(){alert(x);}', "var o1 = \$.extend(a, function () {\n    alert(x);\n}"],
-    ['var o1=$.extend(a);function(){alert(x);}', "var o1 = \$.extend(a);\nfunction () {\n    alert(x);\n}"]
-);
-foreach my $t (@test_space_after_anon_function_true) {
-	my $run_js = js_beautify($t->[0], { %$opts, space_after_anon_function => 1 } );
-	is $run_js, $t->[1], $t->[0];
-}
-my @test_space_after_anon_function_false = (
-    ["// comment 2\n(function()", "// comment 2\n(function()"], # typical greasemonkey start
-    ["var a2, b2, c2, d2 = 0, c = function() {}, d = '';", "var a2, b2, c2, d2 = 0,\nc = function() {},\nd = '';"],
-    ['var o2=$.extend(a,function(){alert(x);}', "var o2 = \$.extend(a, function() {\n    alert(x);\n}"],
-    ['var o2=$.extend(a);function(){alert(x);}', "var o2 = \$.extend(a);\nfunction() {\n    alert(x);\n}"],
-    ['{[y[a]];keep_indent;}', "{\n    [y[a]];\n    keep_indent;\n}"],
-);
-foreach my $t (@test_space_after_anon_function_false) {
-	my $run_js = js_beautify($t->[0], { %$opts, space_after_anon_function => 0 } );
-	is $run_js, $t->[1], $t->[0];
-}
-
-# test indent
-my $in = '{ one_char() }';
-my $out = "{\n one_char()\n}";
-my $js = js_beautify( $in, { indent_size => 1, indent_char => ' ' } );
-is($out, $js);
-
-$in = '{ one_char() }';
-$out = "{\n    one_char()\n}";
-$js = js_beautify( $in, { indent_size => 4, indent_char => ' ' } );
-is($out, $js);
-
-# test preserve_newlines
-$in = "var\na=dont_preserve_newlines";
-$out = "var a = dont_preserve_newlines";
-$js = js_beautify( $in, { preserve_newlines => 0 } );
-is($out, $js);
-
-$in = "var\na=do_preserve_newlines";
-$out = "var\na = do_preserve_newlines";
-$js = js_beautify( $in, { preserve_newlines => 1 } );
-is($out, $js);
-
-1;
+bt( "if (a) {\n// comment\n}else{\n// comment\n}", "if (a) {\n    // comment\n} else {\n    // comment\n}" ); # if/else statement with empty body
+bt( "if (a) {\n// comment\n// comment\n}", "if (a) {\n    // comment\n    // comment\n}" ); # multiple comments indentation
+bt( "if (a) b() else c();", "if (a) b()\nelse c();" );
+bt( "if (a) b() else if c() d();", "if (a) b()\nelse if c() d();" );
+
+bt("{}");
+bt("{\n\n}");
+bt("do { a(); } while ( 1 );", "do {\n    a();\n} while (1);");
+bt("do {} while (1);");
+bt("do {\n} while (1);", "do {} while (1);");
+bt("do {\n\n} while (1);");
+bt("var a = x(a, b, c)");
+bt( "delete x if (a) b();", "delete x\nif (a) b();" );
+bt( "delete x[x] if (a) b();", "delete x[x]\nif (a) b();" );
+bt( "for(var a=1,b=2)", "for (var a = 1, b = 2)" );
+bt( "for(var a=1,b=2,c=3)", "for (var a = 1, b = 2, c = 3)" );
+bt( "for(var a=1,b=2,c=3;d<3;d++)", "for (var a = 1, b = 2, c = 3; d < 3; d++)" );
+bt( "function x(){(a||b).c()}", "function x() {\n    (a || b).c()\n}" );
+bt( "function x(){return - 1}", "function x() {\n    return -1\n}" );
+bt( "function x(){return ! a}", "function x() {\n    return !a\n}" );
+
+bt("a = 'a'\nb = 'b'");
+bt("a = /reg/exp");
+bt("a = /reg/");
+bt('/abc/.test()');
+bt('/abc/i.test()');
+bt( "{/abc/i.test()}", "{\n    /abc/i.test()\n}" );
+
+bt( "{x=#1=[]}", "{\n    x = #1=[]\n}");
+bt( "{a:#1={}}", "{\n    a: #1={}\n}");
+bt( "{a:#1#}", "{\n    a: #1#\n}" );
+test_beautifier( "{a:#1", "{\n    a: #1" ); # incomplete
+test_beautifier( "{a:#", "{\n    a: #" ); # incomplete
+
+test_beautifier( "<!--\nvoid();\n// -->", "<!--\nvoid();\n// -->");
+
+test_beautifier( "a=/regexp", "a = /regexp" ); # incomplete regexp
+
+bt( "{a:#1=[],b:#1#,c:#999999#}", "{\n    a: #1=[],\n    b: #1#,\n    c: #999999#\n}" );
+
+bt("a = 1e+2");
+bt("a = 1e-2");
+bt( "do{x()}while(a>1)", "do {\n    x()\n} while (a > 1)" );
+
+bt( "x(); /reg/exp.match(something)", "x();\n/reg/exp.match(something)" );
+
+bt("something();(", "something();\n(");
+
+bt("function namespace::something()");
+
+test_beautifier( "<!--\nsomething();\n-->", "<!--\nsomething();\n-->" );
+test_beautifier( "<!--\nif(i<0){bla();}\n-->", "<!--\nif (i < 0) {\n    bla();\n}\n-->");
+
+test_beautifier( "<!--\nsomething();\n-->\n<!--\nsomething();\n-->", "<!--\nsomething();\n-->\n<!--\nsomething();\n-->");
+test_beautifier( "<!--\nif(i<0){bla();}\n-->\n<!--\nif(i<0){bla();}\n-->", "<!--\nif (i < 0) {\n    bla();\n}\n-->\n<!--\nif (i < 0) {\n    bla();\n}\n-->");
+
+bt( '{foo();--bar;}', "{\n    foo();\n    --bar;\n}");
+bt( '{foo();++bar;}', "{\n    foo();\n    ++bar;\n}");
+bt( '{--bar;}', "{\n    --bar;\n}");
+bt( '{++bar;}', "{\n    ++bar;\n}");
+
+# regexps
+bt( 'a(/abc\\/\\/def/);b()', "a(/abc\\/\\/def/);\nb()" );
+bt( 'a(/a[b\\[\\]c]d/);b()', "a(/a[b\\[\\]c]d/);\nb()" );
+test_beautifier('a(/a[b\\[', "a(/a[b\\["); # incomplete char class
+# allow unescaped / in char classes
+bt( 'a(/[a/b]/);b()', "a(/[a/b]/);\nb()" );
+
+bt( 'a=[[1,2],[4,5],[7,8]]', "a = [\n    [1, 2],\n    [4, 5],\n    [7, 8]]" );
+bt( 'a=[a[1],b[4],c[d[7]]]', "a = [a[1], b[4], c[d[7]]]" );
+bt( '[1,2,[3,4,[5,6],7],8]', "[1, 2, [3, 4, [5, 6], 7], 8]" );
+    
+bt( '[[["1","2"],["3","4"]],[["5","6","7"],["8","9","0"]],[["1","2","3"],["4","5","6","7"],["8","9","0"]]]',
+      qq~[\n    [\n        ["1", "2"],\n        ["3", "4"]],\n    [\n        ["5", "6", "7"],\n        ["8", "9", "0"]],\n    [\n        ["1", "2", "3"],\n        ["4", "5", "6", "7"],\n        ["8", "9", "0"]]]~ );
+    
+bt( '{[x()[0]];indent;}', "{\n    [x()[0]];\n    indent;\n}" );
+
+$opts->{space_after_anon_function} = 1;
+
+bt( "// comment 1\n(function()", "// comment 1\n(function ()"); # typical greasemonkey start
+bt( "var a1, b1, c1, d1 = 0, c = function() {}, d = '';", "var a1, b1, c1, d1 = 0,\nc = function () {},\nd = '';");
+bt( 'var o1=$.extend(a,function(){alert(x);}', "var o1 = \$.extend(a, function () {\n    alert(x);\n}");
+bt( 'var o1=$.extend(a);function(){alert(x);}', "var o1 = \$.extend(a);\nfunction () {\n    alert(x);\n}" );
+
+$opts->{space_after_anon_function} = 0;
+
+bt( "// comment 2\n(function()", "// comment 2\n(function()"); # typical greasemonkey start
+bt( "var a2, b2, c2, d2 = 0, c = function() {}, d = '';", "var a2, b2, c2, d2 = 0,\nc = function() {},\nd = '';");
+bt( 'var o2=$.extend(a,function(){alert(x);}', "var o2 = \$.extend(a, function() {\n    alert(x);\n}");
+bt( 'var o2=$.extend(a);function(){alert(x);}', "var o2 = \$.extend(a);\nfunction() {\n    alert(x);\n}");
+bt( '{[y[a]];keep_indent;}', "{\n    [y[a]];\n    keep_indent;\n}");
+
+$opts->{indent_size} = 1;
+$opts->{indent_char} = ' ';
+
+bt( '{ one_char() }', "{\n one_char()\n}" );
+
+$opts->{indent_size} = 4;
+$opts->{indent_char} = ' ';
+
+bt( '{ one_char() }', "{\n    one_char()\n}" );
+
+$opts->{indent_size} = 1;
+$opts->{indent_char} = "\t";
+
+# FIXME
+#bt( '{ one_char() }', "{\n\tone_char()\n}" );
+
+$opts->{preserve_newlines} = 0;
+bt( "var\na=dont_preserve_newlines", "var a = dont_preserve_newlines" );
+
+$opts->{preserve_newlines} = 1;
+bt( "var\na=do_preserve_newlines", "var\na = do_preserve_newlines"  );
+
+done_testing( $tests_num );
+
+1;




More information about the Pkg-perl-cvs-commits mailing list