-
Notifications
You must be signed in to change notification settings - Fork 17
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #117 from DaveLiddament/feature/clean-up
Feature/clean up
- Loading branch information
Showing
10 changed files
with
274 additions
and
19 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,45 @@ | ||
<?php | ||
|
||
declare(strict_types=1); | ||
|
||
namespace DaveLiddament\StaticAnalysisResultsBaseliner\Domain\RandomResultsPicker; | ||
|
||
use DaveLiddament\StaticAnalysisResultsBaseliner\Domain\ResultsParser\AnalysisResults; | ||
use DaveLiddament\StaticAnalysisResultsBaseliner\Domain\ResultsParser\AnalysisResultsBuilder; | ||
use DaveLiddament\StaticAnalysisResultsBaseliner\Domain\Utils\RandomNumberGenerator; | ||
|
||
class RandomResultsPicker | ||
{ | ||
private const RANDOM_ISSUES_TO_FIX = 5; | ||
|
||
/** | ||
* @var RandomNumberGenerator | ||
*/ | ||
private $randomNumberGenerator; | ||
|
||
public function __construct(RandomNumberGenerator $randomNumberGenerator) | ||
{ | ||
$this->randomNumberGenerator = $randomNumberGenerator; | ||
} | ||
|
||
/** | ||
* Returns a random selection of the issues found. | ||
*/ | ||
public function getRandomResultsToFix(AnalysisResults $issues): AnalysisResults | ||
{ | ||
$randomIssuesToFix = min(self::RANDOM_ISSUES_TO_FIX, $issues->getCount()); | ||
|
||
$randomIssues = new AnalysisResultsBuilder(); | ||
$issuesToPickFrom = $issues->getAnalysisResults(); | ||
|
||
for ($i = 0; $i < $randomIssuesToFix; ++$i) { | ||
$totalRemaining = count($issuesToPickFrom); | ||
$issuePickedIndex = $this->randomNumberGenerator->getRandomNumber($totalRemaining - 1); | ||
$issuePicked = $issuesToPickFrom[$issuePickedIndex]; | ||
$randomIssues->addAnalysisResult($issuePicked); | ||
array_splice($issuesToPickFrom, $issuePickedIndex, 1); | ||
} | ||
|
||
return $randomIssues->build(); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,16 @@ | ||
<?php | ||
|
||
declare(strict_types=1); | ||
|
||
namespace DaveLiddament\StaticAnalysisResultsBaseliner\Domain\Utils; | ||
|
||
/** | ||
* Wrapper for rand. | ||
*/ | ||
class RandomNumberGenerator | ||
{ | ||
public function getRandomNumber(int $maxNumber): int | ||
{ | ||
return rand(0, $maxNumber); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
114 changes: 114 additions & 0 deletions
114
tests/Unit/Core/RandomResultsPicker/RandomResultsPickerTest.php
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,114 @@ | ||
<?php | ||
|
||
declare(strict_types=1); | ||
|
||
namespace DaveLiddament\StaticAnalysisResultsBaseliner\Tests\Unit\Core\RandomResultsPicker; | ||
|
||
use DaveLiddament\StaticAnalysisResultsBaseliner\Domain\Common\LineNumber; | ||
use DaveLiddament\StaticAnalysisResultsBaseliner\Domain\Common\Location; | ||
use DaveLiddament\StaticAnalysisResultsBaseliner\Domain\Common\ProjectRoot; | ||
use DaveLiddament\StaticAnalysisResultsBaseliner\Domain\Common\RelativeFileName; | ||
use DaveLiddament\StaticAnalysisResultsBaseliner\Domain\Common\Type; | ||
use DaveLiddament\StaticAnalysisResultsBaseliner\Domain\RandomResultsPicker\RandomResultsPicker; | ||
use DaveLiddament\StaticAnalysisResultsBaseliner\Domain\ResultsParser\AnalysisResult; | ||
use DaveLiddament\StaticAnalysisResultsBaseliner\Domain\ResultsParser\AnalysisResultsBuilder; | ||
use DaveLiddament\StaticAnalysisResultsBaseliner\Domain\Utils\RandomNumberGenerator; | ||
use PHPUnit\Framework\MockObject\Stub; | ||
use PHPUnit\Framework\TestCase; | ||
|
||
class RandomResultsPickerTest extends TestCase | ||
{ | ||
/** | ||
* @var ProjectRoot | ||
*/ | ||
private $projectRoot; | ||
/** | ||
* @var RandomResultsPicker | ||
*/ | ||
private $randomResultsPicker; | ||
/** | ||
* @var RandomNumberGenerator&Stub | ||
*/ | ||
private $randomNumberGenerator; | ||
|
||
protected function setUp(): void | ||
{ | ||
$this->projectRoot = ProjectRoot::fromCurrentWorkingDirectory('/'); | ||
|
||
$this->randomNumberGenerator = $this->createStub(RandomNumberGenerator::class); | ||
$this->randomResultsPicker = new RandomResultsPicker($this->randomNumberGenerator); | ||
} | ||
|
||
public function testPick5Results(): void | ||
{ | ||
$issuesBuilder = new AnalysisResultsBuilder(); | ||
$issue1 = $this->addIssue($issuesBuilder, 'a'); | ||
$issue2 = $this->addIssue($issuesBuilder, 'b'); | ||
$this->addIssue($issuesBuilder, 'c'); | ||
$issue4 = $this->addIssue($issuesBuilder, 'd'); | ||
$this->addIssue($issuesBuilder, 'e'); | ||
$issue6 = $this->addIssue($issuesBuilder, 'f'); | ||
$issue7 = $this->addIssue($issuesBuilder, 'g'); | ||
|
||
$this->setRandomNumbers(5, 1, 0, 3, 1); | ||
|
||
$pickedIssues = $this->randomResultsPicker->getRandomResultsToFix($issuesBuilder->build()); | ||
|
||
$expected = [ | ||
$issue1, | ||
$issue2, | ||
$issue4, | ||
$issue6, | ||
$issue7, | ||
]; | ||
|
||
$this->assertEquals($expected, $pickedIssues->getAnalysisResults()); | ||
$this->assertSame(5, $pickedIssues->getCount()); | ||
$this->assertFalse($pickedIssues->hasNoIssues()); | ||
} | ||
|
||
public function testPickWhenFewerThan5Results(): void | ||
{ | ||
$issuesBuilder = new AnalysisResultsBuilder(); | ||
$issue1 = $this->addIssue($issuesBuilder, 'a'); | ||
$issue2 = $this->addIssue($issuesBuilder, 'b'); | ||
$issue3 = $this->addIssue($issuesBuilder, 'c'); | ||
|
||
$this->setRandomNumbers(2, 0, 0); | ||
|
||
$pickedIssues = $this->randomResultsPicker->getRandomResultsToFix($issuesBuilder->build()); | ||
|
||
$expected = [ | ||
$issue1, | ||
$issue2, | ||
$issue3, | ||
]; | ||
|
||
$this->assertEquals($expected, $pickedIssues->getAnalysisResults()); | ||
$this->assertSame(3, $pickedIssues->getCount()); | ||
$this->assertFalse($pickedIssues->hasNoIssues()); | ||
} | ||
|
||
private function addIssue(AnalysisResultsBuilder $issuesBuilder, string $string): AnalysisResult | ||
{ | ||
$analysisResult = new AnalysisResult( | ||
Location::fromRelativeFileName( | ||
new RelativeFileName($string), | ||
$this->projectRoot, | ||
new LineNumber(10), | ||
), | ||
new Type("Type-{$string}"), | ||
$string, | ||
[] | ||
); | ||
|
||
$issuesBuilder->addAnalysisResult($analysisResult); | ||
|
||
return $analysisResult; | ||
} | ||
|
||
private function setRandomNumbers(int ...$numbers): void | ||
{ | ||
$this->randomNumberGenerator->method('getRandomNumber')->willReturnOnConsecutiveCalls(...$numbers); | ||
} | ||
} |
Oops, something went wrong.