Rajout de doctrine/orm
[zf2.biz/application_blanche.git] / vendor / doctrine / orm / tests / Doctrine / Tests / ORM / Query / LexerTest.php
diff --git a/vendor/doctrine/orm/tests/Doctrine/Tests/ORM/Query/LexerTest.php b/vendor/doctrine/orm/tests/Doctrine/Tests/ORM/Query/LexerTest.php
new file mode 100644 (file)
index 0000000..29bba4b
--- /dev/null
@@ -0,0 +1,234 @@
+<?php
+
+namespace Doctrine\Tests\ORM\Query;
+
+use Doctrine\ORM\Query\Lexer;
+
+require_once __DIR__ . '/../../TestInit.php';
+
+class LexerTest extends \Doctrine\Tests\OrmTestCase
+{
+    //private $_lexer;
+
+    protected function setUp() {
+    }
+
+    public function testScannerRecognizesIdentifierWithLengthOfOneCharacter()
+    {
+        $lexer = new Lexer('u');
+
+        $lexer->moveNext();
+        $token = $lexer->lookahead;
+
+        $this->assertEquals(Lexer::T_IDENTIFIER, $token['type']);
+        $this->assertEquals('u', $token['value']);
+    }
+
+    public function testScannerRecognizesIdentifierConsistingOfLetters()
+    {
+        $lexer = new Lexer('someIdentifier');
+
+        $lexer->moveNext();
+        $token = $lexer->lookahead;
+        $this->assertEquals(Lexer::T_IDENTIFIER, $token['type']);
+        $this->assertEquals('someIdentifier', $token['value']);
+    }
+
+    public function testScannerRecognizesIdentifierIncludingDigits()
+    {
+        $lexer = new Lexer('s0m31d3nt1f13r');
+
+        $lexer->moveNext();
+        $token = $lexer->lookahead;
+        $this->assertEquals(Lexer::T_IDENTIFIER, $token['type']);
+        $this->assertEquals('s0m31d3nt1f13r', $token['value']);
+    }
+
+    public function testScannerRecognizesIdentifierIncludingUnderscore()
+    {
+        $lexer = new Lexer('some_identifier');
+        $lexer->moveNext();
+        $token = $lexer->lookahead;
+        $this->assertEquals(Lexer::T_IDENTIFIER, $token['type']);
+        $this->assertEquals('some_identifier', $token['value']);
+    }
+
+    public function testScannerRecognizesDecimalInteger()
+    {
+        $lexer = new Lexer('1234');
+        $lexer->moveNext();
+        $token = $lexer->lookahead;
+        $this->assertEquals(Lexer::T_INTEGER, $token['type']);
+        $this->assertEquals(1234, $token['value']);
+    }
+
+    public function testScannerRecognizesFloat()
+    {
+        $lexer = new Lexer('1.234');
+        $lexer->moveNext();
+        $token = $lexer->lookahead;
+        $this->assertEquals(Lexer::T_FLOAT, $token['type']);
+        $this->assertEquals(1.234, $token['value']);
+    }
+
+    public function testScannerRecognizesFloatWithExponent()
+    {
+        $lexer = new Lexer('1.2e3');
+        $lexer->moveNext();
+        $token = $lexer->lookahead;
+        $this->assertEquals(Lexer::T_FLOAT, $token['type']);
+        $this->assertEquals(1.2e3, $token['value']);
+    }
+
+    public function testScannerRecognizesFloatWithExponent2()
+    {
+        $lexer = new Lexer('0.2e3');
+        $lexer->moveNext();
+        $token = $lexer->lookahead;
+        $this->assertEquals(Lexer::T_FLOAT, $token['type']);
+        $this->assertEquals(.2e3, $token['value']);
+    }
+
+    public function testScannerRecognizesFloatWithNegativeExponent()
+    {
+        $lexer = new Lexer('7E-10');
+        $lexer->moveNext();
+        $token = $lexer->lookahead;
+        $this->assertEquals(Lexer::T_FLOAT, $token['type']);
+        $this->assertEquals(7E-10, $token['value']);
+    }
+
+    public function testScannerRecognizesFloatBig()
+    {
+        $lexer = new Lexer('123456789.01');
+        $lexer->moveNext();
+        $token = $lexer->lookahead;
+        $this->assertEquals(Lexer::T_FLOAT, $token['type']);
+        $this->assertEquals(1.2345678901e8, $token['value']);
+    }
+
+    public function testScannerRecognizesFloatContainingWhitespace()
+    {
+        $lexer = new Lexer('-   1.234e2');
+        $lexer->moveNext();
+        $token = $lexer->lookahead;
+        $this->assertEquals(Lexer::T_MINUS, $token['type']);
+        $this->assertEquals('-', $token['value']);
+
+        $lexer->moveNext();
+        $token = $lexer->lookahead;
+        $this->assertEquals(Lexer::T_FLOAT, $token['type']);
+        $this->assertNotEquals(-1.234e2, $token['value']);
+        $this->assertEquals(1.234e2, $token['value']);
+    }
+
+    public function testScannerRecognizesStringContainingWhitespace()
+    {
+        $lexer = new Lexer("'This is a string.'");
+        $lexer->moveNext();
+        $token = $lexer->lookahead;
+        $this->assertEquals(Lexer::T_STRING, $token['type']);
+        $this->assertEquals("This is a string.", $token['value']);
+    }
+
+    public function testScannerRecognizesStringContainingSingleQuotes()
+    {
+        $lexer = new Lexer("'abc''defg'''");
+        $lexer->moveNext();
+        $token = $lexer->lookahead;
+        $this->assertEquals(Lexer::T_STRING, $token['type']);
+        $this->assertEquals("abc'defg'", $token['value']);
+    }
+
+    public function testScannerRecognizesInputParameter()
+    {
+        $lexer = new Lexer('?1');
+        $lexer->moveNext();
+        $token = $lexer->lookahead;
+        $this->assertEquals(Lexer::T_INPUT_PARAMETER, $token['type']);
+        $this->assertEquals('?1', $token['value']);
+    }
+
+    public function testScannerRecognizesNamedInputParameter()
+    {
+        $lexer = new Lexer(':name');
+        $lexer->moveNext();
+        $token = $lexer->lookahead;
+        $this->assertEquals(Lexer::T_INPUT_PARAMETER, $token['type']);
+        $this->assertEquals(':name', $token['value']);
+    }
+
+    public function testScannerTokenizesASimpleQueryCorrectly()
+    {
+        $dql = "SELECT u FROM My\Namespace\User u WHERE u.name = 'Jack O''Neil'";
+        $lexer = new Lexer($dql);
+
+        $tokens = array(
+            array(
+                'value' => 'SELECT',
+                'type'  => Lexer::T_SELECT,
+                'position' => 0
+            ),
+            array(
+                'value' => 'u',
+                'type'  => Lexer::T_IDENTIFIER,
+                'position' => 7
+            ),
+            array(
+                'value' => 'FROM',
+                'type'  => Lexer::T_FROM,
+                'position' => 9
+            ),
+            array(
+                'value' => 'My\Namespace\User',
+                'type'  => Lexer::T_IDENTIFIER,
+                'position' => 14
+            ),
+            array(
+                'value' => 'u',
+                'type'  => Lexer::T_IDENTIFIER,
+                'position' => 32
+            ),
+            array(
+                'value' => 'WHERE',
+                'type'  => Lexer::T_WHERE,
+                'position' => 34
+            ),
+            array(
+                'value' => 'u',
+                'type'  => Lexer::T_IDENTIFIER,
+                'position' => 40
+            ),
+            array(
+                'value' => '.',
+                'type'  => Lexer::T_DOT,
+                'position' => 41
+            ),
+            array(
+                'value' => 'name',
+                'type'  => Lexer::T_IDENTIFIER,
+                'position' => 42
+            ),
+            array(
+                'value' => '=',
+                'type'  => Lexer::T_EQUALS,
+                'position' => 47
+            ),
+            array(
+                'value' => "Jack O'Neil",
+                'type'  => Lexer::T_STRING,
+                'position' => 49
+            )
+        );
+
+        foreach ($tokens as $expected) {
+            $lexer->moveNext();
+            $actual = $lexer->lookahead;
+            $this->assertEquals($expected['value'], $actual['value']);
+            $this->assertEquals($expected['type'], $actual['type']);
+            $this->assertEquals($expected['position'], $actual['position']);
+        }
+
+        $this->assertFalse($lexer->moveNext());
+    }
+}