ScannerTest.php 3.61 KB
Newer Older
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 103 104 105 106 107
<?php
require_once 'PHPUnit/Framework.php';
require_once '../Doctrine.php';
spl_autoload_register(array('Doctrine', 'autoload'));

class ScannerTest extends PHPUnit_Framework_TestCase
{
    public function testScannerRecognizesIdentifierWithLengthOfOneCharacter()
    {
        $scanner = new Doctrine_Query_Scanner('u');

        $token = $scanner->scan();
        $this->assertEquals(Doctrine_Query_Token::T_IDENTIFIER, $token->getType());
        $this->assertEquals('u', $token->getValue());
    }

    public function testScannerRecognizesIdentifierConsistingOfLetters()
    {
        $scanner = new Doctrine_Query_Scanner('someIdentifier');

        $token = $scanner->scan();
        $this->assertEquals(Doctrine_Query_Token::T_IDENTIFIER, $token->getType());
        $this->assertEquals('someIdentifier', $token->getValue());
    }

    public function testScannerRecognizesIdentifierIncludingDigits()
    {
        $scanner = new Doctrine_Query_Scanner('s0m31d3nt1f13r');

        $token = $scanner->scan();
        $this->assertEquals(Doctrine_Query_Token::T_IDENTIFIER, $token->getType());
        $this->assertEquals('s0m31d3nt1f13r', $token->getValue());
    }

    public function testScannerRecognizesIdentifierIncludingUnderscore()
    {
        $scanner = new Doctrine_Query_Scanner('some_identifier');

        $token = $scanner->scan();
        $this->assertEquals(Doctrine_Query_Token::T_IDENTIFIER, $token->getType());
        $this->assertEquals('some_identifier', $token->getValue());
    }

    public function testScannerRecognizesDecimalInteger()
    {
        $scanner = new Doctrine_Query_Scanner('1234');

        $token = $scanner->scan();
        $this->assertEquals(Doctrine_Query_Token::T_NUMERIC, $token->getType());
        $this->assertEquals(1234, $token->getValue());
    }

    public function testScannerRecognizesNegativeDecimalInteger()
    {
        $scanner = new Doctrine_Query_Scanner('-123');

        $token = $scanner->scan();
        $this->assertEquals(Doctrine_Query_Token::T_NUMERIC, $token->getType());
        $this->assertEquals(-123, $token->getValue());
    }

    public function testScannerRecognizesFloat()
    {
        $scanner = new Doctrine_Query_Scanner('1.234');

        $token = $scanner->scan();
        $this->assertEquals(Doctrine_Query_Token::T_NUMERIC, $token->getType());
        $this->assertEquals(1.234, $token->getValue());
    }

    public function testScannerRecognizesFloatWithExponent()
    {
        $scanner = new Doctrine_Query_Scanner('1.2e3');

        $token = $scanner->scan();
        $this->assertEquals(Doctrine_Query_Token::T_NUMERIC, $token->getType());
        $this->assertEquals(1.2e3, $token->getValue());
    }

    public function testScannerRecognizesFloatWithNegativeExponent()
    {
        $scanner = new Doctrine_Query_Scanner('7E-10');

        $token = $scanner->scan();
        $this->assertEquals(Doctrine_Query_Token::T_NUMERIC, $token->getType());
        $this->assertEquals(7E-10, $token->getValue());
    }

    public function testScannerRecognizesStringContainingWhitespace()
    {
        $scanner = new Doctrine_Query_Scanner("'This is a string.'");

        $token = $scanner->scan();
        $this->assertEquals(Doctrine_Query_Token::T_STRING, $token->getType());
        $this->assertEquals("'This is a string.'", $token->getValue());
    }

    public function testScannerRecognizesStringContainingSingleQuotes()
    {
        $scanner = new Doctrine_Query_Scanner("'abc''defg'''");

        $token = $scanner->scan();
        $this->assertEquals(Doctrine_Query_Token::T_STRING, $token->getType());
        $this->assertEquals("'abc''defg'''", $token->getValue());
    }

}