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();
 |