/**
  * Builds asset file path based off url
  *
  * @param string $url Asset URL
  * @return string|void Absolute path for asset file
  */
 protected function _getAssetFile($url)
 {
     $parts = explode('/', $url);
     if ($parts[0] === 'ASSETS') {
         unset($parts[0]);
         $url = array_values($parts);
         return APP . 'Assets' . DS . join(DS, $url);
     }
     return parent::_getAssetFile($url);
 }
 /**
  * Test assets
  *
  * @dataProvider assetProvider
  * @return void
  * @triggers Dispatcher.beforeDispatch $this, compact('request', 'response')
  */
 public function testAsset($url, $file)
 {
     Plugin::load(['Company/TestPluginThree', 'TestPlugin', 'PluginJs']);
     $filter = new AssetFilter();
     $response = $this->getMock('Cake\\Network\\Response', ['_sendHeader']);
     $request = new Request($url);
     $event = new Event('Dispatcher.beforeDispatch', $this, compact('request', 'response'));
     ob_start();
     $filter->beforeDispatch($event);
     $result = ob_get_contents();
     ob_end_clean();
     $path = TEST_APP . str_replace('/', DS, $file);
     $file = file_get_contents($path);
     $this->assertEquals($file, $result);
     $expected = filesize($path);
     $headers = $response->header();
     $this->assertEquals($expected, $headers['Content-Length']);
 }