From 316b384b1f3202dd666dae34eb831993d8172017 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Elan=20Ruusam=C3=A4e?= Date: Wed, 18 Nov 2015 18:00:26 +0200 Subject: [PATCH] closure compiler: handle better when api is limited --- tests/JsClosureCompilerTest.php | 176 ++++++++++++++++++-------------- 1 file changed, 102 insertions(+), 74 deletions(-) diff --git a/tests/JsClosureCompilerTest.php b/tests/JsClosureCompilerTest.php index 05db73c..5b43964 100644 --- a/tests/JsClosureCompilerTest.php +++ b/tests/JsClosureCompilerTest.php @@ -1,8 +1,10 @@ compile($src); - // Too many recent calls to Closure Compiler API to test.\n"; - $this->assertNotContains('Error(22): Too many compiles', $minOutput); + $this->assertSame($minExpected, $minOutput, 'Minify_JS_ClosureCompiler : Overall'); + } - $this->assertSame($minExpected, $minOutput, 'Minify_JS_ClosureCompiler : Overall'); - } + public function test2() + { + $src = "function blah({ return 'blah';} "; + $e = null; + try { + $this->compile($src); + } catch (Minify_JS_ClosureCompiler_Exception $e) { + } + $this->assertInstanceOf('Minify_JS_ClosureCompiler_Exception', $e, 'Throws Minify_JS_ClosureCompiler_Exception'); + } - public function test2() { - $src = "function blah({ return 'blah';} "; - try { - Minify_JS_ClosureCompiler::minify($src); - $this->fail('Expected exception not thrown'); - } catch (Exception $e) { - $this->assertInstanceOf('Minify_JS_ClosureCompiler_Exception', $e, 'Throws Minify_JS_ClosureCompiler_Exception'); - } - } + // Test maximum byte size check (default) + public function test3() + { + $fn = "(function() {})();"; + $src = str_repeat($fn, ceil(Minify_JS_ClosureCompiler::DEFAULT_MAX_BYTES / strlen($fn))); + $e = null; + try { + $this->compile($src); + } catch (Minify_JS_ClosureCompiler_Exception $e) { + } + $this->assertInstanceOf('Minify_JS_ClosureCompiler_Exception', $e, 'Throws Minify_JS_ClosureCompiler_Exception'); - // Test maximum byte size check (default) - public function test3() { - $fn = "(function() {})();"; - $src = str_repeat($fn, ceil(Minify_JS_ClosureCompiler::DEFAULT_MAX_BYTES / strlen($fn))); - try { - Minify_JS_ClosureCompiler::minify($src); - $this->fail('Expected exception not thrown'); - } catch (Exception $e) { - $this->assertInstanceOf('Minify_JS_ClosureCompiler_Exception', $e, 'Throws Minify_JS_ClosureCompiler_Exception'); + $expected = 'POST content larger than ' . Minify_JS_ClosureCompiler::DEFAULT_MAX_BYTES . ' bytes'; + $this->assertEquals($expected, $e->getMessage(), 'Message must tell how big maximum byte size is'); + } - $expected = 'POST content larger than ' . Minify_JS_ClosureCompiler::DEFAULT_MAX_BYTES . ' bytes'; - $this->assertEquals($expected, $e->getMessage(), 'Message must tell how big maximum byte size is'); - } - } + // Test maximum byte size check (no limit) + public function test4() + { + $src = "(function(){})();"; + $minOutput = $this->compile($src, array( + Minify_JS_ClosureCompiler::OPTION_MAX_BYTES => 0 + )); - // Test maximum byte size check (no limit) - public function test4() { - $src = "(function(){})();"; - $minOutput = Minify_JS_ClosureCompiler::minify($src, array( - Minify_JS_ClosureCompiler::OPTION_MAX_BYTES => 0 - )); + $this->assertSame($src, $minOutput, 'With no limit set, it should compile properly'); + } - $this->assertSame($src, $minOutput, 'With no limit set, it should compile properly'); - } + // Test maximum byte size check (custom) + public function test5() + { + $src = "(function() {})();"; + $allowedBytes = 5; + $e = null; + try { + $this->compile($src, array( + Minify_JS_ClosureCompiler::OPTION_MAX_BYTES => $allowedBytes + )); + } catch (Minify_JS_ClosureCompiler_Exception $e) { + } + $this->assertInstanceOf('Minify_JS_ClosureCompiler_Exception', $e, 'Throws Minify_JS_ClosureCompiler_Exception'); - // Test maximum byte size check (custom) - public function test5() { - $src = "(function() {})();"; - $allowedBytes = 5; - try { - Minify_JS_ClosureCompiler::minify($src, array( - Minify_JS_ClosureCompiler::OPTION_MAX_BYTES => $allowedBytes - )); - } catch (Exception $e) { - $this->assertInstanceOf('Minify_JS_ClosureCompiler_Exception', $e, 'Throws Minify_JS_ClosureCompiler_Exception'); + $expected = 'POST content larger than ' . $allowedBytes . ' bytes'; + $this->assertEquals($expected, $e->getMessage(), 'Message must tell how big maximum byte size is'); + } - $expected = 'POST content larger than ' . $allowedBytes . ' bytes'; - $this->assertEquals($expected, $e->getMessage(), 'Message must tell how big maximum byte size is'); - } - } + // Test additional options passed to HTTP request + public function test6() + { + $ecmascript5 = "[1,].length;"; + $e = null; + try { + $this->compile($ecmascript5); + } catch (Minify_JS_ClosureCompiler_Exception $e) { + } + $this->assertInstanceOf('Minify_JS_ClosureCompiler_Exception', $e, 'Throws Minify_JS_ClosureCompiler_Exception'); + } - // Test additional options passed to HTTP request - public function test6() { - $ecmascript5 = "[1,].length;"; - $exc = null; - try { - Minify_JS_ClosureCompiler::minify($ecmascript5); - $this->fail('Expected exception not thrown'); + public function test7() + { + $ecmascript5 = "[1,].length;"; - } catch (Exception $e) { - $this->assertInstanceOf('Minify_JS_ClosureCompiler_Exception', $e, 'Throws Minify_JS_ClosureCompiler_Exception'); - } - } + $minExpected = '1;'; + $minOutput = $this->compile($ecmascript5, array( + Minify_JS_ClosureCompiler::OPTION_ADDITIONAL_OPTIONS => array( + 'language' => 'ECMASCRIPT5' + ) + )); + $this->assertSame($minExpected, $minOutput, 'Language option should make it compile'); + } - public function test7() { - $ecmascript5 = "[1,].length;"; + /** + * Call closure compiler, but intercept API limit errors. + * + * @param string $script + * @param array $options + * @return string + */ + private function compile($script, $options = array()) + { + $result = Minify_JS_ClosureCompiler::minify($script, $options); - $minExpected = '1;'; - $minOutput = Minify_JS_ClosureCompiler::minify($ecmascript5, array( - Minify_JS_ClosureCompiler::OPTION_ADDITIONAL_OPTIONS => array( - 'language' => 'ECMASCRIPT5' - ) - )); - $this->assertSame($minExpected, $minOutput, 'Language option should make it compile'); - } + // output may contain an error message, and original source: + // /* Received errors from Closure Compiler API: + // Error(22): Too many compiles performed recently. Try again later. + // (Using fallback minifier) + // */ + // (function(window,undefined){function addOne(input){return 1+input;} + // window.addOne=addOne;window.undefined=undefined;})(window); + + $this->assertNotContains('Error(22): Too many compiles', $result); + + return $result; + } }