[DomCrawler] Added ability to return a default value in text() and html() instead of throwing an exception when node is empty.

This commit is contained in:
Roberto Espinoza 2018-09-24 20:20:15 +09:00 committed by Nicolas Grekas
parent f2590d196f
commit 6a4ce386fe
3 changed files with 19 additions and 2 deletions

View File

@ -5,6 +5,7 @@ CHANGELOG
-----
* Added return of element name (`_name`) in `extract()` method.
* Added ability to return a default value in `text()` and `html()` instead of throwing an exception when node is empty.
4.2.0
-----

View File

@ -570,13 +570,19 @@ class Crawler implements \Countable, \IteratorAggregate
/**
* Returns the node value of the first node of the list.
*
* @param mixed $default When provided and the current node is empty, this value is returned and no exception is thrown
*
* @return string The node value
*
* @throws \InvalidArgumentException When current node is empty
*/
public function text()
public function text(/* $default = null */)
{
if (!$this->nodes) {
if (0 < \func_num_args()) {
return \func_get_arg(0);
}
throw new \InvalidArgumentException('The current node list is empty.');
}
@ -586,13 +592,19 @@ class Crawler implements \Countable, \IteratorAggregate
/**
* Returns the first node of the list as HTML.
*
* @param mixed $default When provided and the current node is empty, this value is returned and no exception is thrown
*
* @return string The node html
*
* @throws \InvalidArgumentException When current node is empty
*/
public function html()
public function html(/* $default = null */)
{
if (!$this->nodes) {
if (0 < \func_num_args()) {
return \func_get_arg(0);
}
throw new \InvalidArgumentException('The current node list is empty.');
}

View File

@ -392,6 +392,8 @@ EOF
} catch (\InvalidArgumentException $e) {
$this->assertTrue(true, '->text() throws an \InvalidArgumentException if the node list is empty');
}
$this->assertSame('my value', $this->createTestCrawler(null)->filterXPath('//ol')->text('my value'));
}
public function testHtml()
@ -405,6 +407,8 @@ EOF
} catch (\InvalidArgumentException $e) {
$this->assertTrue(true, '->html() throws an \InvalidArgumentException if the node list is empty');
}
$this->assertSame('my value', $this->createTestCrawler(null)->filterXPath('//ol')->html('my value'));
}
public function testExtract()