/** * @inheritdoc */ public function getProtocolSchemeForUrl($url) { // Set the default result. $result = $this->getDefaultProtocolScheme(); // Lazy compile the patterns. if (is_null($this->compiledProtocolSchemeMap)) { // Retrieve raw patterns from subclass. $this->compiledProtocolSchemeMap = $this->getRawProtocolSchemeMap(); // Compile all wildcard patterns into regular expressions. foreach ($this->compiledProtocolSchemeMap as $index => $entry) { $this->compiledProtocolSchemeMap[$index]['compiled-pattern'] = isset($entry['regex']) && $entry['regex'] ? $entry['pattern'] : UrlUtilities::compileWildcardUrl(trim($entry['pattern'], '/')); } } // Now look for the match to the given URL. foreach ($this->compiledProtocolSchemeMap as $entry) { if (preg_match($entry['compiled-pattern'], $url)) { $result = $entry['protocol']; } } return $result; }
public function testWildcardUrlToRegex() { $this->assertEquals(1, preg_match(UrlUtilities::compileWildcardUrl('?'), '/')); $this->assertEquals(0, preg_match(UrlUtilities::compileWildcardUrl('?'), '/foo')); $this->assertEquals(1, preg_match(UrlUtilities::compileWildcardUrl('??'), '/')); $this->assertEquals(0, preg_match(UrlUtilities::compileWildcardUrl('??'), '/foo')); $this->assertEquals(1, preg_match(UrlUtilities::compileWildcardUrl('???'), '/')); $this->assertEquals(1, preg_match(UrlUtilities::compileWildcardUrl('???'), '/foo')); $this->assertEquals(1, preg_match(UrlUtilities::compileWildcardUrl('????'), '/')); $this->assertEquals(1, preg_match(UrlUtilities::compileWildcardUrl('????'), '/foo')); $this->assertEquals(1, preg_match(UrlUtilities::compileWildcardUrl('/root*'), '/root')); $this->assertEquals(1, preg_match(UrlUtilities::compileWildcardUrl('/root*'), '/root/')); $this->assertEquals(1, preg_match(UrlUtilities::compileWildcardUrl('/root*'), '/root/foo')); $this->assertEquals(1, preg_match(UrlUtilities::compileWildcardUrl('/root*'), '/root/foo/bar')); $this->assertEquals(1, preg_match(UrlUtilities::compileWildcardUrl('/root*'), '/root-with-suffix')); $this->assertEquals(0, preg_match(UrlUtilities::compileWildcardUrl('/root*'), '/')); $this->assertEquals(0, preg_match(UrlUtilities::compileWildcardUrl('/root*'), '/foo')); $this->assertEquals(0, preg_match(UrlUtilities::compileWildcardUrl('/root*'), '/foo/bar')); $this->assertEquals(1, preg_match(UrlUtilities::compileWildcardUrl('/'), '/')); $this->assertEquals(0, preg_match(UrlUtilities::compileWildcardUrl('/'), '/foo/bar')); $this->assertEquals(1, preg_match(UrlUtilities::compileWildcardUrl('/foo/bar'), '/foo/bar')); $this->assertEquals(0, preg_match(UrlUtilities::compileWildcardUrl('/foo/bar'), '/')); $this->assertEquals(1, preg_match(UrlUtilities::compileWildcardUrl('!'), '/')); $this->assertEquals(1, preg_match(UrlUtilities::compileWildcardUrl('!'), '/foo')); $this->assertEquals(1, preg_match(UrlUtilities::compileWildcardUrl('!'), '/foo/bar')); $this->assertEquals(1, preg_match(UrlUtilities::compileWildcardUrl('/root!'), '/root')); $this->assertEquals(1, preg_match(UrlUtilities::compileWildcardUrl('/root!'), '/root/')); $this->assertEquals(1, preg_match(UrlUtilities::compileWildcardUrl('/root!'), '/root/foo')); $this->assertEquals(1, preg_match(UrlUtilities::compileWildcardUrl('/root!'), '/root/foo/bar')); $this->assertEquals(0, preg_match(UrlUtilities::compileWildcardUrl('/root!'), '/')); $this->assertEquals(0, preg_match(UrlUtilities::compileWildcardUrl('/root!'), '/foo')); $this->assertEquals(0, preg_match(UrlUtilities::compileWildcardUrl('/root!'), '/foo/bar')); }