예제 #1
0
 public function getSkinUrl($file = null, array $params = array())
 {
     if ($this->_needToInject()) {
         return $this->_getNewSkinUrl($file, $params);
     } else {
         return parent::getSkinUrl($file, $params);
     }
 }
예제 #2
0
 /**
  * @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]));
 }
예제 #3
0
 /**
  * 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);
     }
 }
예제 #4
0
 /**
  * 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');
 }
예제 #5
0
 /**
  * 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;
 }
예제 #6
0
 /**
  * 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');
 }
예제 #7
0
 /**
  * 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));
 }