Added Laravel project

This commit is contained in:
2017-09-17 00:35:10 +02:00
parent a3c19304d5
commit ecf605b8f5
6246 changed files with 682270 additions and 2 deletions

View File

@@ -0,0 +1,29 @@
<?php declare(strict_types = 1);
namespace TheSeer\Tokenizer;
use PHPUnit\Framework\TestCase;
/**
* @covers \TheSeer\Tokenizer\NamespaceUri
*/
class NamespaceUriTest extends TestCase {
public function testCanBeConstructedWithValidNamespace() {
$this->assertInstanceOf(
NamespaceUri::class,
new NamespaceUri('a:b')
);
}
public function testInvalidNamespaceThrowsException() {
$this->expectException(NamespaceUriException::class);
new NamespaceUri('invalid-no-colon');
}
public function testStringRepresentationCanBeRetrieved() {
$this->assertEquals(
'a:b',
(new NamespaceUri('a:b'))->asString()
);
}
}

View File

@@ -0,0 +1,72 @@
<?php declare(strict_types = 1);
namespace TheSeer\Tokenizer;
use PHPUnit\Framework\TestCase;
/**
* @covers \TheSeer\Tokenizer\TokenCollection
*/
class TokenCollectionTest extends TestCase {
/** @var TokenCollection */
private $collection;
protected function setUp() {
$this->collection = new TokenCollection();
}
public function testCollectionIsInitiallyEmpty() {
$this->assertCount(0, $this->collection);
}
public function testTokenCanBeAddedToCollection() {
$token = $this->createMock(Token::class);
$this->collection->addToken($token);
$this->assertCount(1, $this->collection);
$this->assertSame($token, $this->collection[0]);
}
public function testCanIterateOverTokens() {
$token = $this->createMock(Token::class);
$this->collection->addToken($token);
$this->collection->addToken($token);
foreach($this->collection as $position => $current) {
$this->assertInternalType('integer', $position);
$this->assertSame($token, $current);
}
}
public function testOffsetCanBeUnset() {
$token = $this->createMock(Token::class);
$this->collection->addToken($token);
$this->assertCount(1, $this->collection);
unset($this->collection[0]);
$this->assertCount(0, $this->collection);
}
public function testTokenCanBeSetViaOffsetPosition() {
$token = $this->createMock(Token::class);
$this->collection[0] = $token;
$this->assertCount(1, $this->collection);
$this->assertSame($token, $this->collection[0]);
}
public function testTryingToUseNonIntegerOffsetThrowsException() {
$this->expectException(TokenCollectionException::class);
$this->collection['foo'] = $this->createMock(Token::class);
}
public function testTryingToSetNonTokenAtOffsetThrowsException() {
$this->expectException(TokenCollectionException::class);
$this->collection[0] = 'abc';
}
public function testTryingToGetTokenAtNonExistingOffsetThrowsException() {
$this->expectException(TokenCollectionException::class);
$x = $this->collection[3];
}
}

View File

@@ -0,0 +1,31 @@
<?php declare(strict_types = 1);
namespace TheSeer\Tokenizer;
use PHPUnit\Framework\TestCase;
class TokenTest extends TestCase {
/** @var Token */
private $token;
protected function setUp() {
$this->token = new Token(1,'test-dummy', 'blank');
}
public function testTokenCanBeCreated() {
$this->assertInstanceOf(Token::class, $this->token);
}
public function testTokenLineCanBeRetrieved() {
$this->assertEquals(1, $this->token->getLine());
}
public function testTokenNameCanBeRetrieved() {
$this->assertEquals('test-dummy', $this->token->getName());
}
public function testTokenValueCanBeRetrieved() {
$this->assertEquals('blank', $this->token->getValue());
}
}

View File

@@ -0,0 +1,21 @@
<?php declare(strict_types = 1);
namespace TheSeer\Tokenizer;
use PHPUnit\Framework\TestCase;
/**
* @covers \TheSeer\Tokenizer\Tokenizer
*/
class TokenizerTest extends TestCase {
public function testValidSourceGetsParsed() {
$tokenizer = new Tokenizer();
$result = $tokenizer->parse(file_get_contents(__DIR__ . '/_files/test.php'));
$expected = unserialize(
file_get_contents(__DIR__ . '/_files/test.php.tokens'),
[TokenCollection::class]
);
$this->assertEquals($expected, $result);
}
}

View File

@@ -0,0 +1,43 @@
<?php declare(strict_types = 1);
namespace TheSeer\Tokenizer;
use PHPUnit\Framework\TestCase;
/**
* @covers \TheSeer\Tokenizer\XMLSerializer
*/
class XMLSerializerTest extends TestCase {
/** @var TokenCollection $tokens */
private $tokens;
protected function setUp() {
$this->tokens = unserialize(
file_get_contents(__DIR__ . '/_files/test.php.tokens'),
[TokenCollection::class]
);
}
public function testCanBeSerializedToXml() {
$expected = file_get_contents(__DIR__ . '/_files/test.php.xml');
$serializer = new XMLSerializer();
$this->assertEquals($expected, $serializer->toXML($this->tokens));
}
public function testCanBeSerializedToDomDocument() {
$serializer = new XMLSerializer();
$result = $serializer->toDom($this->tokens);
$this->assertInstanceOf(\DOMDocument::class, $result);
$this->assertEquals('source', $result->documentElement->localName);
}
public function testCanBeSerializedToXmlWithCustomNamespace() {
$expected = file_get_contents(__DIR__ . '/_files/customns.xml');
$serializer = new XMLSerializer(new NamespaceUri('custom:xml:namespace'));
$this->assertEquals($expected, $serializer->toXML($this->tokens));
}
}

View File

@@ -0,0 +1,177 @@
<?xml version="1.0"?>
<source xmlns="custom:xml:namespace">
<line no="1">
<token name="T_OPEN_TAG">&lt;?php </token>
<token name="T_DECLARE">declare</token>
<token name="T_OPEN_BRACKET">(</token>
<token name="T_STRING">strict_types</token>
<token name="T_WHITESPACE"> </token>
<token name="T_EQUAL">=</token>
<token name="T_WHITESPACE"> </token>
<token name="T_LNUMBER">1</token>
<token name="T_CLOSE_BRACKET">)</token>
<token name="T_SEMICOLON">;</token>
</line>
<line no="2">
<token name="T_NAMESPACE">namespace</token>
<token name="T_WHITESPACE"> </token>
<token name="T_STRING">foo</token>
<token name="T_SEMICOLON">;</token>
</line>
<line no="3"/>
<line no="4">
<token name="T_CLASS">class</token>
<token name="T_WHITESPACE"> </token>
<token name="T_STRING">bar</token>
<token name="T_WHITESPACE"> </token>
<token name="T_OPEN_CURLY">{</token>
</line>
<line no="5">
<token name="T_WHITESPACE"> </token>
<token name="T_CONST">const</token>
<token name="T_WHITESPACE"> </token>
<token name="T_STRING">x</token>
<token name="T_WHITESPACE"> </token>
<token name="T_EQUAL">=</token>
<token name="T_WHITESPACE"> </token>
<token name="T_CONSTANT_ENCAPSED_STRING">'abc'</token>
<token name="T_SEMICOLON">;</token>
</line>
<line no="6"/>
<line no="7">
<token name="T_WHITESPACE"> </token>
<token name="T_DOC_COMMENT">/** @var int */</token>
</line>
<line no="8">
<token name="T_WHITESPACE"> </token>
<token name="T_PRIVATE">private</token>
<token name="T_WHITESPACE"> </token>
<token name="T_VARIABLE">$y</token>
<token name="T_WHITESPACE"> </token>
<token name="T_EQUAL">=</token>
<token name="T_WHITESPACE"> </token>
<token name="T_LNUMBER">1</token>
<token name="T_SEMICOLON">;</token>
</line>
<line no="9"/>
<line no="10">
<token name="T_WHITESPACE"> </token>
<token name="T_PUBLIC">public</token>
<token name="T_WHITESPACE"> </token>
<token name="T_FUNCTION">function</token>
<token name="T_WHITESPACE"> </token>
<token name="T_STRING">__construct</token>
<token name="T_OPEN_BRACKET">(</token>
<token name="T_CLOSE_BRACKET">)</token>
<token name="T_WHITESPACE"> </token>
<token name="T_OPEN_CURLY">{</token>
</line>
<line no="11">
<token name="T_WHITESPACE"> </token>
<token name="T_COMMENT">// do something</token>
</line>
<line no="12">
<token name="T_WHITESPACE"> </token>
<token name="T_CLOSE_CURLY">}</token>
</line>
<line no="13"/>
<line no="14">
<token name="T_WHITESPACE"> </token>
<token name="T_PUBLIC">public</token>
<token name="T_WHITESPACE"> </token>
<token name="T_FUNCTION">function</token>
<token name="T_WHITESPACE"> </token>
<token name="T_STRING">getY</token>
<token name="T_OPEN_BRACKET">(</token>
<token name="T_CLOSE_BRACKET">)</token>
<token name="T_COLON">:</token>
<token name="T_WHITESPACE"> </token>
<token name="T_STRING">int</token>
<token name="T_WHITESPACE"> </token>
<token name="T_OPEN_CURLY">{</token>
</line>
<line no="15">
<token name="T_WHITESPACE"> </token>
<token name="T_RETURN">return</token>
<token name="T_WHITESPACE"> </token>
<token name="T_VARIABLE">$this</token>
<token name="T_OBJECT_OPERATOR">-&gt;</token>
<token name="T_STRING">y</token>
<token name="T_SEMICOLON">;</token>
</line>
<line no="16">
<token name="T_WHITESPACE"> </token>
<token name="T_CLOSE_CURLY">}</token>
</line>
<line no="17"/>
<line no="18">
<token name="T_WHITESPACE"> </token>
<token name="T_PUBLIC">public</token>
<token name="T_WHITESPACE"> </token>
<token name="T_FUNCTION">function</token>
<token name="T_WHITESPACE"> </token>
<token name="T_STRING">getSomeX</token>
<token name="T_OPEN_BRACKET">(</token>
<token name="T_CLOSE_BRACKET">)</token>
<token name="T_COLON">:</token>
<token name="T_WHITESPACE"> </token>
<token name="T_STRING">string</token>
<token name="T_WHITESPACE"> </token>
<token name="T_OPEN_CURLY">{</token>
</line>
<line no="19">
<token name="T_WHITESPACE"> </token>
<token name="T_RETURN">return</token>
<token name="T_WHITESPACE"> </token>
<token name="T_STRING">self</token>
<token name="T_DOUBLE_COLON">::</token>
<token name="T_STRING">x</token>
<token name="T_SEMICOLON">;</token>
</line>
<line no="20">
<token name="T_WHITESPACE"> </token>
<token name="T_CLOSE_CURLY">}</token>
</line>
<line no="21"/>
<line no="22">
<token name="T_WHITESPACE"> </token>
<token name="T_PUBLIC">public</token>
<token name="T_WHITESPACE"> </token>
<token name="T_FUNCTION">function</token>
<token name="T_WHITESPACE"> </token>
<token name="T_STRING">some</token>
<token name="T_OPEN_BRACKET">(</token>
<token name="T_STRING">bar</token>
<token name="T_WHITESPACE"> </token>
<token name="T_VARIABLE">$b</token>
<token name="T_CLOSE_BRACKET">)</token>
<token name="T_COLON">:</token>
<token name="T_WHITESPACE"> </token>
<token name="T_STRING">string</token>
<token name="T_WHITESPACE"> </token>
<token name="T_OPEN_CURLY">{</token>
</line>
<line no="23">
<token name="T_WHITESPACE"> </token>
<token name="T_RETURN">return</token>
<token name="T_WHITESPACE"> </token>
<token name="T_VARIABLE">$b</token>
<token name="T_OBJECT_OPERATOR">-&gt;</token>
<token name="T_STRING">getSomeX</token>
<token name="T_OPEN_BRACKET">(</token>
<token name="T_CLOSE_BRACKET">)</token>
<token name="T_WHITESPACE"> </token>
<token name="T_DOT">.</token>
<token name="T_WHITESPACE"> </token>
<token name="T_CONSTANT_ENCAPSED_STRING">'-def'</token>
<token name="T_SEMICOLON">;</token>
</line>
<line no="24">
<token name="T_WHITESPACE"> </token>
<token name="T_CLOSE_CURLY">}</token>
</line>
<line no="25">
<token name="T_CLOSE_CURLY">}</token>
</line>
<line no="26"/>
</source>

View File

@@ -0,0 +1,25 @@
<?php declare(strict_types = 1);
namespace foo;
class bar {
const x = 'abc';
/** @var int */
private $y = 1;
public function __construct() {
// do something
}
public function getY(): int {
return $this->y;
}
public function getSomeX(): string {
return self::x;
}
public function some(bar $b): string {
return $b->getSomeX() . '-def';
}
}

Binary file not shown.

View File

@@ -0,0 +1,177 @@
<?xml version="1.0"?>
<source xmlns="https://github.com/theseer/tokenizer">
<line no="1">
<token name="T_OPEN_TAG">&lt;?php </token>
<token name="T_DECLARE">declare</token>
<token name="T_OPEN_BRACKET">(</token>
<token name="T_STRING">strict_types</token>
<token name="T_WHITESPACE"> </token>
<token name="T_EQUAL">=</token>
<token name="T_WHITESPACE"> </token>
<token name="T_LNUMBER">1</token>
<token name="T_CLOSE_BRACKET">)</token>
<token name="T_SEMICOLON">;</token>
</line>
<line no="2">
<token name="T_NAMESPACE">namespace</token>
<token name="T_WHITESPACE"> </token>
<token name="T_STRING">foo</token>
<token name="T_SEMICOLON">;</token>
</line>
<line no="3"/>
<line no="4">
<token name="T_CLASS">class</token>
<token name="T_WHITESPACE"> </token>
<token name="T_STRING">bar</token>
<token name="T_WHITESPACE"> </token>
<token name="T_OPEN_CURLY">{</token>
</line>
<line no="5">
<token name="T_WHITESPACE"> </token>
<token name="T_CONST">const</token>
<token name="T_WHITESPACE"> </token>
<token name="T_STRING">x</token>
<token name="T_WHITESPACE"> </token>
<token name="T_EQUAL">=</token>
<token name="T_WHITESPACE"> </token>
<token name="T_CONSTANT_ENCAPSED_STRING">'abc'</token>
<token name="T_SEMICOLON">;</token>
</line>
<line no="6"/>
<line no="7">
<token name="T_WHITESPACE"> </token>
<token name="T_DOC_COMMENT">/** @var int */</token>
</line>
<line no="8">
<token name="T_WHITESPACE"> </token>
<token name="T_PRIVATE">private</token>
<token name="T_WHITESPACE"> </token>
<token name="T_VARIABLE">$y</token>
<token name="T_WHITESPACE"> </token>
<token name="T_EQUAL">=</token>
<token name="T_WHITESPACE"> </token>
<token name="T_LNUMBER">1</token>
<token name="T_SEMICOLON">;</token>
</line>
<line no="9"/>
<line no="10">
<token name="T_WHITESPACE"> </token>
<token name="T_PUBLIC">public</token>
<token name="T_WHITESPACE"> </token>
<token name="T_FUNCTION">function</token>
<token name="T_WHITESPACE"> </token>
<token name="T_STRING">__construct</token>
<token name="T_OPEN_BRACKET">(</token>
<token name="T_CLOSE_BRACKET">)</token>
<token name="T_WHITESPACE"> </token>
<token name="T_OPEN_CURLY">{</token>
</line>
<line no="11">
<token name="T_WHITESPACE"> </token>
<token name="T_COMMENT">// do something</token>
</line>
<line no="12">
<token name="T_WHITESPACE"> </token>
<token name="T_CLOSE_CURLY">}</token>
</line>
<line no="13"/>
<line no="14">
<token name="T_WHITESPACE"> </token>
<token name="T_PUBLIC">public</token>
<token name="T_WHITESPACE"> </token>
<token name="T_FUNCTION">function</token>
<token name="T_WHITESPACE"> </token>
<token name="T_STRING">getY</token>
<token name="T_OPEN_BRACKET">(</token>
<token name="T_CLOSE_BRACKET">)</token>
<token name="T_COLON">:</token>
<token name="T_WHITESPACE"> </token>
<token name="T_STRING">int</token>
<token name="T_WHITESPACE"> </token>
<token name="T_OPEN_CURLY">{</token>
</line>
<line no="15">
<token name="T_WHITESPACE"> </token>
<token name="T_RETURN">return</token>
<token name="T_WHITESPACE"> </token>
<token name="T_VARIABLE">$this</token>
<token name="T_OBJECT_OPERATOR">-&gt;</token>
<token name="T_STRING">y</token>
<token name="T_SEMICOLON">;</token>
</line>
<line no="16">
<token name="T_WHITESPACE"> </token>
<token name="T_CLOSE_CURLY">}</token>
</line>
<line no="17"/>
<line no="18">
<token name="T_WHITESPACE"> </token>
<token name="T_PUBLIC">public</token>
<token name="T_WHITESPACE"> </token>
<token name="T_FUNCTION">function</token>
<token name="T_WHITESPACE"> </token>
<token name="T_STRING">getSomeX</token>
<token name="T_OPEN_BRACKET">(</token>
<token name="T_CLOSE_BRACKET">)</token>
<token name="T_COLON">:</token>
<token name="T_WHITESPACE"> </token>
<token name="T_STRING">string</token>
<token name="T_WHITESPACE"> </token>
<token name="T_OPEN_CURLY">{</token>
</line>
<line no="19">
<token name="T_WHITESPACE"> </token>
<token name="T_RETURN">return</token>
<token name="T_WHITESPACE"> </token>
<token name="T_STRING">self</token>
<token name="T_DOUBLE_COLON">::</token>
<token name="T_STRING">x</token>
<token name="T_SEMICOLON">;</token>
</line>
<line no="20">
<token name="T_WHITESPACE"> </token>
<token name="T_CLOSE_CURLY">}</token>
</line>
<line no="21"/>
<line no="22">
<token name="T_WHITESPACE"> </token>
<token name="T_PUBLIC">public</token>
<token name="T_WHITESPACE"> </token>
<token name="T_FUNCTION">function</token>
<token name="T_WHITESPACE"> </token>
<token name="T_STRING">some</token>
<token name="T_OPEN_BRACKET">(</token>
<token name="T_STRING">bar</token>
<token name="T_WHITESPACE"> </token>
<token name="T_VARIABLE">$b</token>
<token name="T_CLOSE_BRACKET">)</token>
<token name="T_COLON">:</token>
<token name="T_WHITESPACE"> </token>
<token name="T_STRING">string</token>
<token name="T_WHITESPACE"> </token>
<token name="T_OPEN_CURLY">{</token>
</line>
<line no="23">
<token name="T_WHITESPACE"> </token>
<token name="T_RETURN">return</token>
<token name="T_WHITESPACE"> </token>
<token name="T_VARIABLE">$b</token>
<token name="T_OBJECT_OPERATOR">-&gt;</token>
<token name="T_STRING">getSomeX</token>
<token name="T_OPEN_BRACKET">(</token>
<token name="T_CLOSE_BRACKET">)</token>
<token name="T_WHITESPACE"> </token>
<token name="T_DOT">.</token>
<token name="T_WHITESPACE"> </token>
<token name="T_CONSTANT_ENCAPSED_STRING">'-def'</token>
<token name="T_SEMICOLON">;</token>
</line>
<line no="24">
<token name="T_WHITESPACE"> </token>
<token name="T_CLOSE_CURLY">}</token>
</line>
<line no="25">
<token name="T_CLOSE_CURLY">}</token>
</line>
<line no="26"/>
</source>