From 9d273d6046583a3b7c9b88250514ee39aa2f61cb Mon Sep 17 00:00:00 2001 From: Gregor Harlan Date: Sat, 12 Jul 2025 15:55:19 +0200 Subject: [PATCH 1/4] optimize `in_array` calls --- Parser/Handler/StringHandler.php | 2 +- Parser/Parser.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Parser/Handler/StringHandler.php b/Parser/Handler/StringHandler.php index 5e00eda..41afb87 100644 --- a/Parser/Handler/StringHandler.php +++ b/Parser/Handler/StringHandler.php @@ -41,7 +41,7 @@ public function handle(Reader $reader, TokenStream $stream): bool { $quote = $reader->getSubstring(1); - if (!\in_array($quote, ["'", '"'])) { + if (!\in_array($quote, ["'", '"'], true)) { return false; } diff --git a/Parser/Parser.php b/Parser/Parser.php index f7eea2f..5a93a70 100644 --- a/Parser/Parser.php +++ b/Parser/Parser.php @@ -190,7 +190,7 @@ private function parseSimpleSelector(TokenStream $stream, bool $insideNegation = } $identifier = $stream->getNextIdentifier(); - if (\in_array(strtolower($identifier), ['first-line', 'first-letter', 'before', 'after'])) { + if (\in_array(strtolower($identifier), ['first-line', 'first-letter', 'before', 'after'], true)) { // Special case: CSS 2.1 pseudo-elements can have a single ':'. // Any new pseudo-element must have two. $pseudoElement = $identifier; From 2446cb57ebfa556a278ae4a819c17067de69cac8 Mon Sep 17 00:00:00 2001 From: Christian Flothmann Date: Wed, 9 Oct 2024 11:06:51 +0200 Subject: [PATCH 2/4] run tests using PHPUnit 11.5 --- phpunit.xml.dist | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/phpunit.xml.dist b/phpunit.xml.dist index 7d8f839..75680db 100644 --- a/phpunit.xml.dist +++ b/phpunit.xml.dist @@ -1,10 +1,11 @@ @@ -18,7 +19,7 @@ - + ./ @@ -27,5 +28,9 @@ ./Tests ./vendor - + + + + + From 810c1bb904f21ba9c057353ee8fa5d74b12cd120 Mon Sep 17 00:00:00 2001 From: Christian Flothmann Date: Thu, 31 Jul 2025 14:36:46 +0200 Subject: [PATCH 3/4] replace PHPUnit annotations with attributes --- Tests/CssSelectorConverterTest.php | 3 ++- Tests/Node/AbstractNodeTestCase.php | 5 +++-- Tests/Node/SpecificityTest.php | 7 ++++--- Tests/Parser/Handler/AbstractHandlerTestCase.php | 5 +++-- Tests/Parser/Handler/CommentHandlerTest.php | 3 ++- Tests/Parser/ParserTest.php | 13 +++++++------ Tests/Parser/Shortcut/ClassParserTest.php | 3 ++- Tests/Parser/Shortcut/ElementParserTest.php | 3 ++- Tests/Parser/Shortcut/HashParserTest.php | 3 ++- Tests/XPath/TranslatorTest.php | 11 ++++++----- 10 files changed, 33 insertions(+), 23 deletions(-) diff --git a/Tests/CssSelectorConverterTest.php b/Tests/CssSelectorConverterTest.php index c197032..1d4dbb7 100644 --- a/Tests/CssSelectorConverterTest.php +++ b/Tests/CssSelectorConverterTest.php @@ -11,6 +11,7 @@ namespace Symfony\Component\CssSelector\Tests; +use PHPUnit\Framework\Attributes\DataProvider; use PHPUnit\Framework\TestCase; use Symfony\Component\CssSelector\CssSelectorConverter; use Symfony\Component\CssSelector\Exception\ParseException; @@ -51,7 +52,7 @@ public function testParseExceptions() (new CssSelectorConverter())->toXPath('h1:'); } - /** @dataProvider getCssToXPathWithoutPrefixTestData */ + #[DataProvider('getCssToXPathWithoutPrefixTestData')] public function testCssToXPathWithoutPrefix($css, $xpath) { $converter = new CssSelectorConverter(); diff --git a/Tests/Node/AbstractNodeTestCase.php b/Tests/Node/AbstractNodeTestCase.php index 521e6d8..64553bf 100644 --- a/Tests/Node/AbstractNodeTestCase.php +++ b/Tests/Node/AbstractNodeTestCase.php @@ -11,18 +11,19 @@ namespace Symfony\Component\CssSelector\Tests\Node; +use PHPUnit\Framework\Attributes\DataProvider; use PHPUnit\Framework\TestCase; use Symfony\Component\CssSelector\Node\NodeInterface; abstract class AbstractNodeTestCase extends TestCase { - /** @dataProvider getToStringConversionTestData */ + #[DataProvider('getToStringConversionTestData')] public function testToStringConversion(NodeInterface $node, $representation) { $this->assertEquals($representation, (string) $node); } - /** @dataProvider getSpecificityValueTestData */ + #[DataProvider('getSpecificityValueTestData')] public function testSpecificityValue(NodeInterface $node, $value) { $this->assertEquals($value, $node->getSpecificity()->getValue()); diff --git a/Tests/Node/SpecificityTest.php b/Tests/Node/SpecificityTest.php index 8802e0c..ae76589 100644 --- a/Tests/Node/SpecificityTest.php +++ b/Tests/Node/SpecificityTest.php @@ -11,18 +11,19 @@ namespace Symfony\Component\CssSelector\Tests\Node; +use PHPUnit\Framework\Attributes\DataProvider; use PHPUnit\Framework\TestCase; use Symfony\Component\CssSelector\Node\Specificity; class SpecificityTest extends TestCase { - /** @dataProvider getValueTestData */ + #[DataProvider('getValueTestData')] public function testValue(Specificity $specificity, $value) { $this->assertEquals($value, $specificity->getValue()); } - /** @dataProvider getValueTestData */ + #[DataProvider('getValueTestData')] public function testPlusValue(Specificity $specificity, $value) { $this->assertEquals($value + 123, $specificity->plus(new Specificity(1, 2, 3))->getValue()); @@ -39,7 +40,7 @@ public static function getValueTestData() ]; } - /** @dataProvider getCompareTestData */ + #[DataProvider('getCompareTestData')] public function testCompareTo(Specificity $a, Specificity $b, $result) { $this->assertEquals($result, $a->compareTo($b)); diff --git a/Tests/Parser/Handler/AbstractHandlerTestCase.php b/Tests/Parser/Handler/AbstractHandlerTestCase.php index 30ce10e..65754da 100644 --- a/Tests/Parser/Handler/AbstractHandlerTestCase.php +++ b/Tests/Parser/Handler/AbstractHandlerTestCase.php @@ -11,6 +11,7 @@ namespace Symfony\Component\CssSelector\Tests\Parser\Handler; +use PHPUnit\Framework\Attributes\DataProvider; use PHPUnit\Framework\TestCase; use Symfony\Component\CssSelector\Parser\Reader; use Symfony\Component\CssSelector\Parser\Token; @@ -21,7 +22,7 @@ */ abstract class AbstractHandlerTestCase extends TestCase { - /** @dataProvider getHandleValueTestData */ + #[DataProvider('getHandleValueTestData')] public function testHandleValue($value, Token $expectedToken, $remainingContent) { $reader = new Reader($value); @@ -32,7 +33,7 @@ public function testHandleValue($value, Token $expectedToken, $remainingContent) $this->assertRemainingContent($reader, $remainingContent); } - /** @dataProvider getDontHandleValueTestData */ + #[DataProvider('getDontHandleValueTestData')] public function testDontHandleValue($value) { $reader = new Reader($value); diff --git a/Tests/Parser/Handler/CommentHandlerTest.php b/Tests/Parser/Handler/CommentHandlerTest.php index c3be7f4..7705817 100644 --- a/Tests/Parser/Handler/CommentHandlerTest.php +++ b/Tests/Parser/Handler/CommentHandlerTest.php @@ -11,6 +11,7 @@ namespace Symfony\Component\CssSelector\Tests\Parser\Handler; +use PHPUnit\Framework\Attributes\DataProvider; use Symfony\Component\CssSelector\Parser\Handler\CommentHandler; use Symfony\Component\CssSelector\Parser\Reader; use Symfony\Component\CssSelector\Parser\Token; @@ -18,7 +19,7 @@ class CommentHandlerTest extends AbstractHandlerTestCase { - /** @dataProvider getHandleValueTestData */ + #[DataProvider('getHandleValueTestData')] public function testHandleValue($value, Token $unusedArgument, $remainingContent) { $reader = new Reader($value); diff --git a/Tests/Parser/ParserTest.php b/Tests/Parser/ParserTest.php index 82de5ab..15b8a1b 100644 --- a/Tests/Parser/ParserTest.php +++ b/Tests/Parser/ParserTest.php @@ -11,6 +11,7 @@ namespace Symfony\Component\CssSelector\Tests\Parser; +use PHPUnit\Framework\Attributes\DataProvider; use PHPUnit\Framework\TestCase; use Symfony\Component\CssSelector\Exception\SyntaxErrorException; use Symfony\Component\CssSelector\Node\FunctionNode; @@ -20,7 +21,7 @@ class ParserTest extends TestCase { - /** @dataProvider getParserTestData */ + #[DataProvider('getParserTestData')] public function testParser($source, $representation) { $parser = new Parser(); @@ -28,7 +29,7 @@ public function testParser($source, $representation) $this->assertEquals($representation, array_map(fn (SelectorNode $node) => (string) $node->getTree(), $parser->parse($source))); } - /** @dataProvider getParserExceptionTestData */ + #[DataProvider('getParserExceptionTestData')] public function testParserException($source, $message) { $parser = new Parser(); @@ -41,7 +42,7 @@ public function testParserException($source, $message) } } - /** @dataProvider getPseudoElementsTestData */ + #[DataProvider('getPseudoElementsTestData')] public function testPseudoElements($source, $element, $pseudo) { $parser = new Parser(); @@ -54,7 +55,7 @@ public function testPseudoElements($source, $element, $pseudo) $this->assertEquals($pseudo, (string) $selector->getPseudoElement()); } - /** @dataProvider getSpecificityTestData */ + #[DataProvider('getSpecificityTestData')] public function testSpecificity($source, $value) { $parser = new Parser(); @@ -66,7 +67,7 @@ public function testSpecificity($source, $value) $this->assertEquals($value, $selector->getSpecificity()->getValue()); } - /** @dataProvider getParseSeriesTestData */ + #[DataProvider('getParseSeriesTestData')] public function testParseSeries($series, $a, $b) { $parser = new Parser(); @@ -78,7 +79,7 @@ public function testParseSeries($series, $a, $b) $this->assertEquals([$a, $b], Parser::parseSeries($function->getArguments())); } - /** @dataProvider getParseSeriesExceptionTestData */ + #[DataProvider('getParseSeriesExceptionTestData')] public function testParseSeriesException($series) { $parser = new Parser(); diff --git a/Tests/Parser/Shortcut/ClassParserTest.php b/Tests/Parser/Shortcut/ClassParserTest.php index ded92ea..c18b810 100644 --- a/Tests/Parser/Shortcut/ClassParserTest.php +++ b/Tests/Parser/Shortcut/ClassParserTest.php @@ -11,6 +11,7 @@ namespace Symfony\Component\CssSelector\Tests\Parser\Shortcut; +use PHPUnit\Framework\Attributes\DataProvider; use PHPUnit\Framework\TestCase; use Symfony\Component\CssSelector\Node\SelectorNode; use Symfony\Component\CssSelector\Parser\Shortcut\ClassParser; @@ -20,7 +21,7 @@ */ class ClassParserTest extends TestCase { - /** @dataProvider getParseTestData */ + #[DataProvider('getParseTestData')] public function testParse($source, $representation) { $parser = new ClassParser(); diff --git a/Tests/Parser/Shortcut/ElementParserTest.php b/Tests/Parser/Shortcut/ElementParserTest.php index 4c10029..a4d1712 100644 --- a/Tests/Parser/Shortcut/ElementParserTest.php +++ b/Tests/Parser/Shortcut/ElementParserTest.php @@ -11,6 +11,7 @@ namespace Symfony\Component\CssSelector\Tests\Parser\Shortcut; +use PHPUnit\Framework\Attributes\DataProvider; use PHPUnit\Framework\TestCase; use Symfony\Component\CssSelector\Node\SelectorNode; use Symfony\Component\CssSelector\Parser\Shortcut\ElementParser; @@ -20,7 +21,7 @@ */ class ElementParserTest extends TestCase { - /** @dataProvider getParseTestData */ + #[DataProvider('getParseTestData')] public function testParse($source, $representation) { $parser = new ElementParser(); diff --git a/Tests/Parser/Shortcut/HashParserTest.php b/Tests/Parser/Shortcut/HashParserTest.php index c8bfdef..d9225ce 100644 --- a/Tests/Parser/Shortcut/HashParserTest.php +++ b/Tests/Parser/Shortcut/HashParserTest.php @@ -11,6 +11,7 @@ namespace Symfony\Component\CssSelector\Tests\Parser\Shortcut; +use PHPUnit\Framework\Attributes\DataProvider; use PHPUnit\Framework\TestCase; use Symfony\Component\CssSelector\Node\SelectorNode; use Symfony\Component\CssSelector\Parser\Shortcut\HashParser; @@ -20,7 +21,7 @@ */ class HashParserTest extends TestCase { - /** @dataProvider getParseTestData */ + #[DataProvider('getParseTestData')] public function testParse($source, $representation) { $parser = new HashParser(); diff --git a/Tests/XPath/TranslatorTest.php b/Tests/XPath/TranslatorTest.php index f521a94..174f6b0 100644 --- a/Tests/XPath/TranslatorTest.php +++ b/Tests/XPath/TranslatorTest.php @@ -11,6 +11,7 @@ namespace Symfony\Component\CssSelector\Tests\XPath; +use PHPUnit\Framework\Attributes\DataProvider; use PHPUnit\Framework\TestCase; use Symfony\Component\CssSelector\Exception\ExpressionErrorException; use Symfony\Component\CssSelector\Node\ElementNode; @@ -22,13 +23,13 @@ class TranslatorTest extends TestCase { - /** @dataProvider getXpathLiteralTestData */ + #[DataProvider('getXpathLiteralTestData')] public function testXpathLiteral($value, $literal) { $this->assertEquals($literal, Translator::getXpathLiteral($value)); } - /** @dataProvider getCssToXPathTestData */ + #[DataProvider('getCssToXPathTestData')] public function testCssToXPath($css, $xpath) { $translator = new Translator(); @@ -103,7 +104,7 @@ public function testAddAttributeMatchingClassNotExistsClass() $translator->addAttributeMatching($xpath, '', '', ''); } - /** @dataProvider getXmlLangTestData */ + #[DataProvider('getXmlLangTestData')] public function testXmlLang($css, array $elementsId) { $translator = new Translator(); @@ -115,7 +116,7 @@ public function testXmlLang($css, array $elementsId) } } - /** @dataProvider getHtmlIdsTestData */ + #[DataProvider('getHtmlIdsTestData')] public function testHtmlIds($css, array $elementsId) { $translator = new Translator(); @@ -136,7 +137,7 @@ public function testHtmlIds($css, array $elementsId) libxml_use_internal_errors($internalErrors); } - /** @dataProvider getHtmlShakespearTestData */ + #[DataProvider('getHtmlShakespearTestData')] public function testHtmlShakespear($css, $count) { $translator = new Translator(); From 1a3445e2ca660b2d75ac30c447deea04861711f1 Mon Sep 17 00:00:00 2001 From: Nicolas Grekas Date: Mon, 4 Aug 2025 17:50:26 +0200 Subject: [PATCH 4/4] Remove some unneeded var annotations --- XPath/Translator.php | 1 - 1 file changed, 1 deletion(-) diff --git a/XPath/Translator.php b/XPath/Translator.php index b2623e5..7488a2b 100644 --- a/XPath/Translator.php +++ b/XPath/Translator.php @@ -91,7 +91,6 @@ public function cssToXPath(string $cssExpr, string $prefix = 'descendant-or-self { $selectors = $this->parseSelectors($cssExpr); - /** @var SelectorNode $selector */ foreach ($selectors as $index => $selector) { if (null !== $selector->getPseudoElement()) { throw new ExpressionErrorException('Pseudo-elements are not supported.'); pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy