From 24724fd984c40853819597e4691387a50849f0ae Mon Sep 17 00:00:00 2001 From: Axel Guckelsberger Date: Tue, 16 Jan 2024 09:08:01 +0100 Subject: [PATCH] introduce loadMinFromNode method (#77) * introduce loadMinFromNode method * update test case * Update code coverage badge --------- Co-authored-by: Github Actions Bot <41898282+github-actions[bot]@users.noreply.github.com> --- clover.xml | 2017 +++++++++++++++++++++--------------------- src/SchemaReader.php | 24 +- tests/TypesTest.php | 26 +- 3 files changed, 1050 insertions(+), 1017 deletions(-) diff --git a/clover.xml b/clover.xml index 79212e2d..3500fb5a 100644 --- a/clover.xml +++ b/clover.xml @@ -1,6 +1,6 @@ - - + + @@ -8,17 +8,17 @@ - - - - - - - - - - - + + + + + + + + + + + @@ -37,15 +37,15 @@ - - - + + + - - - - + + + + @@ -58,8 +58,8 @@ - - + + @@ -70,8 +70,8 @@ - - + + @@ -87,8 +87,8 @@ - - + + @@ -106,9 +106,9 @@ - - - + + + @@ -134,22 +134,22 @@ - - - - + + + + - - - - - - - - + + + + + + + + @@ -166,17 +166,9 @@ - + - - - - - - - - - + @@ -191,10 +183,10 @@ - - - - + + + + @@ -218,13 +210,13 @@ - - - + + + - - + + @@ -242,17 +234,17 @@ - - - - - - - - - - - + + + + + + + + + + + @@ -281,6 +273,26 @@ + + + + + + + + + + + + + + + + + + + + @@ -299,9 +311,9 @@ - - - + + + @@ -314,8 +326,8 @@ - - + + @@ -329,158 +341,158 @@ - - - - - - - + + + + + + + - - - - + + + + - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - + + + + + + + + + - - + + - - - - - - + + + + + + - - - - + + + + - - - - - - - - - - - + + + + + + + + + + + - + - - - - - - - + + + + + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - + @@ -490,12 +502,12 @@ - - + + - - + + @@ -510,9 +522,9 @@ - - - + + + @@ -525,851 +537,864 @@ - - + + - - + + - - - - - + + + + + - - + + - - + + - - + + - + - - - - - + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + - - + + @@ -1415,6 +1440,6 @@ - + diff --git a/src/SchemaReader.php b/src/SchemaReader.php index 81446cde..199b93fc 100644 --- a/src/SchemaReader.php +++ b/src/SchemaReader.php @@ -378,16 +378,9 @@ private static function maybeSetAbstract(InterfaceSetAbstract $ref, \DOMElement private function loadSequence(ElementContainer $elementContainer, \DOMElement $node, ?int $max = null, ?int $min = null): void { + $min = $this->loadMinFromNode($node, $min); $max = $this->loadMaxFromNode($node, $max); - $min = - ( - null === $min - && !$node->hasAttribute('minOccurs') - ) - ? null - : (int) max((int) $min, $node->getAttribute('minOccurs')); - self::againstDOMNodeList( $node, function (\DOMElement $node, \DOMElement $childNode) use ($elementContainer, $max, $min): void { @@ -402,11 +395,22 @@ function (\DOMElement $node, \DOMElement $childNode) use ($elementContainer, $ma ); } - private function loadMaxFromNode(\DOMElement $node, ?int $max): ?int + private function loadMinFromNode(\DOMElement $node, ?int $min): ?int + { + if (null === $min && !$node->hasAttribute('minOccurs')) { + return null; + } + + $minOccurs = intval($node->getAttribute('minOccurs')); + + return max($min, $minOccurs); + } + + private function loadMaxFromNode(\DOMElement $node, ?int $max): ?int { $maxOccurs = $node->getAttribute('maxOccurs'); - if ('unbounded' === $maxOccurs && null === $max) { + if (null === $max && 'unbounded' === $maxOccurs) { return null; } diff --git a/tests/TypesTest.php b/tests/TypesTest.php index eadd8250..3146df76 100644 --- a/tests/TypesTest.php +++ b/tests/TypesTest.php @@ -137,14 +137,14 @@ public function getMaxOccurences(): array /** * @dataProvider getMaxOccurences */ - public function testElementMaxOccurences($xml, $expected): void + public function testElementMaxOccurences($maxOccurs, $expected): void { $schema = $this->reader->readString( ' - + ' @@ -159,14 +159,14 @@ public function testElementMaxOccurences($xml, $expected): void /** * @dataProvider getMinOccurencesOverride */ - public function testSequencMinOccursOverride($xml, $expected): void + public function testSequenceMinOccursOverride($sequenceMinOccurs, $childMinOccurs, $expected): void { $schema = $this->reader->readString( ' - - + + ' @@ -181,16 +181,20 @@ public function testSequencMinOccursOverride($xml, $expected): void public function getMinOccurencesOverride(): array { return [ - ['2', 2], - ['1', 1], - ['0', 0], + ['0', '2', 2], + ['3', '2', 3], + ['0', '1', 1], + ['1', '1', 1], + ['2', '1', 2], + ['0', '0', 0], + ['3', '0', 3], ]; } /** * @dataProvider getMaxOccurencesOverride */ - public function testSequencMaxOccursOverride($sequenceMaxOccurs, $childMaxOccurs, $expected): void + public function testSequenceMaxOccursOverride($sequenceMaxOccurs, $childMaxOccurs, $expected): void { $schema = $this->reader->readString( ' @@ -233,14 +237,14 @@ public function getMinOccurences(): array /** * @dataProvider getMinOccurences */ - public function testElementMinOccurences($xml, $expected): void + public function testElementMinOccurences($minOccurs, $expected): void { $schema = $this->reader->readString( ' - + '