/**
  * @test
  */
 public function it_returns_merged_array_according_array_priorities()
 {
     $defaults = array('k_1' => 'd1', 'k_2' => 'd2', 'k_3' => function () {
         return 'd3';
     });
     $mandatory = array('k_2' => new RawParam('m2'));
     $params = array('k_1' => 'p1', 'k_2' => 'p2');
     $expected = array('k_1' => 'p1', 'k_2' => 'm2', 'k_3' => 'd3');
     $this->resolver->setDefaults($defaults);
     $this->resolver->setMandatory($mandatory);
     $this->assertSame($expected, $this->resolver->resolve($params));
 }
 /** @internal */
 private function findCachedFile($uri, $evaluate)
 {
     // TODO: find better way then this hack.
     // This is required if we keep assets on separate [sub]domain or we use base non-root URL for them.
     $cachedPath = $uri;
     $prefix = preg_quote($this->params->getCachePrefix(), '#');
     $pattern = sprintf('#^((?:[a-z]+:)?//.*?)?(?:/\\w+[.]php)?(/%s.*?)$#i', $prefix);
     if (preg_match($pattern, $uri, $m)) {
         $cachedPath = $m[2];
     }
     $cached = $this->params->getWebRoot() . $cachedPath;
     if (!$evaluate) {
         return $cached;
     }
     return $this->normalizeFilePath($cached);
 }