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