Skip to content

Commit edec82b

Browse files
tfedorpaquettg
authored andcommitted
Throw exception when trying to set unknown option
1 parent e0c8a38 commit edec82b

File tree

3 files changed

+48
-6
lines changed

3 files changed

+48
-6
lines changed
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
<?php declare(strict_types=1);
2+
namespace PHPHtmlParser\Exceptions;
3+
4+
use Exception;
5+
6+
/**
7+
* Class UnknownOptionException
8+
*
9+
* @package PHPHtmlParser\Exceptions
10+
*/
11+
final class UnknownOptionException extends Exception
12+
{
13+
}

src/PHPHtmlParser/Options.php

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44

55
namespace PHPHtmlParser;
66

7+
use PHPHtmlParser\Exceptions\UnknownOptionException;
8+
79
/**
810
* Class Options.
911
*
@@ -73,10 +75,14 @@ public function __get($key)
7375
* Sets a new options param to override the current option array.
7476
*
7577
* @chainable
78+
* @throws UnknownOptionException
7679
*/
7780
public function setOptions(array $options): Options
7881
{
7982
foreach ($options as $key => $option) {
83+
if (!isset($this->defaults[$key])) {
84+
throw new UnknownOptionException("Option '$option' is not recognized");
85+
}
8086
$this->options[$key] = $option;
8187
}
8288

tests/OptionsTest.php

Lines changed: 29 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,10 @@
22

33
declare(strict_types=1);
44

5-
use PHPHtmlParser\Options;
5+
use PHPHtmlParser\Dom;
6+
use PHPHtmlParser\Exceptions\UnknownOptionException;
67
use PHPUnit\Framework\TestCase;
8+
use PHPHtmlParser\Options;
79

810
class OptionsTest extends TestCase
911
{
@@ -14,26 +16,37 @@ public function testDefaultWhitespaceTextNode()
1416
$this->assertTrue($options->whitespaceTextNode);
1517
}
1618

19+
public function testSettingOption()
20+
{
21+
$options = new Options;
22+
$options->setOptions([
23+
'strict' => true,
24+
]);
25+
26+
$this->assertTrue($options->strict);
27+
}
28+
1729
public function testAddingOption()
1830
{
31+
$this->expectException(UnknownOptionException::class);
32+
1933
$options = new Options();
2034
$options->setOptions([
2135
'test' => true,
2236
]);
23-
24-
$this->assertTrue($options->test);
2537
}
2638

27-
public function testAddingOver()
39+
public function testOverwritingOption()
2840
{
2941
$options = new Options();
3042
$options->setOptions([
31-
'test' => false,
43+
'strict' => false,
3244
])->setOptions([
33-
'test' => true,
45+
'strict' => true,
3446
'whitespaceTextNode' => false,
3547
]);
3648

49+
$this->assertTrue($options->get('strict'));
3750
$this->assertFalse($options->get('whitespaceTextNode'));
3851
}
3952

@@ -42,4 +55,14 @@ public function testGettingNoOption()
4255
$options = new Options();
4356
$this->assertEquals(null, $options->get('doesnotexist'));
4457
}
58+
59+
public function testUnknownOptionDom() {
60+
$dom = new Dom;
61+
$dom->setOptions([
62+
'unknown_option' => true,
63+
]);
64+
65+
$this->expectException(UnknownOptionException::class);
66+
$dom->load('<div></div>');
67+
}
4568
}

0 commit comments

Comments
 (0)