public function getSkinUrl($file = null, array $params = array()) { if ($this->_needToInject()) { return $this->_getNewSkinUrl($file, $params); } else { return parent::getSkinUrl($file, $params); } }
/** * @param string $file * @param string $result * @covers Mage_Core_Model_Design_Package::getSkinUrl * @dataProvider getSkinUrlDataProvider * @magentoConfigFixture current_store dev/static/sign 1 */ public function testGetSkinUrlSigned($devMode, $file, $result) { Mage::setIsDeveloperMode($devMode); $url = $this->_model->getSkinUrl($file); $this->assertEquals(strpos($url, $result), 0); $lastModified = array(); preg_match('/.*\\?(.*)$/i', $url, $lastModified); $this->assertArrayHasKey(1, $lastModified); $this->assertEquals(10, strlen($lastModified[1])); $this->assertLessThanOrEqual(time(), $lastModified[1]); $this->assertGreaterThan(1970, date('Y', $lastModified[1])); }
/** * Materialization of CSS files located in the module * @dataProvider materializeCssFileFromModuleDataProvider */ public function testMaterializeCssFileFromModule($cssSkinFile, $designParams, $expectedCssFile, $expectedCssContent, $expectedRelatedFiles) { $baseDir = Mage::getBaseDir('media') . DIRECTORY_SEPARATOR . 'skin' . DIRECTORY_SEPARATOR; $this->_model->getSkinUrl($cssSkinFile, $designParams); $expectedCssFile = $baseDir . $expectedCssFile; $this->assertFileExists($expectedCssFile); $actualCssContent = file_get_contents($expectedCssFile); $this->assertNotRegExp('/url\\(.*?' . Mage_Core_Model_Design_Package::SCOPE_SEPARATOR . '.*?\\)/', $actualCssContent, 'Materialized CSS file must not contain scope separators in URLs.'); foreach ($expectedCssContent as $expectedCssSubstring) { $this->assertContains($expectedCssSubstring, $actualCssContent); } foreach ($expectedRelatedFiles as $expectedFile) { $expectedFile = $baseDir . '/' . $expectedFile; $this->assertFileExists($expectedFile); } }
/** * Tests what happens when CSS file and its resources are changed - whether they are re-published or not * * @param bool $expectedPublished */ protected function _testPublishChangedResourcesWhenUnchangedCss($expectedPublished) { $fixtureSkinPath = self::$_fixtureTmpDir . '/frontend/test/default/skin/default/'; $publishedPath = self::$_skinPublicDir . '/frontend/test/default/default/en_US/'; // Prepare temporary fixture directory and publish files from it $this->_copyFixtureSkinToTmpDir($fixtureSkinPath); $this->_model->getSkinUrl('style.css'); // Change referenced files copy($fixtureSkinPath . 'images/rectangle.gif', $fixtureSkinPath . 'images/square.gif'); touch($fixtureSkinPath . 'images/square.gif'); file_put_contents($fixtureSkinPath . 'sub.css', '.sub2 {border: 1px solid magenta}', FILE_APPEND); $this->_model->getSkinUrl('style.css'); $assertFileComparison = $expectedPublished ? 'assertFileEquals' : 'assertFileNotEquals'; $this->{$assertFileComparison}($fixtureSkinPath . 'sub.css', $publishedPath . 'sub.css'); $this->{$assertFileComparison}($fixtureSkinPath . 'images/rectangle.gif', $publishedPath . 'images/square.gif'); }
/** * Get skin file url * * @param string $file * @param array $params * @return string */ public function getSkinUrl($file = null, array $params = array()) { $skinUrl = ''; if ($this->_isSassFile($file)) { if (empty($params['_type'])) { $params['_type'] = 'skin'; } $targetFilename = $this->getFilename($file, $params); if ($targetFilename) { $skinUrl = str_replace(Mage::getBaseDir('media') . DS, '', $targetFilename); $skinUrl = str_replace('\\', '/', $skinUrl); $skinUrl = Mage::getBaseUrl('media', isset($params['_secure']) ? (bool) $params['_secure'] : null) . $skinUrl; } } else { $skinUrl = parent::getSkinUrl($file, $params); } return $skinUrl; }
/** * Test changed resources, referenced in non-modified CSS file, are re-published * @magentoAppIsolation enabled */ public function testPublishChangedResourcesWhenUnchangedCss() { $fixtureSkinPath = self::$_fixtureTmpDir . '/frontend/test/default/skin/default/'; $publishedPath = self::$_skinPublicDir . '/frontend/test/default/default/en_US/'; // Prepare temporary fixture directory and publish files from it $this->_copyFixtureSkinToTmpDir($fixtureSkinPath); $this->_model->getSkinUrl('style.css'); // Change referenced files copy($fixtureSkinPath . 'images/rectangle.gif', $fixtureSkinPath . 'images/square.gif'); touch($fixtureSkinPath . 'images/square.gif'); file_put_contents($fixtureSkinPath . 'sub.css', '.sub2 {border: 1px solid magenta}', FILE_APPEND); // Without developer mode nothing must be re-published Mage::setIsDeveloperMode(false); $this->_model->getSkinUrl('style.css'); $this->assertFileNotEquals($fixtureSkinPath . 'sub.css', $publishedPath . 'sub.css'); $this->assertFileNotEquals($fixtureSkinPath . 'images/rectangle.gif', $publishedPath . 'images/square.gif'); // With developer mode all changed files must be re-published Mage::setIsDeveloperMode(true); $this->_model->getSkinUrl('style.css'); $this->assertFileEquals($fixtureSkinPath . 'sub.css', $publishedPath . 'sub.css'); $this->assertFileEquals($fixtureSkinPath . 'images/rectangle.gif', $publishedPath . 'images/square.gif'); }
/** * Create skin url and cut base skin url * * @param Mage_Core_Model_Design_Package $designPackage * @param string $fileName * @return string */ protected function getSkinFile(Mage_Core_Model_Design_Package $designPackage, $fileName) { return str_replace(Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_SKIN), '', $designPackage->getSkinUrl($fileName)); }