From 2af1f6ef4f50a22861a8ec78ed2defb72913cab7 Mon Sep 17 00:00:00 2001 From: Matt Farina Date: Tue, 16 Apr 2013 09:39:02 -0400 Subject: Added a FileInputStream for anything that can be grabbed by file_get_contents. --- test/HTML5/Parser/FileInputStreamTest.html | 10 ++ test/HTML5/Parser/FileInputStreamTest.php | 153 +++++++++++++++++++++++++++++ 2 files changed, 163 insertions(+) create mode 100644 test/HTML5/Parser/FileInputStreamTest.html create mode 100644 test/HTML5/Parser/FileInputStreamTest.php (limited to 'test') diff --git a/test/HTML5/Parser/FileInputStreamTest.html b/test/HTML5/Parser/FileInputStreamTest.html new file mode 100644 index 0000000..a976e8b --- /dev/null +++ b/test/HTML5/Parser/FileInputStreamTest.html @@ -0,0 +1,10 @@ + + + + + Test + + +

This is a test.

+ + \ No newline at end of file diff --git a/test/HTML5/Parser/FileInputStreamTest.php b/test/HTML5/Parser/FileInputStreamTest.php new file mode 100644 index 0000000..2ee2440 --- /dev/null +++ b/test/HTML5/Parser/FileInputStreamTest.php @@ -0,0 +1,153 @@ +assertInstanceOf('\HTML5\Parser\FileInputStream', $s); + } + + public function testNext() { + $s = new FileInputStream(__DIR__ . '/FileInputStreamTest.html'); + + $s->next(); + $this->assertEquals('!', $s->current()); + $s->next(); + $this->assertEquals('d', $s->current()); + } + + public function testKey() { + $s = new FileInputStream(__DIR__ . '/FileInputStreamTest.html'); + + $this->assertEquals(0, $s->key()); + + $s->next(); + $this->assertEquals(1, $s->key()); + } + + public function testPeek() { + $s = new FileInputStream(__DIR__ . '/FileInputStreamTest.html'); + + $this->assertEquals('!', $s->peek()); + + $s->next(); + $this->assertEquals('d', $s->peek()); + } + + public function testCurrent() { + $s = new FileInputStream(__DIR__ . '/FileInputStreamTest.html'); + + $this->assertEquals('<', $s->current()); + + $s->next(); + $this->assertEquals('!', $s->current()); + + $s->next(); + $this->assertEquals('d', $s->current()); + } + + public function testColumnOffset() { + $s = new FileInputStream(__DIR__ . '/FileInputStreamTest.html'); + $this->assertEquals(0, $s->columnOffset()); + $s->next(); + $this->assertEquals(1, $s->columnOffset()); + $s->next(); + $this->assertEquals(2, $s->columnOffset()); + $s->next(); + $this->assertEquals(3, $s->columnOffset()); + + // Make sure we get to the second line + $s->next(); $s->next(); $s->next(); $s->next(); + $s->next(); $s->next(); $s->next(); $s->next(); + $s->next(); $s->next(); $s->next(); $s->next(); + $s->next(); + $this->assertEquals(0, $s->columnOffset()); + + $s->next(); + $canary = $s->current(); // h + $this->assertEquals('h', $canary); + $this->assertEquals(1, $s->columnOffset()); + } + + public function testCurrentLine() { + $s = new FileInputStream(__DIR__ . '/FileInputStreamTest.html'); + + $this->assertEquals(1, $s->currentLine()); + + // Make sure we get to the second line + $s->next(); $s->next(); $s->next(); $s->next(); + $s->next(); $s->next(); $s->next(); $s->next(); + $s->next(); $s->next(); $s->next(); $s->next(); + $s->next(); $s->next(); $s->next(); $s->next(); + $this->assertEquals(2, $s->currentLine()); + + // Make sure we get to the third line + $s->next(); $s->next(); $s->next(); $s->next(); + $s->next(); $s->next(); $s->next(); $s->next(); + $s->next(); $s->next(); $s->next(); $s->next(); + $s->next(); $s->next(); $s->next(); $s->next(); + $s->next(); + $this->assertEquals(3, $s->currentLine()); + } + + public function testRemainingChars() { + $text = file_get_contents(__DIR__ . '/FileInputStreamTest.html'); + $s = new FileInputStream(__DIR__ . '/FileInputStreamTest.html'); + $this->assertEquals($text, $s->remainingChars()); + + $text = substr(file_get_contents(__DIR__ . '/FileInputStreamTest.html'), 1); + $s = new FileInputStream(__DIR__ . '/FileInputStreamTest.html'); + $s->next(); // Pop one. + $this->assertEquals($text, $s->remainingChars()); + } + + public function testCharsUnitl() { + $s = new FileInputStream(__DIR__ . '/FileInputStreamTest.html'); + + $this->assertEquals('', $s->charsUntil('<')); + // Pointer at '<', moves to ' ' + $this->assertEquals('charsUntil(' ', 20)); + + // Pointer at ' ', moves to '>' + $this->assertEquals(' html', $s->charsUntil('>')); + + // Pointer at '>', moves to '\n'. + $this->assertEquals('>', $s->charsUntil("\n")); + + // Pointer at '\n', move forward then to the next'\n'. + $s->next(); + $this->assertEquals('', $s->charsUntil("\n")); + + // Ony get one of the spaces. + $this->assertEquals("\n ", $s->charsUntil('<', 2)); + + // Get the other space. + $this->assertEquals(" ", $s->charsUntil('<')); + + // This should scan to the end of the file. + $text = " + + Test + + +

This is a test.

+ +"; + $this->assertEquals($text, $s->charsUntil("\t")); + } + + public function testCharsWhile() { + $s = new FileInputStream(__DIR__ . '/FileInputStreamTest.html'); + + $this->assertEquals('charsWhile('!<')); + $this->assertEquals('', $s->charsWhile('>')); + $this->assertEquals('doctype', $s->charsWhile('odcyept')); + $this->assertEquals(' htm', $s->charsWhile('html ', 4)); + } +} \ No newline at end of file -- cgit v1.2.3