updated-packages

This commit is contained in:
RafficMohammed
2023-01-08 00:13:22 +05:30
parent 3ff7df7487
commit da241bacb6
12659 changed files with 563377 additions and 510538 deletions

View File

@@ -1,7 +0,0 @@
/.idea
/.php_cs.cache
/composer.lock
/src/autoload.php
/tools
/vendor
/build

View File

@@ -1,67 +0,0 @@
<?php
$finder = Symfony\CS\Finder\DefaultFinder::create()
->files()
->in('src')
->in('tests')
->name('*.php');
return Symfony\CS\Config\Config::create()
->setUsingCache(true)
->level(\Symfony\CS\FixerInterface::NONE_LEVEL)
->fixers(
array(
'align_double_arrow',
'align_equals',
'concat_with_spaces',
'duplicate_semicolon',
'elseif',
'empty_return',
'encoding',
'eof_ending',
'extra_empty_lines',
'function_call_space',
'function_declaration',
'indentation',
'join_function',
'line_after_namespace',
'linefeed',
'list_commas',
'lowercase_constants',
'lowercase_keywords',
'method_argument_space',
'multiple_use',
'namespace_no_leading_whitespace',
'no_blank_lines_after_class_opening',
'no_empty_lines_after_phpdocs',
'parenthesis',
'php_closing_tag',
'phpdoc_indent',
'phpdoc_no_access',
'phpdoc_no_empty_return',
'phpdoc_no_package',
'phpdoc_params',
'phpdoc_scalar',
'phpdoc_separation',
'phpdoc_to_comment',
'phpdoc_trim',
'phpdoc_types',
'phpdoc_var_without_name',
'remove_lines_between_uses',
'return',
'self_accessor',
'short_array_syntax',
'short_tag',
'single_line_after_imports',
'single_quote',
'spaces_before_semicolon',
'spaces_cast',
'ternary_spaces',
'trailing_spaces',
'trim_array_spaces',
'unused_use',
'visibility',
'whitespacy_lines'
)
)
->finder($finder);

213
vendor/theseer/tokenizer/.php_cs.dist vendored Normal file
View File

@@ -0,0 +1,213 @@
<?php
require __DIR__ . '/tools/php-cs-fixer.d/PhpdocSingleLineVarFixer.php';
return PhpCsFixer\Config::create()
->registerCustomFixers([
new \PharIo\CSFixer\PhpdocSingleLineVarFixer()
])
->setRiskyAllowed(true)
->setRules(
[
'PharIo/phpdoc_single_line_var_fixer' => true,
'align_multiline_comment' => true,
'array_indentation' => true,
'array_syntax' => ['syntax' => 'short'],
'binary_operator_spaces' => [
'operators' => [
'=' => 'align_single_space_minimal',
'=>' => 'align',
],
],
'blank_line_after_namespace' => true,
'blank_line_after_opening_tag' => false,
'blank_line_before_statement' => [
'statements' => [
'break',
'continue',
'declare',
'do',
'for',
'foreach',
'if',
'include',
'include_once',
'require',
'require_once',
'return',
'switch',
'throw',
'try',
'while',
'yield',
],
],
'braces' => [
'allow_single_line_closure' => false,
'position_after_anonymous_constructs' => 'same',
'position_after_control_structures' => 'same',
'position_after_functions_and_oop_constructs' => 'same'
],
'cast_spaces' => ['space' => 'none'],
// This fixer removes the blank line at class start, no way to disable that, so we disable the fixer :(
//'class_attributes_separation' => ['elements' => ['const', 'method', 'property']],
'combine_consecutive_issets' => true,
'combine_consecutive_unsets' => true,
'compact_nullable_typehint' => true,
'concat_space' => ['spacing' => 'one'],
'date_time_immutable' => true,
'declare_equal_normalize' => ['space' => 'single'],
'declare_strict_types' => true,
'dir_constant' => true,
'elseif' => true,
'encoding' => true,
'full_opening_tag' => true,
'fully_qualified_strict_types' => true,
'function_declaration' => [
'closure_function_spacing' => 'one'
],
'header_comment' => false,
'indentation_type' => true,
'is_null' => true,
'line_ending' => true,
'list_syntax' => ['syntax' => 'short'],
'logical_operators' => true,
'lowercase_cast' => true,
'lowercase_constants' => true,
'lowercase_keywords' => true,
'lowercase_static_reference' => true,
'magic_constant_casing' => true,
'method_argument_space' => ['ensure_fully_multiline' => true],
'modernize_types_casting' => true,
'multiline_comment_opening_closing' => true,
'multiline_whitespace_before_semicolons' => true,
'native_constant_invocation' => true,
'native_function_casing' => true,
'native_function_invocation' => true,
'new_with_braces' => false,
'no_alias_functions' => true,
'no_alternative_syntax' => true,
'no_blank_lines_after_class_opening' => false,
'no_blank_lines_after_phpdoc' => true,
'no_blank_lines_before_namespace' => true,
'no_closing_tag' => true,
'no_empty_comment' => true,
'no_empty_phpdoc' => true,
'no_empty_statement' => true,
'no_extra_blank_lines' => true,
'no_homoglyph_names' => true,
'no_leading_import_slash' => true,
'no_leading_namespace_whitespace' => true,
'no_mixed_echo_print' => ['use' => 'print'],
'no_multiline_whitespace_around_double_arrow' => true,
'no_null_property_initialization' => true,
'no_php4_constructor' => true,
'no_short_bool_cast' => true,
'no_short_echo_tag' => true,
'no_singleline_whitespace_before_semicolons' => true,
'no_spaces_after_function_name' => true,
'no_spaces_inside_parenthesis' => true,
'no_superfluous_elseif' => true,
'no_superfluous_phpdoc_tags' => true,
'no_trailing_comma_in_list_call' => true,
'no_trailing_comma_in_singleline_array' => true,
'no_trailing_whitespace' => true,
'no_trailing_whitespace_in_comment' => true,
'no_unneeded_control_parentheses' => false,
'no_unneeded_curly_braces' => false,
'no_unneeded_final_method' => true,
'no_unreachable_default_argument_value' => true,
'no_unset_on_property' => true,
'no_unused_imports' => true,
'no_useless_else' => true,
'no_useless_return' => true,
'no_whitespace_before_comma_in_array' => true,
'no_whitespace_in_blank_line' => true,
'non_printable_character' => true,
'normalize_index_brace' => true,
'object_operator_without_whitespace' => true,
'ordered_class_elements' => [
'order' => [
'use_trait',
'constant_public',
'constant_protected',
'constant_private',
'property_public_static',
'property_protected_static',
'property_private_static',
'property_public',
'property_protected',
'property_private',
'method_public_static',
'construct',
'destruct',
'magic',
'phpunit',
'method_public',
'method_protected',
'method_private',
'method_protected_static',
'method_private_static',
],
],
'ordered_imports' => true,
'phpdoc_add_missing_param_annotation' => true,
'phpdoc_align' => true,
'phpdoc_annotation_without_dot' => true,
'phpdoc_indent' => true,
'phpdoc_no_access' => true,
'phpdoc_no_empty_return' => true,
'phpdoc_no_package' => true,
'phpdoc_order' => true,
'phpdoc_return_self_reference' => true,
'phpdoc_scalar' => true,
'phpdoc_separation' => true,
'phpdoc_single_line_var_spacing' => true,
'phpdoc_to_comment' => false,
'phpdoc_trim' => true,
'phpdoc_trim_consecutive_blank_line_separation' => true,
'phpdoc_types' => ['groups' => ['simple', 'meta']],
'phpdoc_types_order' => true,
'phpdoc_to_return_type' => true,
'phpdoc_var_without_name' => true,
'pow_to_exponentiation' => true,
'protected_to_private' => true,
'return_assignment' => true,
'return_type_declaration' => ['space_before' => 'none'],
'self_accessor' => false,
'semicolon_after_instruction' => true,
'set_type_to_cast' => true,
'short_scalar_cast' => true,
'simplified_null_return' => true,
'single_blank_line_at_eof' => true,
'single_import_per_statement' => true,
'single_line_after_imports' => true,
'single_quote' => true,
'standardize_not_equals' => true,
'ternary_to_null_coalescing' => true,
'trailing_comma_in_multiline_array' => false,
'trim_array_spaces' => true,
'unary_operator_spaces' => true,
'visibility_required' => [
'elements' => [
'const',
'method',
'property',
],
],
'void_return' => true,
'whitespace_after_comma_in_array' => true,
'yoda_style' => false
]
)
->setFinder(
PhpCsFixer\Finder::create()
->files()
->in(__DIR__ . '/src')
->in(__DIR__ . '/tests')
->notName('*.phpt')
->notName('autoload.php')
);

View File

@@ -1,33 +0,0 @@
os:
- linux
language: php
before_install:
- wget https://phar.io/releases/phive.phar
- wget https://phar.io/releases/phive.phar.asc
- gpg --keyserver hkps.pool.sks-keyservers.net --recv-keys 0x9B2D5D79
- gpg --verify phive.phar.asc phive.phar
- chmod +x phive.phar
- sudo mv phive.phar /usr/bin/phive
install:
- ant setup
script: ./tools/phpunit
php:
- 5.6
- 7.0
- 7.1
- 7.0snapshot
- 7.1snapshot
- master
matrix:
allow_failures:
- php: master
fast_finish: true
notifications:
email: false

71
vendor/theseer/tokenizer/CHANGELOG.md vendored Normal file
View File

@@ -0,0 +1,71 @@
# Changelog
All notable changes to Tokenizer are documented in this file using the [Keep a CHANGELOG](http://keepachangelog.com/) principles.
## [1.2.1] - 2021-07-28
### Fixed
* [#13](https://github.com/theseer/tokenizer/issues/13): Fatal error when tokenizing files that contain only a single empty line
## [1.2.0] - 2020-07-13
This release is now PHP 8.0 compliant.
### Fixed
* Whitespace handling in general (only noticable in the intermediate `TokenCollection`) is now consitent
### Changed
* Updated `Tokenizer` to deal with changed whitespace handling in PHP 8.0
The XMLSerializer was unaffected.
## [1.1.3] - 2019-06-14
### Changed
* Ensure XMLSerializer can deal with empty token collections
### Fixed
* [#2](https://github.com/theseer/tokenizer/issues/2): Fatal error in infection / phpunit
## [1.1.2] - 2019-04-04
### Changed
* Reverted PHPUnit 8 test update to stay PHP 7.0 compliant
## [1.1.1] - 2019-04-03
### Fixed
* [#1](https://github.com/theseer/tokenizer/issues/1): Empty file causes invalid array read
### Changed
* Tests should now be PHPUnit 8 compliant
## [1.1.0] - 2017-04-07
### Added
* Allow use of custom namespace for XML serialization
## [1.0.0] - 2017-04-05
Initial Release
[1.1.3]: https://github.com/theseer/tokenizer/compare/1.1.2...1.1.3
[1.1.2]: https://github.com/theseer/tokenizer/compare/1.1.1...1.1.2
[1.1.1]: https://github.com/theseer/tokenizer/compare/1.1.0...1.1.1
[1.1.0]: https://github.com/theseer/tokenizer/compare/1.0.0...1.1.0
[1.0.0]: https://github.com/theseer/tokenizer/compare/b2493e57de80c1b7414219b28503fa5c6b4d0a98...1.0.0

View File

@@ -2,6 +2,7 @@
A small library for converting tokenized PHP source code into XML.
[![Test](https://github.com/theseer/tokenizer/actions/workflows/ci.yml/badge.svg)](https://github.com/theseer/tokenizer/actions/workflows/ci.yml)
[![Scrutinizer Code Quality](https://scrutinizer-ci.com/g/theseer/tokenizer/badges/quality-score.png?b=master)](https://scrutinizer-ci.com/g/theseer/tokenizer/?branch=master)
[![Code Coverage](https://scrutinizer-ci.com/g/theseer/tokenizer/badges/coverage.png?b=master)](https://scrutinizer-ci.com/g/theseer/tokenizer/?branch=master)
[![Build Status](https://scrutinizer-ci.com/g/theseer/tokenizer/badges/build.png?b=master)](https://scrutinizer-ci.com/g/theseer/tokenizer/build-status/master)

View File

@@ -1,41 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project name="Tokenizer" default="setup">
<target name="setup" depends="clean,install-tools,generate-autoloader"/>
<target name="clean" unless="clean.done" description="Cleanup build artifacts">
<delete dir="${basedir}/tools"/>
<delete dir="${basedir}/vendor"/>
<delete file="${basedir}/src/autoload.php"/>
<property name="clean.done" value="true"/>
</target>
<target name="prepare" unless="prepare.done" depends="clean" description="Prepare for build">
<property name="prepare.done" value="true"/>
</target>
<target name="-tools-installed">
<available file="${basedir}/tools" property="tools-installed" type="dir"/>
</target>
<target name="install-tools" unless="tools-installed" depends="-tools-installed" description="Install tools with Phive">
<exec executable="phive" taskname="phive">
<arg value="install"/>
<arg value="--trust-gpg-keys" />
<arg value="4AA394086372C20A,2A8299CE842DD38C" />
</exec>
</target>
<target name="generate-autoloader" depends="install-tools" description="Generate autoloader using PHPAB">
<exec executable="${basedir}/tools/phpab" taskname="phpab">
<arg value="--output"/>
<arg path="${basedir}/src/autoload.php"/>
<arg path="${basedir}/src"/>
</exec>
</target>
<target name="test" depends="generate-autoloader" description="Run tests">
<exec executable="${basedir}/tools/phpunit" taskname="phpunit"/>
</target>
</project>

View File

@@ -13,7 +13,7 @@
"issues": "https://github.com/theseer/tokenizer/issues"
},
"require": {
"php": "^7.0",
"php": "^7.2 || ^8.0",
"ext-xmlwriter": "*",
"ext-dom": "*",
"ext-tokenizer": "*"

22
vendor/theseer/tokenizer/composer.lock generated vendored Normal file
View File

@@ -0,0 +1,22 @@
{
"_readme": [
"This file locks the dependencies of your project to a known state",
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
"content-hash": "b010f1b3d9d47d431ee1cb54ac1de755",
"packages": [],
"packages-dev": [],
"aliases": [],
"minimum-stability": "stable",
"stability-flags": [],
"prefer-stable": false,
"prefer-lowest": false,
"platform": {
"php": "^7.2 || ^8.0",
"ext-xmlwriter": "*",
"ext-dom": "*",
"ext-tokenizer": "*"
},
"platform-dev": []
}

View File

@@ -1,5 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<phive xmlns="https://phar.io/phive">
<phar name="phpunit" version="^6.0" installed="6.0.10" location="./tools/phpunit"/>
<phar name="phpab" version="^1.23.0" installed="1.23.0" location="./tools/phpab"/>
</phive>

View File

@@ -1,25 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="https://schema.phpunit.de/5.7/phpunit.xsd"
bootstrap="src/autoload.php"
backupGlobals="false"
beStrictAboutOutputDuringTests="true"
beStrictAboutTestsThatDoNotTestAnything="true"
beStrictAboutTodoAnnotatedTests="true"
verbose="true">
<testsuite>
<directory suffix="Test.php">tests</directory>
</testsuite>
<filter>
<whitelist processUncoveredFilesFromWhitelist="true">
<directory suffix=".php">src</directory>
</whitelist>
</filter>
<logging>
<log type="coverage-html" target="build/coverage/html" title="phpDox"
charset="UTF-8" highlight="true" lowUpperBound="60" highLowerBound="90"/>
</logging>
</phpunit>

View File

@@ -2,5 +2,4 @@
namespace TheSeer\Tokenizer;
class Exception extends \Exception {
}

View File

@@ -6,9 +6,6 @@ class NamespaceUri {
/** @var string */
private $value;
/**
* @param string $value
*/
public function __construct(string $value) {
$this->ensureValidUri($value);
$this->value = $value;
@@ -18,10 +15,10 @@ class NamespaceUri {
return $this->value;
}
private function ensureValidUri($value) {
if (strpos($value, ':') === false) {
private function ensureValidUri($value): void {
if (\strpos($value, ':') === false) {
throw new NamespaceUriException(
sprintf("Namespace URI '%s' must contain at least one colon", $value)
\sprintf("Namespace URI '%s' must contain at least one colon", $value)
);
}
}

View File

@@ -2,5 +2,4 @@
namespace TheSeer\Tokenizer;
class NamespaceUriException extends Exception {
}

View File

@@ -3,27 +3,17 @@ namespace TheSeer\Tokenizer;
class Token {
/**
* @var int
*/
/** @var int */
private $line;
/**
* @var string
*/
/** @var string */
private $name;
/**
* @var string
*/
/** @var string */
private $value;
/**
* Token constructor.
*
* @param int $line
* @param string $name
* @param string $value
*/
public function __construct(int $line, string $name, string $value) {
$this->line = $line;
@@ -31,25 +21,15 @@ class Token {
$this->value = $value;
}
/**
* @return int
*/
public function getLine(): int {
return $this->line;
}
/**
* @return string
*/
public function getName(): string {
return $this->name;
}
/**
* @return string
*/
public function getValue(): string {
return $this->value;
}
}

View File

@@ -3,86 +3,53 @@ namespace TheSeer\Tokenizer;
class TokenCollection implements \ArrayAccess, \Iterator, \Countable {
/**
* @var Token[]
*/
/** @var Token[] */
private $tokens = [];
/**
* @var int
*/
/** @var int */
private $pos;
/**
* @param Token $token
*/
public function addToken(Token $token) {
public function addToken(Token $token): void {
$this->tokens[] = $token;
}
/**
* @return Token
*/
public function current(): Token {
return current($this->tokens);
return \current($this->tokens);
}
/**
* @return int
*/
public function key(): int {
return key($this->tokens);
return \key($this->tokens);
}
/**
* @return void
*/
public function next() {
next($this->tokens);
public function next(): void {
\next($this->tokens);
$this->pos++;
}
/**
* @return bool
*/
public function valid(): bool {
return $this->count() > $this->pos;
}
/**
* @return void
*/
public function rewind() {
reset($this->tokens);
public function rewind(): void {
\reset($this->tokens);
$this->pos = 0;
}
/**
* @return int
*/
public function count(): int {
return count($this->tokens);
return \count($this->tokens);
}
/**
* @param mixed $offset
*
* @return bool
*/
public function offsetExists($offset): bool {
return isset($this->tokens[$offset]);
}
/**
* @param mixed $offset
*
* @return Token
* @throws TokenCollectionException
*/
public function offsetGet($offset): Token {
if (!$this->offsetExists($offset)) {
throw new TokenCollectionException(
sprintf('No Token at offest %s', $offset)
\sprintf('No Token at offest %s', $offset)
);
}
@@ -90,39 +57,37 @@ class TokenCollection implements \ArrayAccess, \Iterator, \Countable {
}
/**
* @param mixed $offset
* @param Token $value
*
* @throws TokenCollectionException
*/
public function offsetSet($offset, $value) {
if (!is_int($offset)) {
$type = gettype($offset);
public function offsetSet($offset, $value): void {
if (!\is_int($offset)) {
$type = \gettype($offset);
throw new TokenCollectionException(
sprintf(
\sprintf(
'Offset must be of type integer, %s given',
$type === 'object' ? get_class($value) : $type
$type === 'object' ? \get_class($value) : $type
)
);
}
if (!$value instanceof Token) {
$type = gettype($value);
$type = \gettype($value);
throw new TokenCollectionException(
sprintf(
\sprintf(
'Value must be of type %s, %s given',
Token::class,
$type === 'object' ? get_class($value) : $type
$type === 'object' ? \get_class($value) : $type
)
);
}
$this->tokens[$offset] = $value;
}
/**
* @param mixed $offset
*/
public function offsetUnset($offset) {
public function offsetUnset($offset): void {
unset($this->tokens[$offset]);
}
}

View File

@@ -2,5 +2,4 @@
namespace TheSeer\Tokenizer;
class TokenCollectionException extends Exception {
}

View File

@@ -41,7 +41,12 @@ class Tokenizer {
public function parse(string $source): TokenCollection {
$result = new TokenCollection();
$tokens = token_get_all($source);
if ($source === '') {
return $result;
}
$tokens = \token_get_all($source);
$lastToken = new Token(
$tokens[0][2],
@@ -50,7 +55,7 @@ class Tokenizer {
);
foreach ($tokens as $pos => $tok) {
if (is_string($tok)) {
if (\is_string($tok)) {
$token = new Token(
$lastToken->getLine(),
$this->map[$tok],
@@ -58,25 +63,80 @@ class Tokenizer {
);
$result->addToken($token);
$lastToken = $token;
continue;
}
$line = $tok[2];
$values = preg_split('/\R+/Uu', $tok[1]);
$values = \preg_split('/\R+/Uu', $tok[1]);
foreach ($values as $v) {
$token = new Token(
$line,
token_name($tok[0]),
\token_name($tok[0]),
$v
);
$result->addToken($token);
$line++;
$lastToken = $token;
$line++;
if ($v === '') {
continue;
}
$result->addToken($token);
}
}
return $result;
return $this->fillBlanks($result, $lastToken->getLine());
}
private function fillBlanks(TokenCollection $tokens, int $maxLine): TokenCollection {
$prev = new Token(
0,
'Placeholder',
''
);
$final = new TokenCollection();
foreach ($tokens as $token) {
if ($prev === null) {
$final->addToken($token);
$prev = $token;
continue;
}
$gap = $token->getLine() - $prev->getLine();
while ($gap > 1) {
$linebreak = new Token(
$prev->getLine() + 1,
'T_WHITESPACE',
''
);
$final->addToken($linebreak);
$prev = $linebreak;
$gap--;
}
$final->addToken($token);
$prev = $token;
}
$gap = $maxLine - $prev->getLine();
while ($gap > 0) {
$linebreak = new Token(
$prev->getLine() + 1,
'T_WHITESPACE',
''
);
$final->addToken($linebreak);
$prev = $linebreak;
$gap--;
}
return $final;
}
}

View File

@@ -5,19 +5,13 @@ use DOMDocument;
class XMLSerializer {
/**
* @var \XMLWriter
*/
/** @var \XMLWriter */
private $writer;
/**
* @var Token
*/
/** @var Token */
private $previousToken;
/**
* @var NamespaceUri
*/
/** @var NamespaceUri */
private $xmlns;
/**
@@ -32,24 +26,14 @@ class XMLSerializer {
$this->xmlns = $xmlns;
}
/**
* @param TokenCollection $tokens
*
* @return DOMDocument
*/
public function toDom(TokenCollection $tokens): DOMDocument {
$dom = new DOMDocument();
$dom = new DOMDocument();
$dom->preserveWhiteSpace = false;
$dom->loadXML($this->toXML($tokens));
return $dom;
}
/**
* @param TokenCollection $tokens
*
* @return string
*/
public function toXML(TokenCollection $tokens): string {
$this->writer = new \XMLWriter();
$this->writer->openMemory();
@@ -57,12 +41,16 @@ class XMLSerializer {
$this->writer->startDocument();
$this->writer->startElement('source');
$this->writer->writeAttribute('xmlns', $this->xmlns->asString());
$this->writer->startElement('line');
$this->writer->writeAttribute('no', '1');
$this->previousToken = $tokens[0];
foreach ($tokens as $token) {
$this->addToken($token);
if (\count($tokens) > 0) {
$this->writer->startElement('line');
$this->writer->writeAttribute('no', '1');
$this->previousToken = $tokens[0];
foreach ($tokens as $token) {
$this->addToken($token);
}
}
$this->writer->endElement();
@@ -72,10 +60,7 @@ class XMLSerializer {
return $this->writer->outputMemory();
}
/**
* @param Token $token
*/
private function addToken(Token $token) {
private function addToken(Token $token): void {
if ($this->previousToken->getLine() < $token->getLine()) {
$this->writer->endElement();
@@ -87,7 +72,7 @@ class XMLSerializer {
if ($token->getValue() !== '') {
$this->writer->startElement('token');
$this->writer->writeAttribute('name', $token->getName());
$this->writer->writeRaw(htmlspecialchars($token->getValue(), ENT_NOQUOTES | ENT_DISALLOWED | ENT_XML1));
$this->writer->writeRaw(\htmlspecialchars($token->getValue(), \ENT_NOQUOTES | \ENT_DISALLOWED | \ENT_XML1));
$this->writer->endElement();
}
}

View File

@@ -1,29 +0,0 @@
<?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

@@ -1,72 +0,0 @@
<?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

@@ -1,31 +0,0 @@
<?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

@@ -1,21 +0,0 @@
<?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

@@ -1,43 +0,0 @@
<?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

@@ -1,177 +0,0 @@
<?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

@@ -1,25 +0,0 @@
<?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';
}
}

View File

@@ -1,177 +0,0 @@
<?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>