99use AssetManager \Cache \FilePathCache ;
1010use AssetManager \Service \AssetManager ;
1111use AssetManager \Service \MimeResolver ;
12+ use AssetManager \Resolver \CollectionResolver ;
13+ use AssetManager \Resolver \AggregateResolver ;
1214use Zend \Http \Response ;
1315use Zend \Http \PhpEnvironment \Request ;
1416use Zend \Console \Request as ConsoleRequest ;
@@ -23,6 +25,7 @@ public function setUp()
2325 require_once __DIR__ . '/../../_files/JSMin.inc ' ;
2426 require_once __DIR__ . '/../../_files/CustomFilter.php ' ;
2527 require_once __DIR__ . '/../../_files/BrokenFilter.php ' ;
28+ require_once __DIR__ . '/../../_files/ReverseFilter.php ' ;
2629 }
2730
2831 protected function getRequest ()
@@ -54,6 +57,24 @@ protected function getResolver($resolveTo = __FILE__)
5457 return $ resolver ;
5558 }
5659
60+ public function getCollectionResolver ()
61+ {
62+ $ aggregateResolver = new AggregateResolver ;
63+ $ mockedResolver = $ this ->getResolver (__DIR__ . '/../../_files/require-jquery.js ' );
64+ $ collArr = array (
65+ 'blah.js ' => array (
66+ 'asset-path '
67+ )
68+ );
69+ $ resolver = new CollectionResolver ($ collArr );
70+ $ resolver ->setAggregateResolver ($ aggregateResolver );
71+
72+ $ aggregateResolver ->attach ($ mockedResolver , 500 );
73+ $ aggregateResolver ->attach ($ resolver , 1000 );
74+
75+ return $ resolver ;
76+ }
77+
5778 public function testConstruct ()
5879 {
5980 $ resolver = $ this ->getMock ('AssetManager\Resolver\ResolverInterface ' );
@@ -209,6 +230,41 @@ public function testSetExtensionFilters()
209230 $ this ->assertEquals ($ minified , $ response ->getBody ());
210231 }
211232
233+ public function testSetExtensionFiltersNotDuplicate ()
234+ {
235+ $ config = array (
236+ 'filters ' => array (
237+ 'js ' => array (
238+ array (
239+ 'filter ' => '\ReverseFilter ' ,
240+ ),
241+ ),
242+ ),
243+ );
244+
245+ $ resolver = $ this ->getCollectionResolver ();
246+ $ assetFilterManager = new AssetFilterManager ($ config ['filters ' ]);
247+ $ mimeResolver = new MimeResolver ;
248+ $ assetFilterManager ->setMimeResolver ($ mimeResolver );
249+ $ resolver ->setAssetFilterManager ($ assetFilterManager );
250+
251+ $ response = new Response ;
252+ $ request = $ this ->getRequest ();
253+ // Have to change uri because asset-path would cause an infinite loop
254+ $ request ->setUri ('http://localhost/base-path/blah.js ' );
255+
256+ $ assetCacheManager = $ this ->getAssetCacheManagerMock ();
257+ $ assetManager = new AssetManager ($ resolver ->getAggregateResolver (), $ config );
258+ $ assetManager ->setAssetCacheManager ($ assetCacheManager );
259+ $ assetManager ->setAssetFilterManager ($ assetFilterManager );
260+
261+ $ this ->assertTrue ($ assetManager ->resolvesToAsset ($ request ));
262+ $ assetManager ->setAssetOnResponse ($ response );
263+
264+ $ reversedOnlyOnce = '1 ' . strrev (file_get_contents (__DIR__ . '/../../_files/require-jquery.js ' ));
265+ $ this ->assertEquals ($ reversedOnlyOnce , $ response ->getBody ());
266+ }
267+
212268 public function testSetMimeTypeFilters ()
213269 {
214270 $ config = array (
@@ -323,7 +379,6 @@ public function testSetFalseClassFilter()
323379
324380 public function testSetAssetOnResponse ()
325381 {
326-
327382 $ assetFilterManager = new AssetFilterManager ();
328383 $ assetCacheManager = $ this ->getAssetCacheManagerMock ();
329384 $ mimeResolver = new MimeResolver ;
0 commit comments