소스 검색

[DomCrawler] fixed Link::getUri() method for anchors

Fabien Potencier 14 년 전
부모
커밋
8ccebc4631
2개의 변경된 파일11개의 추가작업 그리고 4개의 파일을 삭제
  1. 9 4
      src/Symfony/Component/DomCrawler/Link.php
  2. 2 0
      tests/Symfony/Tests/Component/DomCrawler/LinkTest.php

+ 9 - 4
src/Symfony/Component/DomCrawler/Link.php

@@ -91,16 +91,21 @@ class Link
 
         // only an anchor
         if ('#' ===  $uri[0]) {
-            return $this->currentUri.$uri;
+            $baseUri = $this->currentUri;
+            if (false !== $pos = strpos($baseUri, '#')) {
+                $baseUri = substr($baseUri, 0, $pos);
+            }
+
+            return $baseUri.$uri;
         }
 
         // only a query string
-        if ('?' === $uri[0] ) {
+        if ('?' === $uri[0]) {
             $baseUri = $this->currentUri;
 
             // remove the query string from the current uri
-            if (false !== ($pos = strpos($this->currentUri, '?'))) {
-                $baseUri = substr($this->currentUri, 0, strpos($this->currentUri, '?'));
+            if (false !== $pos = strpos($baseUri, '?')) {
+                $baseUri = substr($baseUri, 0, $pos);
             }
 
             return $baseUri.$uri;

+ 2 - 0
tests/Symfony/Tests/Component/DomCrawler/LinkTest.php

@@ -85,6 +85,7 @@ class LinkTest extends \PHPUnit_Framework_TestCase
 
             array('', 'http://localhost/bar/', 'http://localhost/bar/'),
             array('#', 'http://localhost/bar/', 'http://localhost/bar/#'),
+            array('#bar', 'http://localhost/bar/#foo', 'http://localhost/bar/#bar'),
             array('?a=b', 'http://localhost/bar/', 'http://localhost/bar/?a=b'),
 
             array('http://login.foo.com/foo', 'http://localhost/bar/', 'http://login.foo.com/foo'),
@@ -93,6 +94,7 @@ class LinkTest extends \PHPUnit_Framework_TestCase
             array('?foo=2', 'http://localhost/?foo=1', 'http://localhost/?foo=2'),
             array('?foo=2', 'http://localhost/bar?foo=1', 'http://localhost/bar?foo=2'),
             array('?foo=2', 'http://localhost/bar/?foo=1', 'http://localhost/bar/?foo=2'),
+            array('?bar=2', 'http://localhost?foo=1', 'http://localhost?bar=2'),
         );
     }
 }