214 lines
		
	
	
		
			7.1 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
		
		
			
		
	
	
			214 lines
		
	
	
		
			7.1 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
|   | <?php | ||
|  | 
 | ||
|  | // currently these only test serve() when passed the 'quiet' options
 | ||
|  | 
 | ||
|  | require_once '_inc.php'; | ||
|  | require_once 'Minify.php'; | ||
|  | 
 | ||
|  | function test_Minify() | ||
|  | { | ||
|  |     global $thisDir; | ||
|  | 
 | ||
|  |     $minifyTestPath = dirname(__FILE__) . '/_test_files/minify'; | ||
|  |     $thisFileActive = (__FILE__ === realpath($_SERVER['SCRIPT_FILENAME'])); | ||
|  |     $tomorrow = $_SERVER['REQUEST_TIME'] + 86400; | ||
|  |     $lastModified = $_SERVER['REQUEST_TIME'] - 86400; | ||
|  | 
 | ||
|  |     // Test 304 response
 | ||
|  | 
 | ||
|  |     // simulate conditional headers
 | ||
|  |     $_SERVER['HTTP_IF_NONE_MATCH'] = "\"{$lastModified}pub\""; | ||
|  |     $_SERVER['HTTP_IF_MODIFIED_SINCE'] = gmdate('D, d M Y H:i:s \G\M\T', $lastModified); | ||
|  | 
 | ||
|  |     $expected = array ( | ||
|  |         'success' => true | ||
|  |         ,'statusCode' => 304 | ||
|  |         ,'content' => '', | ||
|  |         'headers' => array( | ||
|  |             'Expires' => gmdate('D, d M Y H:i:s \G\M\T', $_SERVER['REQUEST_TIME'] + 1800), | ||
|  |             'Vary' => 'Accept-Encoding', | ||
|  |             'Last-Modified' => gmdate('D, d M Y H:i:s \G\M\T', $lastModified), | ||
|  |             'ETag' => "\"pub{$lastModified}\"", | ||
|  |             'Cache-Control' => 'max-age=1800, public', | ||
|  |             '_responseCode' => 'HTTP/1.0 304 Not Modified', | ||
|  |         ) | ||
|  |     ); | ||
|  |     $output = Minify::serve('Files', array( | ||
|  |         'files' => $thisDir . '/_test_files/css/styles.css' // controller casts to array
 | ||
|  |         ,'quiet' => true | ||
|  |         ,'lastModifiedTime' => $lastModified | ||
|  |         ,'encodeOutput' => false | ||
|  |     )); | ||
|  |     $passed = assertTrue($expected === $output, 'Minify : 304 response'); | ||
|  |     if ($thisFileActive) { | ||
|  |         echo "\nOutput: " .var_export($output, 1). "\n\n"; | ||
|  |         if (! $passed) { | ||
|  |             echo "\n\n\n\n---Expected: " .var_export($expected, 1). "\n\n"; | ||
|  |         } | ||
|  |     } | ||
|  | 
 | ||
|  |     assertTrue( | ||
|  |         ! class_exists('Minify_CSS', false) | ||
|  |         && ! class_exists('Minify_Cache', false) | ||
|  |         ,'Minify : cache, and minifier classes aren\'t loaded for 304s' | ||
|  |     ); | ||
|  | 
 | ||
|  |     // Test minifying JS and serving with Expires header
 | ||
|  | 
 | ||
|  |     $content = preg_replace('/\\r\\n?/', "\n", file_get_contents($minifyTestPath . '/minified.js')); | ||
|  |     $lastModified = max( | ||
|  |         filemtime($minifyTestPath . '/email.js') | ||
|  |         ,filemtime($minifyTestPath . '/QueryString.js') | ||
|  |     ); | ||
|  |     $expected = array( | ||
|  |         'success' => true | ||
|  |         ,'statusCode' => 200 | ||
|  |         // JSMin always converts to \n line endings
 | ||
|  |         ,'content' => $content | ||
|  |         ,'headers' => array ( | ||
|  |             'Expires' => gmdate('D, d M Y H:i:s \G\M\T', $tomorrow), | ||
|  |             'Vary' => 'Accept-Encoding', | ||
|  |             'Last-Modified' => gmdate('D, d M Y H:i:s \G\M\T', $lastModified), | ||
|  |             'ETag' => "\"pub{$lastModified}\"", | ||
|  |             'Cache-Control' => 'max-age=86400, public', | ||
|  |             'Content-Length' => strlen($content), | ||
|  |             'Content-Type' => 'application/x-javascript; charset=utf-8', | ||
|  |         ) | ||
|  |     ); | ||
|  |     $output = Minify::serve('Files', array( | ||
|  |         'files' => array( | ||
|  |             $minifyTestPath . '/email.js' | ||
|  |             ,$minifyTestPath . '/QueryString.js' | ||
|  |         ) | ||
|  |         ,'quiet' => true | ||
|  |         ,'maxAge' => 86400 | ||
|  |         ,'encodeOutput' => false | ||
|  |     )); | ||
|  |      | ||
|  |     $passed = assertTrue($expected === $output, 'Minify : JS and Expires'); | ||
|  |     if ($thisFileActive) { | ||
|  |         echo "\nOutput: " .var_export($output, 1). "\n\n"; | ||
|  |         if (! $passed) { | ||
|  |             echo "\n\n\n\n---Expected: " .var_export($expected, 1). "\n\n"; | ||
|  |         }     | ||
|  |     } | ||
|  |      | ||
|  |     // test for Issue 73
 | ||
|  |     Minify::setCache(null); | ||
|  |      | ||
|  |     $expected = ";function h(){}"; | ||
|  |     $output = Minify::serve('Files', array( | ||
|  |         'files' => array( | ||
|  |             $minifyTestPath . '/issue73_1.js' | ||
|  |             ,$minifyTestPath . '/issue73_2.js' | ||
|  |         ) | ||
|  |         ,'quiet' => true | ||
|  |         ,'encodeOutput' => false | ||
|  |     )); | ||
|  |     $output = $output['content']; | ||
|  |      | ||
|  |     $passed = assertTrue($expected === $output, 'Minify : Issue 73'); | ||
|  |     if ($thisFileActive) { | ||
|  |         if (! $passed) { | ||
|  |             echo "\n---Output  : " .var_export($output, 1). "\n"; | ||
|  |             echo "---Expected: " .var_export($expected, 1). "\n\n"; | ||
|  |         }     | ||
|  |     } | ||
|  |      | ||
|  |     // test for Issue 89
 | ||
|  |     $expected = file_get_contents($minifyTestPath . '/issue89_out.min.css'); | ||
|  |     $output = Minify::serve('Files', array( | ||
|  |         'files' => array( | ||
|  |             $minifyTestPath . '/issue89_1.css' | ||
|  |             ,$minifyTestPath . '/issue89_2.css' | ||
|  |         ) | ||
|  |         ,'quiet' => true | ||
|  |         ,'encodeOutput' => false | ||
|  |         ,'bubbleCssImports' => true | ||
|  |     )); | ||
|  |     $output = $output['content']; | ||
|  |     $passed = assertTrue($expected === $output, 'Minify : Issue 89 : bubbleCssImports'); | ||
|  |     if ($thisFileActive) { | ||
|  |         if (! $passed) { | ||
|  |             echo "\n---Output  : " .var_export($output, 1). "\n"; | ||
|  |             echo "---Expected: " .var_export($expected, 1). "\n\n"; | ||
|  |         }     | ||
|  |     } | ||
|  |      | ||
|  |     $output = Minify::serve('Files', array( | ||
|  |         'files' => array( | ||
|  |             $minifyTestPath . '/issue89_1.css' | ||
|  |             ,$minifyTestPath . '/issue89_2.css' | ||
|  |         ) | ||
|  |         ,'quiet' => true | ||
|  |         ,'encodeOutput' => false | ||
|  |     )); | ||
|  |     $output = $output['content']; | ||
|  |     $passed = assertTrue(0 === strpos($output, Minify::$importWarning), 'Minify : Issue 89 : detect invalid imports'); | ||
|  |     if ($thisFileActive) { | ||
|  |         if (! $passed) { | ||
|  |             echo "\n---Output  : " .var_export($output, 1). "\n"; | ||
|  |             echo "---Expected: " .var_export($expected, 1). "\n\n"; | ||
|  |         }     | ||
|  |     } | ||
|  |      | ||
|  |     $output = Minify::serve('Files', array( | ||
|  |         'files' => array( | ||
|  |             $minifyTestPath . '/issue89_1.css' | ||
|  |         ) | ||
|  |         ,'quiet' => true | ||
|  |         ,'encodeOutput' => false | ||
|  |     )); | ||
|  |     $output = $output['content']; | ||
|  |     $passed = assertTrue(false === strpos($output, Minify::$importWarning), 'Minify : Issue 89 : don\'t warn about valid imports'); | ||
|  |     if ($thisFileActive) { | ||
|  |         if (! $passed) { | ||
|  |             echo "\n---Output  : " .var_export($output, 1). "\n"; | ||
|  |             echo "---Expected: " .var_export($expected, 1). "\n\n"; | ||
|  |         }     | ||
|  |     } | ||
|  | 
 | ||
|  |     // Test minifying CSS and responding with Etag/Last-Modified
 | ||
|  | 
 | ||
|  |     Minify::setCache(null); | ||
|  | 
 | ||
|  |     // don't allow conditional headers
 | ||
|  |     unset($_SERVER['HTTP_IF_NONE_MATCH'], $_SERVER['HTTP_IF_MODIFIED_SINCE']); | ||
|  | 
 | ||
|  |     $expectedContent = file_get_contents($minifyTestPath . '/minified.css'); | ||
|  | 
 | ||
|  |     $expected = array( | ||
|  |         'success' => true | ||
|  |         ,'statusCode' => 200 | ||
|  |         ,'content' => $expectedContent | ||
|  |         ,'headers' => array ( | ||
|  |             'Vary' => 'Accept-Encoding', | ||
|  |             'Last-Modified' => gmdate('D, d M Y H:i:s \G\M\T', $lastModified), | ||
|  |             'ETag' => "\"pub{$lastModified}\"", | ||
|  |             'Cache-Control' => 'max-age=0, public', | ||
|  |             'Content-Length' => strlen($expectedContent), | ||
|  |             'Content-Type' => 'text/css; charset=utf-8', | ||
|  |         ) | ||
|  |     ); | ||
|  |     $output = Minify::serve('Files', array( | ||
|  |         'files' => array( | ||
|  |             $thisDir . '/_test_files/css/styles.css' | ||
|  |             ,$thisDir . '/_test_files/css/comments.css' | ||
|  |         ) | ||
|  |         ,'quiet' => true | ||
|  |         ,'lastModifiedTime' => $lastModified | ||
|  |         ,'encodeOutput' => false | ||
|  |         ,'maxAge' => false | ||
|  |     )); | ||
|  | 
 | ||
|  |     $passed = assertTrue($expected === $output, 'Minify : CSS and Etag/Last-Modified'); | ||
|  |     if ($thisFileActive) { | ||
|  |         echo "\nOutput: " .var_export($output, 1). "\n\n"; | ||
|  |         if (! $passed) { | ||
|  |             echo "\n\n\n\n---Expected: " .var_export($expected, 1). "\n\n"; | ||
|  |         } | ||
|  |     } | ||
|  | } | ||
|  | 
 | ||
|  | test_Minify(); |