TokenStreamTest.php 3.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. <?php
  2. /*
  3. * This file is part of the Symfony package.
  4. *
  5. * (c) Fabien Potencier <fabien@symfony.com>
  6. *
  7. * For the full copyright and license information, please view the LICENSE
  8. * file that was distributed with this source code.
  9. */
  10. namespace Symfony\Component\CssSelector\Tests\Parser;
  11. use Symfony\Component\CssSelector\Parser\Token;
  12. use Symfony\Component\CssSelector\Parser\TokenStream;
  13. class TokenStreamTest extends \PHPUnit_Framework_TestCase
  14. {
  15. public function testGetNext()
  16. {
  17. $stream = new TokenStream();
  18. $stream->push($t1 = new Token(Token::TYPE_IDENTIFIER, 'h1', 0));
  19. $stream->push($t2 = new Token(Token::TYPE_DELIMITER, '.', 2));
  20. $stream->push($t3 = new Token(Token::TYPE_IDENTIFIER, 'title', 3));
  21. $this->assertSame($t1, $stream->getNext());
  22. $this->assertSame($t2, $stream->getNext());
  23. $this->assertSame($t3, $stream->getNext());
  24. }
  25. public function testGetPeek()
  26. {
  27. $stream = new TokenStream();
  28. $stream->push($t1 = new Token(Token::TYPE_IDENTIFIER, 'h1', 0));
  29. $stream->push($t2 = new Token(Token::TYPE_DELIMITER, '.', 2));
  30. $stream->push($t3 = new Token(Token::TYPE_IDENTIFIER, 'title', 3));
  31. $this->assertSame($t1, $stream->getPeek());
  32. $this->assertSame($t1, $stream->getNext());
  33. $this->assertSame($t2, $stream->getPeek());
  34. $this->assertSame($t2, $stream->getPeek());
  35. $this->assertSame($t2, $stream->getNext());
  36. }
  37. public function testGetNextIdentifier()
  38. {
  39. $stream = new TokenStream();
  40. $stream->push(new Token(Token::TYPE_IDENTIFIER, 'h1', 0));
  41. $this->assertEquals('h1', $stream->getNextIdentifier());
  42. }
  43. public function testFailToGetNextIdentifier()
  44. {
  45. $this->setExpectedException('Symfony\Component\CssSelector\Exception\SyntaxErrorException');
  46. $stream = new TokenStream();
  47. $stream->push(new Token(Token::TYPE_DELIMITER, '.', 2));
  48. $stream->getNextIdentifier();
  49. }
  50. public function testGetNextIdentifierOrStar()
  51. {
  52. $stream = new TokenStream();
  53. $stream->push(new Token(Token::TYPE_IDENTIFIER, 'h1', 0));
  54. $this->assertEquals('h1', $stream->getNextIdentifierOrStar());
  55. $stream->push(new Token(Token::TYPE_DELIMITER, '*', 0));
  56. $this->assertNull($stream->getNextIdentifierOrStar());
  57. }
  58. public function testFailToGetNextIdentifierOrStar()
  59. {
  60. $this->setExpectedException('Symfony\Component\CssSelector\Exception\SyntaxErrorException');
  61. $stream = new TokenStream();
  62. $stream->push(new Token(Token::TYPE_DELIMITER, '.', 2));
  63. $stream->getNextIdentifierOrStar();
  64. }
  65. public function testSkipWhitespace()
  66. {
  67. $stream = new TokenStream();
  68. $stream->push($t1 = new Token(Token::TYPE_IDENTIFIER, 'h1', 0));
  69. $stream->push($t2 = new Token(Token::TYPE_WHITESPACE, ' ', 2));
  70. $stream->push($t3 = new Token(Token::TYPE_IDENTIFIER, 'h1', 3));
  71. $stream->skipWhitespace();
  72. $this->assertSame($t1, $stream->getNext());
  73. $stream->skipWhitespace();
  74. $this->assertSame($t3, $stream->getNext());
  75. }
  76. }