diff --git a/src/Symfony/Component/DomCrawler/Crawler.php b/src/Symfony/Component/DomCrawler/Crawler.php index dfc2fdcff3..5d86115b21 100644 --- a/src/Symfony/Component/DomCrawler/Crawler.php +++ b/src/Symfony/Component/DomCrawler/Crawler.php @@ -58,7 +58,9 @@ class Crawler extends \SplObjectStorage * This method uses the appropriate specialized add*() method based * on the type of the argument. * - * @param null|\DOMNodeList|array|\DOMNode $node A node + * @param \DOMNodeList|\DOMNode|array|string|null $node A node + * + * @throws \InvalidArgumentException When node is not the expected type. * * @api */ @@ -66,12 +68,19 @@ class Crawler extends \SplObjectStorage { if ($node instanceof \DOMNodeList) { $this->addNodeList($node); + } elseif ($node instanceof \DOMNode) { + $this->addNode($node); } elseif (is_array($node)) { $this->addNodes($node); } elseif (is_string($node)) { $this->addContent($node); - } elseif (is_object($node)) { - $this->addNode($node); + } elseif ($node !== null) { + throw new \InvalidArgumentException( + sprintf( + 'Expecting node to be DOMNodeList|DOMNode|array|string|null, but got %s', + (is_object($node)) ? get_class($node) : gettype($node) + ) + ); } } diff --git a/src/Symfony/Component/DomCrawler/Tests/CrawlerTest.php b/src/Symfony/Component/DomCrawler/Tests/CrawlerTest.php index 76badb66a5..8dcdce9d30 100644 --- a/src/Symfony/Component/DomCrawler/Tests/CrawlerTest.php +++ b/src/Symfony/Component/DomCrawler/Tests/CrawlerTest.php @@ -53,6 +53,15 @@ class CrawlerTest extends \PHPUnit_Framework_TestCase $this->assertEquals('Foo', $crawler->filterXPath('//body')->text(), '->add() adds nodes from a string'); } + /** + * @expectedException \InvalidArgumentException + */ + public function testAddInvalidNode() + { + $crawler = new Crawler(); + $crawler->add(1); + } + /** * @covers Symfony\Component\DomCrawler\Crawler::addHtmlContent */