* * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Tests\Parsica\Parsica\Internal; use PHPUnit\Framework\TestCase; use Parsica\Parsica\Internal\Position; use Parsica\Parsica\StringStream; final class StringStreamTest extends TestCase { /** @test */ public function take1() { $s = new StringStream("abc"); $t = $s->take1(); $this->assertEquals("a", $t->chunk()); $expectedPosition = new Position("", 1, 2); $expectedStream = new StringStream("bc", $expectedPosition); $this->assertEquals($expectedStream, $t->stream()); } /** @test */ public function takeN() { $s = new StringStream("abcde"); $t = $s->takeN(3); $this->assertEquals("abc", $t->chunk()); $expectedPosition = new Position("", 1, 4); $expectedStream = new StringStream("de", $expectedPosition); $this->assertEquals($expectedStream, $t->stream()); } /** @test */ public function takeWhile() { $s = new StringStream("abc\nde"); $t = $s->takeWhile(fn($c) => $c !== "\n"); $this->assertEquals("abc", $t->chunk()); $expectedPosition = new Position("", 1, 4); $expectedStream = new StringStream("\nde", $expectedPosition); $this->assertEquals($expectedStream, $t->stream()); } }