Skip to content

Commit

Permalink
Added ProgressBarFixer
Browse files Browse the repository at this point in the history
  • Loading branch information
umpirsky committed Sep 2, 2015
1 parent 5867a3d commit ae6bb14
Show file tree
Hide file tree
Showing 11 changed files with 247 additions and 37 deletions.
41 changes: 4 additions & 37 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,37 +1,4 @@
# Cache and logs (Symfony2)
/app/cache/*
/app/logs/*
!app/cache/.gitkeep
!app/logs/.gitkeep

# Cache and logs (Symfony3)
/var/cache/*
/var/logs/*
!var/cache/.gitkeep
!var/logs/.gitkeep

# Parameters
/app/config/parameters.yml
/app/config/parameters.ini

# Managed by Composer
/app/bootstrap.php.cache
/var/bootstrap.php.cache
/bin/*
!bin/console
!bin/symfony_requirements
/vendor/

# Assets and user uploads
/web/bundles/
/web/uploads/

# PHPUnit
/app/phpunit.xml
/phpunit.xml

# Build data
/build/

# Composer PHAR
/composer.phar
bin
composer.lock
vendor
phpunit.xml
3 changes: 3 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,2 +1,5 @@
# Symfony-Upgrade-Fixer

Note: This project is under development.

Analyzes your Symfony project and tries to make it compatible with the new version of Symfony framework.
38 changes: 38 additions & 0 deletions composer.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
{
"name": "umpirsky/symfony-upgrade-fixer",
"type": "application",
"description": "Analyzes your Symfony project and tries to make it compatible with the new version of Symfony framework.",
"license": "MIT",
"authors": [
{
"name": "Saša Stamenković",
"email": "umpirsky@gmail.com"
}
],
"require": {
"php": ">=5.4",
"fabpot/php-cs-fixer": "^1.10"
},
"require-dev": {
"phpunit/phpunit": "^4.8"
},
"config": {
"bin-dir": "bin"
},
"autoload": {
"psr-4": {
"Symfony\\Upgrade\\": "src/Symfony/Upgrade/"
}
},
"autoload-dev": {
"psr-4": {
"Symfony\\Upgrade\\Test\\": "tests/Symfony/Upgrade/Test/"
}
},
"extra": {
"branch-alias": {
"dev-master": "0.1-dev"
}
},
"bin": ["symfony-upgrade-fixer"]
}
19 changes: 19 additions & 0 deletions phpunit.xml.dist
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
<?xml version="1.0" encoding="UTF-8"?>

<phpunit backupGlobals="false"
backupStaticAttributes="false"
colors="true"
convertErrorsToExceptions="true"
convertNoticesToExceptions="true"
convertWarningsToExceptions="true"
processIsolation="false"
stopOnFailure="false"
syntaxCheck="false"
bootstrap="./vendor/autoload.php"
>
<testsuites>
<testsuite name="general">
<directory suffix="Test.php">tests</directory>
</testsuite>
</testsuites>
</phpunit>
74 changes: 74 additions & 0 deletions src/Symfony/Upgrade/Fixer/ProgressBarFixer.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
<?php

namespace Symfony\Upgrade\Fixer;

use Symfony\CS\AbstractFixer;
use Symfony\CS\Tokenizer\Tokens;

class ProgressBarFixer extends AbstractFixer
{
public function fix(\SplFileInfo $file, $content)
{
$tokens = Tokens::fromCode($content);

$used = $this->fixUseDeclarations($tokens);

if ($used) {
$this->fixUsages($tokens);
}

return $tokens->generateCode();
}

private function fixUseDeclarations(Tokens $tokens)
{
$useTokens = $tokens->findSequence([
[T_USE],
[T_STRING, 'Symfony'],
[T_NS_SEPARATOR],
[T_STRING, 'Component'],
[T_NS_SEPARATOR],
[T_STRING, 'Console'],
[T_NS_SEPARATOR],
[T_STRING, 'Helper'],
[T_NS_SEPARATOR],
[T_STRING, 'ProgressHelper'],
';',
]);

if (null === $useTokens) {
return false;
}

$useTokensIndexes = array_keys($useTokens);

$classNameToken = $useTokens[$useTokensIndexes[count($useTokensIndexes) - 2]];
$classNameToken->setContent('ProgressBar');

return true;
}

private function fixUsages(Tokens $tokens)
{
$newTokens = $tokens->findSequence([
[T_NEW],
[T_STRING, 'ProgressHelper'],
]);

if (null === $newTokens) {
return;
}

$newTokensIndexes = array_keys($newTokens);

$classNameToken = $newTokens[$newTokensIndexes[count($newTokensIndexes) - 1]];
$classNameToken->setContent('ProgressBar');

$this->fixUsages($tokens);
}

public function getDescription()
{
return 'ProgressHelper has been removed in favor of ProgressBar.';
}
}
23 changes: 23 additions & 0 deletions tests/Symfony/Upgrade/Fixtures/Fixer/progress-bar/case1-input.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
<?php

use Symfony\Component\Console\Helper\ProgressHelper;

// create a new progress bar (50 units)
$progress = new ProgressHelper($output, 50);

// start and displays the progress bar
$progress->start();

$i = 0;
while ($i++ < 50) {
// ... do some work

// advance the progress bar 1 unit
$progress->advance();

// you can also advance the progress bar by more than 1 unit
// $progress->advance(3);
}

// ensure that the progress bar is at 100%
$progress->finish();
23 changes: 23 additions & 0 deletions tests/Symfony/Upgrade/Fixtures/Fixer/progress-bar/case1-output.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
<?php

use Symfony\Component\Console\Helper\ProgressBar;

// create a new progress bar (50 units)
$progress = new ProgressBar($output, 50);

// start and displays the progress bar
$progress->start();

$i = 0;
while ($i++ < 50) {
// ... do some work

// advance the progress bar 1 unit
$progress->advance();

// you can also advance the progress bar by more than 1 unit
// $progress->advance(3);
}

// ensure that the progress bar is at 100%
$progress->finish();
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
<?php

use Symfony\Component\Console\Helper\ProgressHelper;

$progress = new ProgressHelper($output, 50);
$progress = new ProgressHelper($output, 60);
$progress = new ProgressHelper($output, 70);
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
<?php

use Symfony\Component\Console\Helper\ProgressBar;

$progress = new ProgressBar($output, 50);
$progress = new ProgressBar($output, 60);
$progress = new ProgressBar($output, 70);
15 changes: 15 additions & 0 deletions tests/Symfony/Upgrade/Test/Fixer/AbstractFixerTestBase.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
<?php

namespace Symfony\Upgrade\Test\Fixer;

use Symfony\CS\Tests\Fixer\AbstractFixerTestBase as BaseAbstractFixerTestBase;

abstract class AbstractFixerTestBase extends BaseAbstractFixerTestBase
{
protected function getFixer()
{
$name = 'Symfony\Upgrade\Fixer'.substr(get_called_class(), strlen(__NAMESPACE__), -strlen('Test'));

return new $name();
}
}
34 changes: 34 additions & 0 deletions tests/Symfony/Upgrade/Test/Fixer/ProgressBarFixerTest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
<?php

namespace Symfony\Upgrade\Test\Fixer;

class ProgressBarFixerTest extends AbstractFixerTestBase
{
/**
* @dataProvider provideExamples
*/
public function testFix($expected, $input, $file)
{
$this->makeTest($expected, $input, $file);
}

public function provideExamples()
{
return [
$this->prepareTestCase('case1-output.php', 'case1-input.php'),
$this->prepareTestCase('case2-output.php', 'case2-input.php'),
];
}

private function prepareTestCase($expectedFilename, $inputFilename = null)
{
$expectedFile = $this->getTestFile(__DIR__.'/../../Fixtures/Fixer/progress-bar/'.$expectedFilename);
$inputFile = $inputFilename ? $this->getTestFile(__DIR__.'/../../Fixtures/Fixer/progress-bar/'.$inputFilename) : null;

return [
file_get_contents($expectedFile->getRealpath()),
$inputFile ? file_get_contents($inputFile->getRealpath()) : null,
$inputFile ?: $expectedFile,
];
}
}

0 comments on commit ae6bb14

Please sign in to comment.