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