示例#1
0
function test_Minify()
{
    global $thisDir;
    $minifyTestPath = __DIR__ . '/_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);
    $minify = new Minify(new Minify_Cache_Null());
    $env = new Minify_Env(array('server' => $_SERVER));
    $sourceFactory = new Minify_Source_Factory($env, array(), new Minify_Cache_Null());
    $controller = new Minify_Controller_Files($env, $sourceFactory);
    $output = $minify->serve($controller, array('files' => $thisDir . '/_test_files/css/styles.css', 'quiet' => true, 'lastModifiedTime' => $lastModified, 'encodeOutput' => false));
    $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', '_responseCode' => 'HTTP/1.0 304 Not Modified'));
    $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_CSSmin', false), 'Minify : minifier classes aren\'t loaded for 304s');
    // Test JS and Expires
    $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, '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', 'Content-Length' => countBytes($content), 'Content-Type' => 'application/x-javascript; charset=utf-8'));
    unset($_SERVER['HTTP_IF_NONE_MATCH']);
    unset($_SERVER['HTTP_IF_MODIFIED_SINCE']);
    $env = new Minify_Env(array('server' => $_SERVER));
    $sourceFactory = new Minify_Source_Factory($env, array(), new Minify_Cache_Null());
    $controller = new Minify_Controller_Files($env, $sourceFactory);
    $output = $minify->serve($controller, 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
    $expected = ";function h(){}";
    $output = $minify->serve($controller, 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($controller, 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($controller, array('files' => array($minifyTestPath . '/issue89_1.css', $minifyTestPath . '/issue89_2.css'), 'quiet' => true, 'encodeOutput' => false));
    $output = $output['content'];
    $defaultOptions = $minify->getDefaultOptions();
    $passed = assertTrue(0 === strpos($output, $defaultOptions['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($controller, array('files' => array($minifyTestPath . '/issue89_1.css'), 'quiet' => true, 'encodeOutput' => false));
    $output = $output['content'];
    $passed = assertTrue(false === strpos($output, $defaultOptions['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 Issue 132
    if (function_exists('mb_strlen') && (int) ini_get('mbstring.func_overload') & 2) {
        $output = $minify->serve($controller, array('files' => array(__DIR__ . '/_test_files/js/issue132.js'), 'quiet' => true, 'encodeOutput' => false));
        $passed = assertTrue($output['headers']['Content-Length'] == 77, 'Minify : Issue 132 : mbstring.func_overload shouldn\'t cause incorrect Content-Length');
    }
    // Test minifying CSS and responding with Etag/Last-Modified
    // 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', 'Content-Length' => countBytes($expectedContent), 'Content-Type' => 'text/css; charset=utf-8'));
    $env = new Minify_Env(array('server' => $_SERVER));
    $sourceFactory = new Minify_Source_Factory($env, array(), new Minify_Cache_Null());
    $controller = new Minify_Controller_Files($env, $sourceFactory);
    $output = $minify->serve($controller, 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";
        }
    }
}