mirror of
https://we.phorge.it/source/arcanist.git
synced 2024-12-23 14:00:55 +01:00
Add some tests for subclasses
Summary: Add some tests to ensure that `ArcanistXHPASTLinterRule` subclasses are properly implemented. This should catch issues such as two linter rules having the same `ID` value. See D13272 for a similar change. Test Plan: `arc unit` Reviewers: #blessed_reviewers, epriestley Reviewed By: #blessed_reviewers, epriestley Subscribers: epriestley, Korvin Differential Revision: https://secure.phabricator.com/D13274
This commit is contained in:
parent
956bfa701c
commit
fe4856277c
4 changed files with 39 additions and 27 deletions
|
@ -261,6 +261,7 @@ phutil_register_library_map(array(
|
|||
'ArcanistXHPASTLintSwitchHook' => 'lint/linter/xhpast/ArcanistXHPASTLintSwitchHook.php',
|
||||
'ArcanistXHPASTLinter' => 'lint/linter/ArcanistXHPASTLinter.php',
|
||||
'ArcanistXHPASTLinterRule' => 'lint/linter/xhpast/ArcanistXHPASTLinterRule.php',
|
||||
'ArcanistXHPASTLinterRuleTestCase' => 'lint/linter/xhpast/__tests__/ArcanistXHPASTLinterRuleTestCase.php',
|
||||
'ArcanistXHPASTLinterTestCase' => 'lint/linter/__tests__/ArcanistXHPASTLinterTestCase.php',
|
||||
'ArcanistXMLLinter' => 'lint/linter/ArcanistXMLLinter.php',
|
||||
'ArcanistXMLLinterTestCase' => 'lint/linter/__tests__/ArcanistXMLLinterTestCase.php',
|
||||
|
@ -533,6 +534,7 @@ phutil_register_library_map(array(
|
|||
'ArcanistXHPASTLintSwitchHook' => 'Phobject',
|
||||
'ArcanistXHPASTLinter' => 'ArcanistBaseXHPASTLinter',
|
||||
'ArcanistXHPASTLinterRule' => 'Phobject',
|
||||
'ArcanistXHPASTLinterRuleTestCase' => 'PhutilTestCase',
|
||||
'ArcanistXHPASTLinterTestCase' => 'ArcanistLinterTestCase',
|
||||
'ArcanistXMLLinter' => 'ArcanistLinter',
|
||||
'ArcanistXMLLinterTestCase' => 'ArcanistLinterTestCase',
|
||||
|
|
|
@ -8,7 +8,7 @@ final class ArcanistXHPASTLinter extends ArcanistBaseXHPASTLinter {
|
|||
private $rules = array();
|
||||
|
||||
public function __construct() {
|
||||
$this->rules = $this->getLinterRules();
|
||||
$this->rules = ArcanistXHPASTLinterRule::loadAllRules();
|
||||
}
|
||||
|
||||
public function __clone() {
|
||||
|
@ -66,32 +66,6 @@ final class ArcanistXHPASTLinter extends ArcanistBaseXHPASTLinter {
|
|||
return count($this->rules);
|
||||
}
|
||||
|
||||
public function getLinterRules() {
|
||||
$rules = array();
|
||||
|
||||
$symbols = id(new PhutilSymbolLoader())
|
||||
->setAncestorClass('ArcanistXHPASTLinterRule')
|
||||
->loadObjects();
|
||||
|
||||
foreach ($symbols as $class => $rule) {
|
||||
$id = $rule->getLintID();
|
||||
|
||||
if (isset($rules[$id])) {
|
||||
throw new Exception(
|
||||
pht(
|
||||
'Two linter rules (`%s`, `%s`) share the same lint ID (%d). '.
|
||||
'Each linter rule must have a unique ID.',
|
||||
$class,
|
||||
get_class($rules[$id]),
|
||||
$id));
|
||||
}
|
||||
|
||||
$rules[$id] = $rule;
|
||||
}
|
||||
|
||||
return $rules;
|
||||
}
|
||||
|
||||
protected function resolveFuture($path, Future $future) {
|
||||
$tree = $this->getXHPASTTreeForPath($path);
|
||||
if (!$tree) {
|
||||
|
|
|
@ -4,6 +4,32 @@ abstract class ArcanistXHPASTLinterRule extends Phobject {
|
|||
|
||||
private $linter = null;
|
||||
|
||||
final public static function loadAllRules() {
|
||||
$rules = array();
|
||||
|
||||
$symbols = id(new PhutilSymbolLoader())
|
||||
->setAncestorClass(__CLASS__)
|
||||
->loadObjects();
|
||||
|
||||
foreach ($symbols as $class => $rule) {
|
||||
$id = $rule->getLintID();
|
||||
|
||||
if (isset($rules[$id])) {
|
||||
throw new Exception(
|
||||
pht(
|
||||
'Two linter rules (`%s`, `%s`) share the same lint ID (%d). '.
|
||||
'Each linter rule must have a unique ID.',
|
||||
$class,
|
||||
get_class($rules[$id]),
|
||||
$id));
|
||||
}
|
||||
|
||||
$rules[$id] = $rule;
|
||||
}
|
||||
|
||||
return $rules;
|
||||
}
|
||||
|
||||
final public function getLintID() {
|
||||
$class = new ReflectionClass($this);
|
||||
|
||||
|
|
|
@ -0,0 +1,10 @@
|
|||
<?php
|
||||
|
||||
final class ArcanistXHPASTLinterRuleTestCase extends PhutilTestCase {
|
||||
|
||||
public function testLoadAllRules() {
|
||||
ArcanistXHPASTLinterRule::loadAllRules();
|
||||
$this->assertTrue(true);
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in a new issue