Version 1
[yaffs-website] / vendor / egulias / email-validator / tests / egulias / Tests / EmailValidator / EmailLexerTest.php
diff --git a/vendor/egulias/email-validator/tests/egulias/Tests/EmailValidator/EmailLexerTest.php b/vendor/egulias/email-validator/tests/egulias/Tests/EmailValidator/EmailLexerTest.php
new file mode 100644 (file)
index 0000000..d5389ef
--- /dev/null
@@ -0,0 +1,161 @@
+<?php
+
+namespace Egulias\EmailValidator\Tests;
+
+use Egulias\EmailValidator\EmailLexer;
+
+class EmailLexerTests extends \PHPUnit_Framework_TestCase
+{
+
+    public function testLexerExtendsLib()
+    {
+        $lexer = new EmailLexer();
+        $this->assertInstanceOf('Doctrine\Common\Lexer\AbstractLexer', $lexer);
+    }
+
+    /**
+     *  @dataProvider getTokens
+     *
+     */
+    public function testLexerTokens($str, $token)
+    {
+        $lexer = new EmailLexer();
+        $lexer->setInput($str);
+        $lexer->moveNext();
+        $lexer->moveNext();
+        $this->assertEquals($token, $lexer->token['type']);
+    }
+
+    public function testLexerParsesMultipleSpaces()
+    {
+        $lexer = new EmailLexer();
+        $lexer->setInput('  ');
+        $lexer->moveNext();
+        $lexer->moveNext();
+        $this->assertEquals(EmailLexer::S_SP, $lexer->token['type']);
+        $lexer->moveNext();
+        $this->assertEquals(EmailLexer::S_SP, $lexer->token['type']);
+    }
+
+    /**
+     * @dataProvider invalidUTF8CharsProvider
+     */
+    public function testLexerParsesInvalidUTF8($char)
+    {
+        $lexer = new EmailLexer();
+        $lexer->setInput($char);
+        $lexer->moveNext();
+        $lexer->moveNext();
+
+        $this->assertEquals(EmailLexer::INVALID, $lexer->token['type']);
+    }
+
+    public function invalidUTF8CharsProvider()
+    {
+        $chars = array();
+        for ($i = 0; $i < 0x100; ++$i) {
+            $c = $this->utf8Chr($i);
+            if (preg_match('/(?=\p{Cc})(?=[^\t\n\n\r])/u', $c) && !preg_match('/\x{0000}/u', $c)) {
+                $chars[] = array($c);
+            }
+        }
+
+        return $chars;
+    }
+
+    protected function utf8Chr($code_point)
+    {
+
+        if ($code_point < 0 || 0x10FFFF < $code_point || (0xD800 <= $code_point && $code_point <= 0xDFFF)) {
+            return '';
+        }
+
+        if ($code_point < 0x80) {
+            $hex[0] = $code_point;
+            $ret = chr($hex[0]);
+        } elseif ($code_point < 0x800) {
+            $hex[0] = 0x1C0 | $code_point >> 6;
+            $hex[1] = 0x80  | $code_point & 0x3F;
+            $ret = chr($hex[0]).chr($hex[1]);
+        } elseif ($code_point < 0x10000) {
+            $hex[0] = 0xE0 | $code_point >> 12;
+            $hex[1] = 0x80 | $code_point >> 6 & 0x3F;
+            $hex[2] = 0x80 | $code_point & 0x3F;
+            $ret = chr($hex[0]).chr($hex[1]).chr($hex[2]);
+        } else {
+            $hex[0] = 0xF0 | $code_point >> 18;
+            $hex[1] = 0x80 | $code_point >> 12 & 0x3F;
+            $hex[2] = 0x80 | $code_point >> 6 & 0x3F;
+            $hex[3] = 0x80 | $code_point  & 0x3F;
+            $ret = chr($hex[0]).chr($hex[1]).chr($hex[2]).chr($hex[3]);
+        }
+
+        return $ret;
+    }
+
+    public function testLexerForTab()
+    {
+        $lexer = new EmailLexer();
+        $lexer->setInput("foo\tbar");
+        $lexer->moveNext();
+        $lexer->skipUntil(EmailLexer::S_HTAB);
+        $lexer->moveNext();
+        $this->assertEquals(EmailLexer::S_HTAB, $lexer->token['type']);
+    }
+
+    public function testLexerForUTF8()
+    {
+        $lexer = new EmailLexer();
+        $lexer->setInput("áÇ@bar.com");
+        $lexer->moveNext();
+        $lexer->moveNext();
+        $this->assertEquals(EmailLexer::GENERIC, $lexer->token['type']);
+        $lexer->moveNext();
+        $this->assertEquals(EmailLexer::GENERIC, $lexer->token['type']);
+    }
+
+    public function testLexerSearchToken()
+    {
+        $lexer = new EmailLexer();
+        $lexer->setInput("foo\tbar");
+        $lexer->moveNext();
+        $this->assertTrue($lexer->find(EmailLexer::S_HTAB));
+    }
+
+    public function getTokens()
+    {
+        return array(
+            array("foo", EmailLexer::GENERIC),
+            array("\r", EmailLexer::S_CR),
+            array("\t", EmailLexer::S_HTAB),
+            array("\r\n", EmailLexer::CRLF),
+            array("\n", EmailLexer::S_LF),
+            array(" ", EmailLexer::S_SP),
+            array("@", EmailLexer::S_AT),
+            array("IPv6", EmailLexer::S_IPV6TAG),
+            array("::", EmailLexer::S_DOUBLECOLON),
+            array(":", EmailLexer::S_COLON),
+            array(".", EmailLexer::S_DOT),
+            array("\"", EmailLexer::S_DQUOTE),
+            array("-", EmailLexer::S_HYPHEN),
+            array("\\", EmailLexer::S_BACKSLASH),
+            array("/", EmailLexer::S_SLASH),
+            array("(", EmailLexer::S_OPENPARENTHESIS),
+            array(")", EmailLexer::S_CLOSEPARENTHESIS),
+            array('<', EmailLexer::S_LOWERTHAN),
+            array('>', EmailLexer::S_GREATERTHAN),
+            array('[', EmailLexer::S_OPENBRACKET),
+            array(']', EmailLexer::S_CLOSEBRACKET),
+            array(';', EmailLexer::S_SEMICOLON),
+            array(',', EmailLexer::S_COMMA),
+            array('<', EmailLexer::S_LOWERTHAN),
+            array('>', EmailLexer::S_GREATERTHAN),
+            array('{', EmailLexer::S_OPENQBRACKET),
+            array('}', EmailLexer::S_CLOSEQBRACKET),
+            array('',  EmailLexer::S_EMPTY),
+            array(chr(31),  EmailLexer::INVALID),
+            array(chr(226),  EmailLexer::GENERIC),
+            array(chr(0),  EmailLexer::C_NUL)
+        );
+    }
+}