2018-11-23 12:29:20 +00:00
< ? php
/**
* @ file
* Test the Scanner . This requires the InputStream tests are all good .
*/
2019-01-24 08:00:03 +00:00
2018-11-23 12:29:20 +00:00
namespace Masterminds\HTML5\Tests\Parser ;
use Masterminds\HTML5\Parser\StringInputStream ;
use Masterminds\HTML5\Parser\Scanner ;
class ScannerTest extends \Masterminds\HTML5\Tests\TestCase
{
/**
* A canary test to make sure the basics are setup and working .
*/
public function testConstructDeprecated ()
{
2019-01-24 08:00:03 +00:00
$is = new StringInputStream ( 'abc' );
2018-11-23 12:29:20 +00:00
$s = new Scanner ( $is );
$this -> assertInstanceOf ( '\Masterminds\HTML5\Parser\Scanner' , $s );
}
public function testConstruct ()
{
$this -> assertInstanceOf ( '\Masterminds\HTML5\Parser\Scanner' , new Scanner ( 'abc' ));
}
public function testNextDeprecated ()
{
2019-01-24 08:00:03 +00:00
$s = new Scanner ( new StringInputStream ( 'abc' ));
2018-11-23 12:29:20 +00:00
$this -> assertEquals ( 'b' , $s -> next ());
$this -> assertEquals ( 'c' , $s -> next ());
}
public function testNext ()
{
$s = new Scanner ( 'abc' );
$this -> assertEquals ( 'b' , $s -> next ());
$this -> assertEquals ( 'c' , $s -> next ());
}
public function testPosition ()
{
$s = new Scanner ( 'abc' );
$this -> assertEquals ( 0 , $s -> position ());
$s -> next ();
$this -> assertEquals ( 1 , $s -> position ());
}
public function testPeek ()
{
$s = new Scanner ( 'abc' );
$this -> assertEquals ( 'b' , $s -> peek ());
$s -> next ();
$this -> assertEquals ( 'c' , $s -> peek ());
}
public function testCurrent ()
{
$s = new Scanner ( 'abc' );
// Before scanning the string begins the current is empty.
$this -> assertEquals ( 'a' , $s -> current ());
$c = $s -> next ();
$this -> assertEquals ( 'b' , $s -> current ());
// Test movement through the string.
$c = $s -> next ();
$this -> assertEquals ( 'c' , $s -> current ());
}
public function testUnconsume ()
{
$s = new Scanner ( 'abcdefghijklmnopqrst' );
// Get initial position.
$s -> next ();
$start = $s -> position ();
// Move forward a bunch of positions.
$amount = 7 ;
2019-01-24 08:00:03 +00:00
for ( $i = 0 ; $i < $amount ; ++ $i ) {
2018-11-23 12:29:20 +00:00
$s -> next ();
}
// Roll back the amount we moved forward.
$s -> unconsume ( $amount );
$this -> assertEquals ( $start , $s -> position ());
}
public function testGetHex ()
{
2019-01-24 08:00:03 +00:00
$s = new Scanner ( 'ab13ck45DE*' );
2018-11-23 12:29:20 +00:00
$this -> assertEquals ( 'ab13c' , $s -> getHex ());
$s -> next ();
$this -> assertEquals ( '45DE' , $s -> getHex ());
}
public function testGetAsciiAlpha ()
{
$s = new Scanner ( 'abcdef1%mnop*' );
$this -> assertEquals ( 'abcdef' , $s -> getAsciiAlpha ());
// Move past the 1% to scan the next group of text.
$s -> next ();
$s -> next ();
$this -> assertEquals ( 'mnop' , $s -> getAsciiAlpha ());
}
public function testGetAsciiAlphaNum ()
{
$s = new Scanner ( 'abcdef1ghpo#mn94op' );
$this -> assertEquals ( 'abcdef1ghpo' , $s -> getAsciiAlphaNum ());
// Move past the # to scan the next group of text.
$s -> next ();
$this -> assertEquals ( 'mn94op' , $s -> getAsciiAlphaNum ());
}
public function testGetNumeric ()
{
$s = new Scanner ( '1784a 45 9867 #' );
$this -> assertEquals ( '1784' , $s -> getNumeric ());
// Move past the 'a ' to scan the next group of text.
$s -> next ();
$s -> next ();
$this -> assertEquals ( '45' , $s -> getNumeric ());
}
public function testCurrentLine ()
{
$s = new Scanner ( " 1784a \n 45 \n 9867 # \n This is a test. " );
$this -> assertEquals ( 1 , $s -> currentLine ());
// Move to the next line.
$s -> getAsciiAlphaNum ();
$s -> next ();
$this -> assertEquals ( 2 , $s -> currentLine ());
}
public function testColumnOffset ()
{
$s = new Scanner ( " 1784a a \n 45 9867 # \n This is a test. " );
// Move the pointer to the space.
$s -> getAsciiAlphaNum ();
$this -> assertEquals ( 5 , $s -> columnOffset ());
// We move the pointer ahead. There must be a better way to do this.
$s -> next ();
$s -> next ();
$s -> next ();
$s -> next ();
$s -> next ();
$s -> next ();
$this -> assertEquals ( 3 , $s -> columnOffset ());
}
public function testRemainingChars ()
{
$string = " \n 45 \n 9867 # \n This is a test. " ;
$s = new Scanner ( " 1784a \n 45 \n 9867 # \n This is a test. " );
$s -> getAsciiAlphaNum ();
$this -> assertEquals ( $string , $s -> remainingChars ());
}
}