View source
<?php
namespace Drupal\Tests\Core\Asset;
use Drupal\Core\Asset\CssOptimizer;
use Drupal\Tests\UnitTestCase;
class CssOptimizerUnitTest extends UnitTestCase {
protected $backupGlobals = FALSE;
protected $optimizer;
protected function setUp() {
parent::setUp();
$this->optimizer = new CssOptimizer();
}
public function providerTestOptimize() {
$path = 'core/tests/Drupal/Tests/Core/Asset/css_test_files/';
$absolute_path = dirname(__FILE__) . '/css_test_files/';
return [
[
[
'group' => -100,
'type' => 'file',
'weight' => 0.012,
'media' => 'all',
'preprocess' => TRUE,
'data' => $path . 'css_input_without_import.css',
'browsers' => [
'IE' => TRUE,
'!IE' => TRUE,
],
'basename' => 'css_input_without_import.css',
],
file_get_contents($absolute_path . 'css_input_without_import.css.optimized.css'),
],
[
[
'group' => -100,
'type' => 'file',
'weight' => 0.013,
'media' => 'all',
'preprocess' => TRUE,
'data' => $path . 'css_input_with_import.css',
'browsers' => [
'IE' => TRUE,
'!IE' => TRUE,
],
'basename' => 'css_input_with_import.css',
],
str_replace('url(images/icon.png)', 'url(' . file_url_transform_relative(file_create_url($path . 'images/icon.png')) . ')', file_get_contents($absolute_path . 'css_input_with_import.css.optimized.css')),
],
[
[
'group' => -100,
'type' => 'file',
'weight' => 0.013,
'media' => 'all',
'preprocess' => TRUE,
'data' => $path . 'comment_hacks.css',
'browsers' => [
'IE' => TRUE,
'!IE' => TRUE,
],
'basename' => 'comment_hacks.css',
],
file_get_contents($absolute_path . 'comment_hacks.css.optimized.css'),
],
[
[
'group' => -100,
'type' => 'file',
'weight' => 0.013,
'media' => 'all',
'preprocess' => TRUE,
'data' => $path . 'css_subfolder/css_input_with_import.css',
'browsers' => [
'IE' => TRUE,
'!IE' => TRUE,
],
'basename' => 'css_input_with_import.css',
],
str_replace('url(../images/icon.png)', 'url(' . file_url_transform_relative(file_create_url($path . 'images/icon.png')) . ')', file_get_contents($absolute_path . 'css_subfolder/css_input_with_import.css.optimized.css')),
],
[
[
'group' => -100,
'type' => 'file',
'weight' => 0.013,
'media' => 'all',
'preprocess' => TRUE,
'data' => $path . 'charset_sameline.css',
'browsers' => [
'IE' => TRUE,
'!IE' => TRUE,
],
'basename' => 'charset_sameline.css',
],
file_get_contents($absolute_path . 'charset.css.optimized.css'),
],
[
[
'group' => -100,
'type' => 'file',
'weight' => 0.013,
'media' => 'all',
'preprocess' => TRUE,
'data' => $path . 'charset_newline.css',
'browsers' => [
'IE' => TRUE,
'!IE' => TRUE,
],
'basename' => 'charset_newline.css',
],
file_get_contents($absolute_path . 'charset.css.optimized.css'),
],
[
[
'group' => -100,
'type' => 'file',
'weight' => 0.013,
'media' => 'all',
'preprocess' => TRUE,
'data' => $path . 'css_input_with_bom.css',
'browsers' => [
'IE' => TRUE,
'!IE' => TRUE,
],
'basename' => 'css_input_with_bom.css',
],
'.byte-order-mark-test{content:"☃";}' . "\n",
],
[
[
'group' => -100,
'type' => 'file',
'weight' => 0.013,
'media' => 'all',
'preprocess' => TRUE,
'data' => $path . 'css_input_with_charset.css',
'browsers' => [
'IE' => TRUE,
'!IE' => TRUE,
],
'basename' => 'css_input_with_charset.css',
],
'.charset-test{content:"€";}' . "\n",
],
[
[
'group' => -100,
'type' => 'file',
'weight' => 0.013,
'media' => 'all',
'preprocess' => TRUE,
'data' => $path . 'css_input_with_bom_and_charset.css',
'browsers' => [
'IE' => TRUE,
'!IE' => TRUE,
],
'basename' => 'css_input_with_bom_and_charset.css',
],
'.byte-order-mark-charset-test{content:"☃";}' . "\n",
],
[
[
'group' => -100,
'type' => 'file',
'weight' => 0.013,
'media' => 'all',
'preprocess' => TRUE,
'data' => $path . 'css_input_with_utf16_bom.css',
'browsers' => [
'IE' => TRUE,
'!IE' => TRUE,
],
'basename' => 'css_input_with_utf16_bom.css',
],
'.utf16-byte-order-mark-test{content:"☃";}' . "\n",
],
[
[
'group' => -100,
'type' => 'file',
'weight' => 0.013,
'media' => 'all',
'preprocess' => TRUE,
'data' => $path . 'quotes.css',
'browsers' => [
'IE' => TRUE,
'!IE' => TRUE,
],
'basename' => 'quotes.css',
],
file_get_contents($absolute_path . 'quotes.css.optimized.css'),
],
];
}
public function testOptimize($css_asset, $expected) {
global $base_path;
$original_base_path = $base_path;
$base_path = '/';
chdir(realpath(__DIR__ . '/../../../../../../'));
$this
->assertEquals($expected, $this->optimizer
->optimize($css_asset), 'Group of file CSS assets optimized correctly.');
$base_path = $original_base_path;
}
public function testTypeFilePreprocessingDisabled() {
$this
->expectException('Exception');
$this
->expectExceptionMessage('Only file CSS assets with preprocessing enabled can be optimized.');
$css_asset = [
'group' => -100,
'type' => 'file',
'weight' => 0.012,
'media' => 'all',
'preprocess' => FALSE,
'data' => 'tests/Drupal/Tests/Core/Asset/foo.css',
'browsers' => [
'IE' => TRUE,
'!IE' => TRUE,
],
'basename' => 'foo.css',
];
$this->optimizer
->optimize($css_asset);
}
public function testTypeExternal() {
$this
->expectException('Exception');
$this
->expectExceptionMessage('Only file CSS assets can be optimized.');
$css_asset = [
'group' => -100,
'type' => 'external',
'weight' => 0.012,
'media' => 'all',
'preprocess' => TRUE,
'data' => 'http://example.com/foo.js',
'browsers' => [
'IE' => TRUE,
'!IE' => TRUE,
],
];
$this->optimizer
->optimize($css_asset);
}
}
if (!function_exists('Drupal\\Tests\\Core\\Asset\\file_create_url')) {
function file_create_url($uri) {
return 'file_create_url:' . $uri;
}
}
if (!function_exists('Drupal\\Tests\\Core\\Asset\\file_url_transform_relative')) {
function file_url_transform_relative($uri) {
return 'file_url_transform_relative:' . $uri;
}
}
namespace Drupal\Core\Asset;
if (!function_exists('Drupal\\Core\\Asset\\file_create_url')) {
function file_create_url($uri) {
return \Drupal\Tests\Core\Asset\file_create_url($uri);
}
}
if (!function_exists('Drupal\\Core\\Asset\\file_url_transform_relative')) {
function file_url_transform_relative($uri) {
return \Drupal\Tests\Core\Asset\file_url_transform_relative($uri);
}
}
if (!function_exists('Drupal\\Core\\Asset\\file_uri_scheme')) {
function file_uri_scheme($uri) {
return FALSE;
}
}