[CssSelector] fully rewritted component
Squashed commits:
[CssSelector] removed previous implementation
[CssSelector] rewriting, step 1
[CssSelector] rewriting, step 2
[CssSelector] rewriting, step 3
[CssSelector] rewriting, step 4
[CssSelector] rewriting, step 5
[CssSelector] rewriting, step 6
[CssSelector] fixed shortcuts regex
[CssSelector] tests, step1
[CssSelector] tests, step2
[CssSelector] tests, step3
[CssSelector] tests, step4
[CssSelector] fixed problems based @stof's on feedback
[CssSelector] tests, step5
[CssSelector] tests, step6
[CssSelector] tests, step7
[CssSelector] added my name in composer.json
2013-03-05 08:34:01 +00:00
< ? php
/*
* This file is part of the Symfony package .
*
* ( c ) Fabien Potencier < fabien @ symfony . com >
*
* For the full copyright and license information , please view the LICENSE
* file that was distributed with this source code .
*/
2013-05-19 03:12:07 +01:00
namespace Symfony\Component\CssSelector\Tests ;
2017-02-08 07:24:27 +00:00
use PHPUnit\Framework\TestCase ;
2013-05-19 03:12:07 +01:00
use Symfony\Component\CssSelector\CssSelector ;
[CssSelector] fully rewritted component
Squashed commits:
[CssSelector] removed previous implementation
[CssSelector] rewriting, step 1
[CssSelector] rewriting, step 2
[CssSelector] rewriting, step 3
[CssSelector] rewriting, step 4
[CssSelector] rewriting, step 5
[CssSelector] rewriting, step 6
[CssSelector] fixed shortcuts regex
[CssSelector] tests, step1
[CssSelector] tests, step2
[CssSelector] tests, step3
[CssSelector] tests, step4
[CssSelector] fixed problems based @stof's on feedback
[CssSelector] tests, step5
[CssSelector] tests, step6
[CssSelector] tests, step7
[CssSelector] added my name in composer.json
2013-03-05 08:34:01 +00:00
2015-09-26 23:37:59 +01:00
/**
* @ group legacy
*/
2017-02-08 07:24:27 +00:00
class CssSelectorTest extends TestCase
[CssSelector] fully rewritted component
Squashed commits:
[CssSelector] removed previous implementation
[CssSelector] rewriting, step 1
[CssSelector] rewriting, step 2
[CssSelector] rewriting, step 3
[CssSelector] rewriting, step 4
[CssSelector] rewriting, step 5
[CssSelector] rewriting, step 6
[CssSelector] fixed shortcuts regex
[CssSelector] tests, step1
[CssSelector] tests, step2
[CssSelector] tests, step3
[CssSelector] tests, step4
[CssSelector] fixed problems based @stof's on feedback
[CssSelector] tests, step5
[CssSelector] tests, step6
[CssSelector] tests, step7
[CssSelector] added my name in composer.json
2013-03-05 08:34:01 +00:00
{
public function testCssToXPath ()
{
$this -> assertEquals ( 'descendant-or-self::*' , CssSelector :: toXPath ( '' ));
$this -> assertEquals ( 'descendant-or-self::h1' , CssSelector :: toXPath ( 'h1' ));
$this -> assertEquals ( " descendant-or-self::h1[@id = 'foo'] " , CssSelector :: toXPath ( 'h1#foo' ));
$this -> assertEquals ( " descendant-or-self::h1[@class and contains(concat(' ', normalize-space(@class), ' '), ' foo ')] " , CssSelector :: toXPath ( 'h1.foo' ));
$this -> assertEquals ( 'descendant-or-self::foo:h1' , CssSelector :: toXPath ( 'foo|h1' ));
}
/** @dataProvider getCssToXPathWithoutPrefixTestData */
public function testCssToXPathWithoutPrefix ( $css , $xpath )
{
$this -> assertEquals ( $xpath , CssSelector :: toXPath ( $css , '' ), '->parse() parses an input string and returns a node' );
}
public function testParseExceptions ()
{
try {
CssSelector :: toXPath ( 'h1:' );
$this -> fail ( '->parse() throws an Exception if the css selector is not valid' );
} catch ( \Exception $e ) {
$this -> assertInstanceOf ( '\Symfony\Component\CssSelector\Exception\ParseException' , $e , '->parse() throws an Exception if the css selector is not valid' );
2015-03-21 10:51:07 +00:00
$this -> assertEquals ( 'Expected identifier, but <eof at 3> found.' , $e -> getMessage (), '->parse() throws an Exception if the css selector is not valid' );
[CssSelector] fully rewritted component
Squashed commits:
[CssSelector] removed previous implementation
[CssSelector] rewriting, step 1
[CssSelector] rewriting, step 2
[CssSelector] rewriting, step 3
[CssSelector] rewriting, step 4
[CssSelector] rewriting, step 5
[CssSelector] rewriting, step 6
[CssSelector] fixed shortcuts regex
[CssSelector] tests, step1
[CssSelector] tests, step2
[CssSelector] tests, step3
[CssSelector] tests, step4
[CssSelector] fixed problems based @stof's on feedback
[CssSelector] tests, step5
[CssSelector] tests, step6
[CssSelector] tests, step7
[CssSelector] added my name in composer.json
2013-03-05 08:34:01 +00:00
}
}
public function getCssToXPathWithoutPrefixTestData ()
{
return array (
2015-03-21 10:51:07 +00:00
array ( 'h1' , 'h1' ),
array ( 'foo|h1' , 'foo:h1' ),
array ( 'h1, h2, h3' , 'h1 | h2 | h3' ),
2013-05-17 00:48:20 +01:00
array ( 'h1:nth-child(3n+1)' , " */*[name() = 'h1' and (position() - 1 >= 0 and (position() - 1) mod 3 = 0)] " ),
2015-03-21 10:51:07 +00:00
array ( 'h1 > p' , 'h1/p' ),
[CssSelector] fully rewritted component
Squashed commits:
[CssSelector] removed previous implementation
[CssSelector] rewriting, step 1
[CssSelector] rewriting, step 2
[CssSelector] rewriting, step 3
[CssSelector] rewriting, step 4
[CssSelector] rewriting, step 5
[CssSelector] rewriting, step 6
[CssSelector] fixed shortcuts regex
[CssSelector] tests, step1
[CssSelector] tests, step2
[CssSelector] tests, step3
[CssSelector] tests, step4
[CssSelector] fixed problems based @stof's on feedback
[CssSelector] tests, step5
[CssSelector] tests, step6
[CssSelector] tests, step7
[CssSelector] added my name in composer.json
2013-03-05 08:34:01 +00:00
array ( 'h1#foo' , " h1[@id = 'foo'] " ),
array ( 'h1.foo' , " h1[@class and contains(concat(' ', normalize-space(@class), ' '), ' foo ')] " ),
array ( 'h1[class*="foo bar"]' , " h1[@class and contains(@class, 'foo bar')] " ),
array ( 'h1[foo|class*="foo bar"]' , " h1[@foo:class and contains(@foo:class, 'foo bar')] " ),
2015-03-21 10:51:07 +00:00
array ( 'h1[class]' , 'h1[@class]' ),
[CssSelector] fully rewritted component
Squashed commits:
[CssSelector] removed previous implementation
[CssSelector] rewriting, step 1
[CssSelector] rewriting, step 2
[CssSelector] rewriting, step 3
[CssSelector] rewriting, step 4
[CssSelector] rewriting, step 5
[CssSelector] rewriting, step 6
[CssSelector] fixed shortcuts regex
[CssSelector] tests, step1
[CssSelector] tests, step2
[CssSelector] tests, step3
[CssSelector] tests, step4
[CssSelector] fixed problems based @stof's on feedback
[CssSelector] tests, step5
[CssSelector] tests, step6
[CssSelector] tests, step7
[CssSelector] added my name in composer.json
2013-03-05 08:34:01 +00:00
array ( 'h1 .foo' , " h1/descendant-or-self::*/*[@class and contains(concat(' ', normalize-space(@class), ' '), ' foo ')] " ),
array ( 'h1 #foo' , " h1/descendant-or-self::*/*[@id = 'foo'] " ),
array ( 'h1 [class*=foo]' , " h1/descendant-or-self::*/*[@class and contains(@class, 'foo')] " ),
array ( 'div>.foo' , " div/*[@class and contains(concat(' ', normalize-space(@class), ' '), ' foo ')] " ),
array ( 'div > .foo' , " div/*[@class and contains(concat(' ', normalize-space(@class), ' '), ' foo ')] " ),
);
}
}