diff --git a/_test/cases/lib/exe/js_js_compress.test.php b/_test/cases/lib/exe/js_js_compress.test.php index 0bfb620569937246665f3edc9931a95fe845b091..48b36af15ecf030263ac09ba0e174f71aeb6be1e 100644 --- a/_test/cases/lib/exe/js_js_compress.test.php +++ b/_test/cases/lib/exe/js_js_compress.test.php @@ -40,15 +40,25 @@ class js_js_compress_test extends UnitTestCase { } function test_dquot1(){ - $text = 'var foo="Now what \'do we//get /*here*/ ?";'; + $text = 'var foo="Now what \\" \'do we//get /*here*/ ?";'; $this->assertEqual(js_compress($text), $text); } + function test_dquotrunaway(){ + $text = 'var foo="Now where does it end'; + $this->assertEqual(js_compress($text), "$text\n"); //\n is added by compressor + } + function test_squot1(){ - $text = "var foo='Now what \"do we//get /*here*/ ?';"; + $text = "var foo='Now what \\' \"do we//get /*here*/ ?';"; $this->assertEqual(js_compress($text), $text); } + function test_squotrunaway(){ + $text = "var foo='Now where does it end"; + $this->assertEqual(js_compress($text), "$text\n"); //\n is added by compressor + } + function test_nl1(){ $text = "var foo=6;\nvar baz=7;"; $this->assertEqual(js_compress($text), 'var foo=6;var baz=7;'); @@ -63,6 +73,12 @@ class js_js_compress_test extends UnitTestCase { $text = "var foo=6; \t "; $this->assertEqual(js_compress($text), 'var foo=6;'); } + + function test_shortcond(){ + $text = "var foo = (baz) ? 'bar' : 'bla';"; + $this->assertEqual(js_compress($text), "var foo=(baz)?'bar':'bla';"); + + } } //Setup VIM: ex: et ts=4 enc=utf-8 : diff --git a/lib/exe/js.php b/lib/exe/js.php index 7ff60710ca712bdb7a9bcdbdd88be9b242cd91ff..2aa9c43996449910e10167cc2db2b2eef169802b 100644 --- a/lib/exe/js.php +++ b/lib/exe/js.php @@ -238,7 +238,7 @@ function js_compress($s){ $len = strlen($s); // items that don't need spaces next to them - $chars = '^&|!+\-*\/%=:;,{}()<>% \t\n\r'; + $chars = '^&|!+\-*\/%=\?:;,{}()<>% \t\n\r'; ob_start(); while($i < $len){ @@ -286,11 +286,12 @@ function js_compress($s){ // double quote strings if($ch == '"'){ $j = 1; - while( $s{$i+$j} != '"' ){ - while( ($s{$i+$j} != '\\') && ($s{$i+$j} != '"') ){ - $j = $j + 1; + while( $s{$i+$j} != '"' && ($i+$j < $len)){ + if( $s{$i+$j} == '\\' && $s{$i+$j+1} == '"' ){ + $j += 2; + }else{ + $j += 1; } - if($s{$i+$j} == '\\') $j = $j + 2; } echo substr($s,$i,$j+1); $i = $i + $j + 1; @@ -300,11 +301,12 @@ function js_compress($s){ // single quote strings if($ch == "'"){ $j = 1; - while( $s{$i+$j} != "'" ){ - while( ($s{$i+$j} != '\\') && ($s{$i+$j} != "'") ){ - $j = $j + 1; + while( $s{$i+$j} != "'" && ($i+$j < $len)){ + if( $s{$i+$j} == '\\' && $s{$i+$j+1} == "'" ){ + $j += 2; + }else{ + $j += 1; } - if ($s{$i+$j} == '\\') $j = $j + 2; } echo substr($s,$i,$j+1); $i = $i + $j + 1;