Skip to content

Commit 29b045b

Browse files
authored
Keep configuration class usage to Parser/Parser only (#78)
1 parent 3f8596b commit 29b045b

File tree

6 files changed

+47
-73
lines changed

6 files changed

+47
-73
lines changed

src/Parameter/Parser/AttributeParser.php

Lines changed: 1 addition & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
namespace webignition\InternetMediaType\Parameter\Parser;
44

5-
use webignition\InternetMediaType\Parser\Configuration;
65
use webignition\StringParser\StringParser;
76
use webignition\StringParser\UnknownStateException;
87

@@ -26,7 +25,6 @@ class AttributeParser
2625
];
2726

2827
private StringParser $stringParser;
29-
private Configuration $configuration;
3028

3129
public function __construct()
3230
{
@@ -44,18 +42,6 @@ public function __construct()
4442
$this->handleInvalidInternalCharacterState($stringParser);
4543
},
4644
]);
47-
48-
$this->configuration = new Configuration();
49-
}
50-
51-
public function setConfiguration(Configuration $configuration): void
52-
{
53-
$this->configuration = $configuration;
54-
}
55-
56-
public function getConfiguration(): Configuration
57-
{
58-
return $this->configuration;
5945
}
6046

6147
/**
@@ -80,13 +66,7 @@ private function handleInAttributeNameState(StringParser $stringParser): void
8066
$isCharacterAttributeValueSeparator = self::ATTRIBUTE_VALUE_SEPARATOR === $character;
8167

8268
if ($isCharacterInvalid) {
83-
if ($this->configuration->ignoreInvalidAttributes()) {
84-
$stringParser->incrementPointer();
85-
$stringParser->setState(self::STATE_LEFT_ATTRIBUTE_NAME);
86-
$stringParser->clearOutput();
87-
} else {
88-
$stringParser->setState(self::STATE_INVALID_INTERNAL_CHARACTER);
89-
}
69+
$stringParser->setState(self::STATE_INVALID_INTERNAL_CHARACTER);
9070
} elseif ($isCharacterAttributeValueSeparator) {
9171
$stringParser->setState(self::STATE_LEFT_ATTRIBUTE_NAME);
9272
} else {

src/Parameter/Parser/Parser.php

Lines changed: 0 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
namespace webignition\InternetMediaType\Parameter\Parser;
44

55
use webignition\InternetMediaType\Parameter\Parameter;
6-
use webignition\InternetMediaType\Parser\Configuration;
76
use webignition\InternetMediaTypeInterface\ParameterInterface;
87
use webignition\QuotedString\Exception as QuotedStringException;
98
use webignition\StringParser\UnknownStateException;
@@ -25,26 +24,10 @@
2524
*/
2625
class Parser
2726
{
28-
private Configuration $configuration;
29-
3027
public function __construct(
3128
private AttributeParser $attributeParser,
3229
private ValueParser $valueParser,
3330
) {
34-
$this->configuration = new Configuration();
35-
36-
$this->attributeParser->setConfiguration($this->configuration);
37-
}
38-
39-
public function setConfiguration(Configuration $configuration): void
40-
{
41-
$this->configuration = $configuration;
42-
$this->attributeParser->setConfiguration($configuration);
43-
}
44-
45-
public function getConfiguration(): Configuration
46-
{
47-
return $this->configuration;
4831
}
4932

5033
/**

src/Parser/Parser.php

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
namespace webignition\InternetMediaType\Parser;
44

55
use webignition\InternetMediaType\InternetMediaType;
6+
use webignition\InternetMediaType\Parameter\Parameter;
67
use webignition\InternetMediaType\Parameter\Parser\AttributeFixer;
78
use webignition\InternetMediaType\Parameter\Parser\AttributeParser;
89
use webignition\InternetMediaType\Parameter\Parser\AttributeParserException;
@@ -35,7 +36,6 @@ public function __construct(
3536
private AttributeFixer $attributeFixer,
3637
) {
3738
$this->configuration = new Configuration();
38-
$this->parameterParser->setConfiguration($this->configuration);
3939
}
4040

4141
public static function create(): Parser
@@ -113,7 +113,6 @@ public function parse(string $internetMediaTypeString): ?InternetMediaTypeInterf
113113
public function setConfiguration(Configuration $configuration): void
114114
{
115115
$this->configuration = $configuration;
116-
$this->parameterParser->setConfiguration($configuration);
117116
}
118117

119118
public function getConfiguration(): Configuration
@@ -186,7 +185,11 @@ private function getParameters(array $parameterStrings): array
186185
{
187186
$parameters = [];
188187
foreach ($parameterStrings as $parameterString) {
189-
$parameters[] = $this->parseParameterString($parameterString);
188+
$parameter = $this->parseParameterString($parameterString);
189+
190+
if ($parameter instanceof ParameterInterface) {
191+
$parameters[] = $parameter;
192+
}
190193
}
191194

192195
return $parameters;
@@ -224,11 +227,16 @@ private function parseSubtype(string $inputString): string
224227
* @throws QuotedStringException
225228
* @throws UnknownStateException
226229
*/
227-
private function parseParameterString(string $parameterString): ParameterInterface
230+
private function parseParameterString(string $parameterString): ?ParameterInterface
228231
{
229232
try {
230233
return $this->parameterParser->parse($parameterString);
231234
} catch (AttributeParserException $attributeParserException) {
235+
$shouldIgnoreInvalidAttributes = $this->getConfiguration()->ignoreInvalidAttributes();
236+
if ($shouldIgnoreInvalidAttributes) {
237+
return null;
238+
}
239+
232240
$shouldAttemptToFixInvalidInternalCharacter =
233241
$this->getConfiguration()->attemptToRecoverFromInvalidInternalCharacter()
234242
&& !$this->hasAttemptedToFixAttributeInvalidInternalCharacter;

tests/Parameter/Parser/AttributeParserTest.php

Lines changed: 7 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -79,24 +79,14 @@ public function parseInvalidInternalCharacterDataProvider(): array
7979
];
8080
}
8181

82-
/**
83-
* @dataProvider parseAndIgnoreInvalidCharacterDataProvider
84-
*/
85-
public function testParseAndIgnoreInvalidCharacter(string $attribute): void
82+
public function testParseInvalidAttribute(): void
8683
{
87-
$this->parser->getConfiguration()->enableIgnoreInvalidAttributes();
88-
$this->assertEmpty($this->parser->parse($attribute));
89-
}
84+
self::expectExceptionObject(new AttributeParserException(
85+
'Invalid internal character after at position 7',
86+
1,
87+
7
88+
));
9089

91-
/**
92-
* @return array<mixed>
93-
*/
94-
public function parseAndIgnoreInvalidCharacterDataProvider(): array
95-
{
96-
return [
97-
'charset"foo": utf8' => [
98-
'attribute' => 'charset"foo": utf8',
99-
],
100-
];
90+
$this->parser->parse('charset"foo": utf8');
10191
}
10292
}

tests/Parameter/Parser/ParserTest.php

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
use webignition\InternetMediaType\Parameter\Parser\AttributeParser;
77
use webignition\InternetMediaType\Parameter\Parser\Parser;
88
use webignition\InternetMediaType\Parameter\Parser\ValueParser;
9-
use webignition\InternetMediaType\Parser\Configuration;
109
use webignition\QuotedString\Parser as QuotedStringParser;
1110

1211
class ParserTest extends TestCase
@@ -81,14 +80,4 @@ public function parseDataProvider(): array
8180
],
8281
];
8382
}
84-
85-
public function testSetGetConfiguration(): void
86-
{
87-
$configuration = new Configuration();
88-
89-
$this->assertNotEquals(spl_object_hash($configuration), spl_object_hash($this->parser->getConfiguration()));
90-
91-
$this->parser->setConfiguration($configuration);
92-
$this->assertEquals(spl_object_hash($configuration), spl_object_hash($this->parser->getConfiguration()));
93-
}
9483
}

tests/Parser/ParserTest.php

Lines changed: 27 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -93,12 +93,36 @@ public function parseValidMediaTypeDataProvider(): array
9393
];
9494
}
9595

96-
public function testIgnoreInvalidAttributes(): void
96+
/**
97+
* @dataProvider ignoreInvalidAttributesDataProvider
98+
*/
99+
public function testIgnoreInvalidAttributes(string $internetMediaTypeString, string $expected): void
97100
{
98101
$this->parser->setIgnoreInvalidAttributes(true);
99-
$internetMediaType = $this->parser->parse('foo/bar; charset: UTF-8');
102+
$internetMediaType = $this->parser->parse($internetMediaTypeString);
100103

101-
$this->assertEquals('foo/bar', (string) $internetMediaType);
104+
$this->assertEquals($expected, (string) $internetMediaType);
105+
}
106+
107+
/**
108+
* @return array<mixed>
109+
*/
110+
public function ignoreInvalidAttributesDataProvider(): array
111+
{
112+
return [
113+
'single invalid attribute only' => [
114+
'internetMediaTypeString' => 'foo/bar; charset: UTF-8',
115+
'expected' => 'foo/bar',
116+
],
117+
'single trailing invalid attribute' => [
118+
'internetMediaTypeString' => 'foo/bar; attribute=value; charset: UTF-8',
119+
'expected' => 'foo/bar; attribute=value',
120+
],
121+
'single leading invalid attribute' => [
122+
'internetMediaTypeString' => 'foo/bar; charset: UTF-8; attribute=value',
123+
'expected' => 'foo/bar; attribute=value',
124+
],
125+
];
102126
}
103127

104128
/**

0 commit comments

Comments
 (0)