diff --git a/laravel/asset.php b/laravel/asset.php index c04f0e3d..b8aeb448 100644 --- a/laravel/asset.php +++ b/laravel/asset.php @@ -254,7 +254,7 @@ protected function asset($group, $name) // ensure that we attach the correct path to the asset. if (filter_var($asset['source'], FILTER_VALIDATE_URL) === false) { - $asset['source'] = Bundle::assets($this->bundle).$asset['source']; + $asset['source'] = $this->path($asset['source']); } return HTML::$group($asset['source'], $asset['attributes']); diff --git a/laravel/config.php b/laravel/config.php index d39918c3..1d9da14f 100644 --- a/laravel/config.php +++ b/laravel/config.php @@ -18,7 +18,7 @@ class Config { * * @var array */ - protected static $cache = array(); + public static $cache = array(); /** * Determine if a configuration item or file exists. diff --git a/tests/cases/laravel/asset.test.php b/tests/cases/laravel/asset.test.php index f89f2558..04d768bc 100644 --- a/tests/cases/laravel/asset.test.php +++ b/tests/cases/laravel/asset.test.php @@ -7,6 +7,8 @@ class AssetTest extends PHPUnit_Framework_TestCase { */ public function setUp() { + Config::$items = array(); + Config::$cache = array(); Asset::$containers = array(); } @@ -52,7 +54,7 @@ public function testContainerMethodsCanBeDynamicallyCalled() */ public function testNameIsSetOnAssetContainerConstruction() { - $container = new Laravel\Asset_Container('foo'); + $container = $this->getContainer(); $this->assertEquals('foo', $container->name); } @@ -64,7 +66,7 @@ public function testNameIsSetOnAssetContainerConstruction() */ public function testAddMethodProperlySniffsAssetType() { - $container = new Laravel\Asset_Container('foo'); + $container = $this->getContainer(); $container->add('jquery', 'jquery.js'); $container->add('common', 'common.css'); @@ -80,7 +82,7 @@ public function testAddMethodProperlySniffsAssetType() */ public function testStyleMethodProperlyRegistersAnAsset() { - $container = new Laravel\Asset_Container('foo'); + $container = $this->getContainer(); $container->style('common', 'common.css'); @@ -94,7 +96,7 @@ public function testStyleMethodProperlyRegistersAnAsset() */ public function testStyleMethodProperlySetsMediaAttributeIfNotSet() { - $container = new Laravel\Asset_Container('foo'); + $container = $this->getContainer(); $container->style('common', 'common.css'); @@ -108,7 +110,7 @@ public function testStyleMethodProperlySetsMediaAttributeIfNotSet() */ public function testStyleMethodProperlyIgnoresMediaAttributeIfSet() { - $container = new Laravel\Asset_Container('foo'); + $container = $this->getContainer(); $container->style('common', 'common.css', array(), array('media' => 'print')); @@ -122,11 +124,139 @@ public function testStyleMethodProperlyIgnoresMediaAttributeIfSet() */ public function testScriptMethodProperlyRegistersAnAsset() { - $container = new Laravel\Asset_Container('foo'); + $container = $this->getContainer(); $container->script('jquery', 'jquery.js'); $this->assertEquals('jquery.js', $container->assets['script']['jquery']['source']); } + /** + * Test the Asset_Container::add method properly sets dependencies. + * + * @group laravel + */ + public function testAddMethodProperlySetsDependencies() + { + $container = $this->getContainer(); + + $container->add('common', 'common.css', 'jquery'); + $container->add('jquery', 'jquery.js', array('jquery-ui')); + + $this->assertEquals(array('jquery'), $container->assets['style']['common']['dependencies']); + $this->assertEquals(array('jquery-ui'), $container->assets['script']['jquery']['dependencies']); + } + + /** + * Test the Asset_Container::add method properly sets attributes. + * + * @group laravel + */ + public function testAddMethodProperlySetsAttributes() + { + $container = $this->getContainer(); + + $container->add('common', 'common.css', array(), array('media' => 'print')); + $container->add('jquery', 'jquery.js', array(), array('defer')); + + $this->assertEquals(array('media' => 'print'), $container->assets['style']['common']['attributes']); + $this->assertEquals(array('defer'), $container->assets['script']['jquery']['attributes']); + } + + /** + * Test the Asset_Container::bundle method. + * + * @group laravel + */ + public function testBundleMethodCorrectlySetsTheAssetBundle() + { + $container = $this->getContainer(); + + $container->bundle('eloquent'); + + $this->assertEquals('eloquent', $container->bundle); + } + + /** + * Test the Asset_Container::path method. + * + * @group laravel + */ + public function testPathMethodReturnsCorrectPathForABundleAsset() + { + Config::$cache['application.url'] = 'http://localhost'; + + $container = $this->getContainer(); + + $container->bundle('eloquent'); + + $this->assertEquals('http://localhost/bundles/eloquent/foo.jpg', $container->path('foo.jpg')); + } + + /** + * Test the Asset_Container::path method. + * + * @group laravel + */ + public function testPathMethodReturnsCorrectPathForAnApplicationAsset() + { + Config::$cache['application.url'] = 'http://localhost'; + + $container = $this->getContainer(); + + $this->assertEquals('http://localhost/foo.jpg', $container->path('foo.jpg')); + } + + /** + * Test the Asset_Container::scripts method. + * + * @group laravel + */ + public function testScriptsCanBeRetrieved() + { + $container = $this->getContainer(); + + $container->script('dojo', 'dojo.js', array('jquery-ui')); + $container->script('jquery', 'jquery.js', array('jquery-ui', 'dojo')); + $container->script('jquery-ui', 'jquery-ui.js'); + + $scripts = $container->scripts(); + + $this->assertTrue(strpos($scripts, 'jquery.js') > 0); + $this->assertTrue(strpos($scripts, 'jquery.js') > strpos($scripts, 'jquery-ui.js')); + $this->assertTrue(strpos($scripts, 'dojo.js') > strpos($scripts, 'jquery-ui.js')); + } + + /** + * Test the Asset_Container::styles method. + * + * @group laravel + */ + public function testStylesCanBeRetrieved() + { + $container = $this->getContainer(); + + $container->style('dojo', 'dojo.css', array('jquery-ui'), array('media' => 'print')); + $container->style('jquery', 'jquery.css', array('jquery-ui', 'dojo')); + $container->style('jquery-ui', 'jquery-ui.css'); + + $styles = $container->styles(); + + $this->assertTrue(strpos($styles, 'jquery.css') > 0); + $this->assertTrue(strpos($styles, 'media="print"') > 0); + $this->assertTrue(strpos($styles, 'jquery.css') > strpos($styles, 'jquery-ui.css')); + $this->assertTrue(strpos($styles, 'dojo.css') > strpos($styles, 'jquery-ui.css')); + } + + /** + * Get an asset container instance. + * + * @param string $name + * @return Asset_Container + */ + private function getContainer($name = 'foo') + { + return new Laravel\Asset_Container($name); + } + } \ No newline at end of file