1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
<?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.
*/
namespace Symfony\Component\CssSelector\Tests\Parser;
use PHPUnit\Framework\TestCase;
use Symfony\Component\CssSelector\Parser\Reader;
class ReaderTest extends TestCase
{
public function testIsEOF()
{
$reader = new Reader('');
$this->assertTrue($reader->isEOF());
$reader = new Reader('hello');
$this->assertFalse($reader->isEOF());
$this->assignPosition($reader, 2);
$this->assertFalse($reader->isEOF());
$this->assignPosition($reader, 5);
$this->assertTrue($reader->isEOF());
}
public function testGetRemainingLength()
{
$reader = new Reader('hello');
$this->assertEquals(5, $reader->getRemainingLength());
$this->assignPosition($reader, 2);
$this->assertEquals(3, $reader->getRemainingLength());
$this->assignPosition($reader, 5);
$this->assertEquals(0, $reader->getRemainingLength());
}
public function testGetSubstring()
{
$reader = new Reader('hello');
$this->assertEquals('he', $reader->getSubstring(2));
$this->assertEquals('el', $reader->getSubstring(2, 1));
$this->assignPosition($reader, 2);
$this->assertEquals('ll', $reader->getSubstring(2));
$this->assertEquals('lo', $reader->getSubstring(2, 1));
}
public function testGetOffset()
{
$reader = new Reader('hello');
$this->assertEquals(2, $reader->getOffset('ll'));
$this->assertFalse($reader->getOffset('w'));
$this->assignPosition($reader, 2);
$this->assertEquals(0, $reader->getOffset('ll'));
$this->assertFalse($reader->getOffset('he'));
}
public function testFindPattern()
{
$reader = new Reader('hello');
$this->assertFalse($reader->findPattern('/world/'));
$this->assertEquals(['hello', 'h'], $reader->findPattern('/^([a-z]).*/'));
$this->assignPosition($reader, 2);
$this->assertFalse($reader->findPattern('/^h.*/'));
$this->assertEquals(['llo'], $reader->findPattern('/^llo$/'));
}
public function testMoveForward()
{
$reader = new Reader('hello');
$this->assertEquals(0, $reader->getPosition());
$reader->moveForward(2);
$this->assertEquals(2, $reader->getPosition());
}
public function testToEnd()
{
$reader = new Reader('hello');
$reader->moveToEnd();
$this->assertTrue($reader->isEOF());
}
private function assignPosition(Reader $reader, $value)
{
$position = new \ReflectionProperty($reader, 'position');
$position->setAccessible(true);
$position->setValue($reader, $value);
}
}