dir = sys_get_temp_dir().'/assetic_tests_'.rand(11111, 99999); mkdir($this->dir); $this->writer = new AssetWriter($this->dir, array( 'locale' => array('en', 'de', 'fr'), 'browser' => array('ie', 'firefox', 'other'), 'gzip' => array('gzip', '') )); } protected function tearDown() { array_map('unlink', glob($this->dir.'/*')); rmdir($this->dir); } public function testWriteManagerAssets() { $asset = $this->getMock('Assetic\\Asset\\AssetInterface'); $am = $this->getMock('Assetic\\AssetManager'); $am->expects($this->once()) ->method('getNames') ->will($this->returnValue(array('foo'))); $am->expects($this->once()) ->method('get') ->with('foo') ->will($this->returnValue($asset)); $asset->expects($this->atLeastOnce()) ->method('getTargetPath') ->will($this->returnValue('target_url')); $asset->expects($this->once()) ->method('dump') ->will($this->returnValue('content')); $asset->expects($this->atLeastOnce()) ->method('getVars') ->will($this->returnValue(array())); $asset->expects($this->atLeastOnce()) ->method('getValues') ->will($this->returnValue(array())); $this->writer->writeManagerAssets($am); $this->assertFileExists($this->dir.'/target_url'); $this->assertEquals('content', file_get_contents($this->dir.'/target_url')); } public function testWriteAssetWithVars() { $asset = $this->getMock('Assetic\Asset\AssetInterface'); $asset->expects($this->atLeastOnce()) ->method('getVars') ->will($this->returnValue(array('locale'))); $self = $this; $expectedValues = array( array('locale' => 'en'), array('locale' => 'de'), array('locale' => 'fr'), ); $asset->expects($this->exactly(3)) ->method('setValues') ->will($this->returnCallback(function($values) use($self, $expectedValues) { static $counter = 0; $self->assertEquals($expectedValues[$counter++], $values); })); $asset->expects($this->exactly(3)) ->method('getValues') ->will($this->returnCallback(function() use($expectedValues) { static $counter = 0; return $expectedValues[$counter++]; })); $asset->expects($this->exactly(3)) ->method('dump') ->will($this->onConsecutiveCalls('en', 'de', 'fr')); $asset->expects($this->atLeastOnce()) ->method('getTargetPath') ->will($this->returnValue('target.{locale}')); $this->writer->writeAsset($asset); $this->assertFileExists($this->dir.'/target.en'); $this->assertFileExists($this->dir.'/target.de'); $this->assertFileExists($this->dir.'/target.fr'); $this->assertEquals('en', file_get_contents($this->dir.'/target.en')); $this->assertEquals('de', file_get_contents($this->dir.'/target.de')); $this->assertEquals('fr', file_get_contents($this->dir.'/target.fr')); } public function testAssetWithInputVars() { $asset = new FileAsset(__DIR__.'/Fixture/messages.{locale}.js', array(), null, null, array('locale')); $asset->setTargetPath('messages.{locale}.js'); $this->writer->writeAsset($asset); $this->assertFileExists($this->dir.'/messages.en.js'); $this->assertFileExists($this->dir.'/messages.de.js'); $this->assertFileExists($this->dir.'/messages.fr.js'); $this->assertEquals('var messages = {"text.greeting": "Hello %name%!"};', file_get_contents($this->dir.'/messages.en.js')); $this->assertEquals('var messages = {"text.greeting": "Hallo %name%!"};', file_get_contents($this->dir.'/messages.de.js')); $this->assertEquals('var messages = {"text.greet": "All\u00f4 %name%!"};', file_get_contents($this->dir.'/messages.fr.js')); } /** * @dataProvider getCombinationTests */ public function testGetCombinations($vars, $expectedCombinations) { $ref = new \ReflectionMethod($this->writer, 'getCombinations'); $ref->setAccessible(true); $this->assertEquals($expectedCombinations, $ref->invoke($this->writer, $vars)); } public function getCombinationTests() { $tests = array(); // no variables $tests[] = array( array(), array(array()) ); // one variables $tests[] = array( array('locale'), array( array('locale' => 'en'), array('locale' => 'de'), array('locale' => 'fr'), ) ); // two variables $tests[] = array( array('locale', 'browser'), array( array('locale' => 'en', 'browser' => 'ie'), array('locale' => 'de', 'browser' => 'ie'), array('locale' => 'fr', 'browser' => 'ie'), array('locale' => 'en', 'browser' => 'firefox'), array('locale' => 'de', 'browser' => 'firefox'), array('locale' => 'fr', 'browser' => 'firefox'), array('locale' => 'en', 'browser' => 'other'), array('locale' => 'de', 'browser' => 'other'), array('locale' => 'fr', 'browser' => 'other'), ) ); // three variables $tests[] = array( array('locale', 'browser', 'gzip'), array( array('locale' => 'en', 'browser' => 'ie', 'gzip' => 'gzip'), array('locale' => 'de', 'browser' => 'ie', 'gzip' => 'gzip'), array('locale' => 'fr', 'browser' => 'ie', 'gzip' => 'gzip'), array('locale' => 'en', 'browser' => 'firefox', 'gzip' => 'gzip'), array('locale' => 'de', 'browser' => 'firefox', 'gzip' => 'gzip'), array('locale' => 'fr', 'browser' => 'firefox', 'gzip' => 'gzip'), array('locale' => 'en', 'browser' => 'other', 'gzip' => 'gzip'), array('locale' => 'de', 'browser' => 'other', 'gzip' => 'gzip'), array('locale' => 'fr', 'browser' => 'other', 'gzip' => 'gzip'), array('locale' => 'en', 'browser' => 'ie', 'gzip' => ''), array('locale' => 'de', 'browser' => 'ie', 'gzip' => ''), array('locale' => 'fr', 'browser' => 'ie', 'gzip' => ''), array('locale' => 'en', 'browser' => 'firefox', 'gzip' => ''), array('locale' => 'de', 'browser' => 'firefox', 'gzip' => ''), array('locale' => 'fr', 'browser' => 'firefox', 'gzip' => ''), array('locale' => 'en', 'browser' => 'other', 'gzip' => ''), array('locale' => 'de', 'browser' => 'other', 'gzip' => ''), array('locale' => 'fr', 'browser' => 'other', 'gzip' => ''), ) ); return $tests; } }