From 6f5721d2db7f290a4528ea4c0b0be21621f670bc Mon Sep 17 00:00:00 2001 From: Steve Clay Date: Mon, 1 Apr 2013 11:25:27 -0400 Subject: [PATCH] Fixes #53 (github) handles division following line break --- min/lib/JSMin.php | 4 ++-- min_unit_tests/_test_files/js/issue256.js | 4 +--- min_unit_tests/_test_files/js/issue256.min.js | 3 +-- min_unit_tests/_test_files/js/issue74.js | 4 ---- min_unit_tests/_test_files/js/issue74.min.js | 1 - .../_test_files/js/issue74.min_plus.js | 1 - min_unit_tests/_test_files/js/regexes.js | 20 +++++++++++++++++++ min_unit_tests/_test_files/js/regexes.min.js | 3 +++ min_unit_tests/test_JSMin.php | 6 +++--- 9 files changed, 30 insertions(+), 16 deletions(-) delete mode 100644 min_unit_tests/_test_files/js/issue74.js delete mode 100644 min_unit_tests/_test_files/js/issue74.min.js delete mode 100644 min_unit_tests/_test_files/js/issue74.min_plus.js create mode 100644 min_unit_tests/_test_files/js/regexes.js create mode 100644 min_unit_tests/_test_files/js/regexes.min.js diff --git a/min/lib/JSMin.php b/min/lib/JSMin.php index d94b96f..c84dd84 100644 --- a/min/lib/JSMin.php +++ b/min/lib/JSMin.php @@ -268,11 +268,11 @@ class JSMin { */ protected function isRegexpLiteral() { - if (false !== strpos("(,=:[!&|?+-~*\n{", $this->a)) { + if (false !== strpos("(,=:[!&|?+-~*{;", $this->a)) { // we obviously aren't dividing return true; } - if (' ' === $this->a) { + if ($this->a === ' ' || $this->a === "\n") { $length = strlen($this->output); if ($length < 2) { // weird edge case return true; diff --git a/min_unit_tests/_test_files/js/issue256.js b/min_unit_tests/_test_files/js/issue256.js index b8d4eef..519a52f 100644 --- a/min_unit_tests/_test_files/js/issue256.js +++ b/min_unit_tests/_test_files/js/issue256.js @@ -1,5 +1,3 @@ !function(){}(window) -!function(){}(window) - -x = / [/] /; \ No newline at end of file +!function(){}(window) \ No newline at end of file diff --git a/min_unit_tests/_test_files/js/issue256.min.js b/min_unit_tests/_test_files/js/issue256.min.js index 7b50efb..eb1b0d6 100644 --- a/min_unit_tests/_test_files/js/issue256.min.js +++ b/min_unit_tests/_test_files/js/issue256.min.js @@ -1,3 +1,2 @@ !function(){}(window) -!function(){}(window) -x=/ [/] /; \ No newline at end of file +!function(){}(window) \ No newline at end of file diff --git a/min_unit_tests/_test_files/js/issue74.js b/min_unit_tests/_test_files/js/issue74.js deleted file mode 100644 index e12eaeb..0000000 --- a/min_unit_tests/_test_files/js/issue74.js +++ /dev/null @@ -1,4 +0,0 @@ - -function testIssue74() { - return /'/; -} diff --git a/min_unit_tests/_test_files/js/issue74.min.js b/min_unit_tests/_test_files/js/issue74.min.js deleted file mode 100644 index 3442a73..0000000 --- a/min_unit_tests/_test_files/js/issue74.min.js +++ /dev/null @@ -1 +0,0 @@ -function testIssue74(){return /'/;} \ No newline at end of file diff --git a/min_unit_tests/_test_files/js/issue74.min_plus.js b/min_unit_tests/_test_files/js/issue74.min_plus.js deleted file mode 100644 index 9caaa89..0000000 --- a/min_unit_tests/_test_files/js/issue74.min_plus.js +++ /dev/null @@ -1 +0,0 @@ -function testIssue74(){return /'/} \ No newline at end of file diff --git a/min_unit_tests/_test_files/js/regexes.js b/min_unit_tests/_test_files/js/regexes.js new file mode 100644 index 0000000..ef10ad9 --- /dev/null +++ b/min_unit_tests/_test_files/js/regexes.js @@ -0,0 +1,20 @@ +function testIssue74() { + return /'/; +} + +!function(s) { + return /^[£$€?.]/.test(s); +}(); + +typeof + / ' /; + +x = / [/] /; + +1 + +/ foo; + +(2) + +/ foo; \ No newline at end of file diff --git a/min_unit_tests/_test_files/js/regexes.min.js b/min_unit_tests/_test_files/js/regexes.min.js new file mode 100644 index 0000000..934039a --- /dev/null +++ b/min_unit_tests/_test_files/js/regexes.min.js @@ -0,0 +1,3 @@ +function testIssue74(){return /'/;} +!function(s){return /^[£$€?.]/.test(s);}();typeof +/ ' /;x=/ [/] /;1/foo;(2)/foo; \ No newline at end of file diff --git a/min_unit_tests/test_JSMin.php b/min_unit_tests/test_JSMin.php index c375568..ef743c4 100644 --- a/min_unit_tests/test_JSMin.php +++ b/min_unit_tests/test_JSMin.php @@ -47,10 +47,10 @@ function test_JSMin() } } - $src = file_get_contents($thisDir . '/_test_files/js/issue74.js'); - $minExpected = file_get_contents($thisDir . '/_test_files/js/issue74.min.js'); + $src = file_get_contents($thisDir . '/_test_files/js/regexes.js'); + $minExpected = file_get_contents($thisDir . '/_test_files/js/regexes.min.js'); $minOutput = JSMin::minify($src); - assertTrue($minExpected == $minOutput, 'JSMin : Quotes in RegExp literals (Issue 74)'); + assertTrue($minExpected == $minOutput, 'JSMin : Identify RegExp literals'); if (__FILE__ === realpath($_SERVER['SCRIPT_FILENAME'])) { echo "\n---Output: " .countBytes($minOutput). " bytes\n\n{$minOutput}\n\n"; echo "---Expected: " .countBytes($minExpected). " bytes\n\n{$minExpected}\n\n";