diff --git a/src/__phutil_library_map__.php b/src/__phutil_library_map__.php --- a/src/__phutil_library_map__.php +++ b/src/__phutil_library_map__.php @@ -145,8 +145,6 @@ 'ArcanistPhpunitTestResultParser' => 'unit/parser/ArcanistPhpunitTestResultParser.php', 'ArcanistPhrequentWorkflow' => 'workflow/ArcanistPhrequentWorkflow.php', 'ArcanistPhutilLibraryLinter' => 'lint/linter/ArcanistPhutilLibraryLinter.php', - 'ArcanistPhutilTestCase' => 'unit/engine/phutil/ArcanistPhutilTestCase.php', - 'ArcanistPhutilTestCaseTestCase' => 'unit/engine/phutil/testcase/ArcanistPhutilTestCaseTestCase.php', 'ArcanistPhutilTestSkippedException' => 'unit/engine/phutil/testcase/ArcanistPhutilTestSkippedException.php', 'ArcanistPhutilTestTerminatedException' => 'unit/engine/phutil/testcase/ArcanistPhutilTestTerminatedException.php', 'ArcanistPhutilXHPASTLinter' => 'lint/linter/ArcanistPhutilXHPASTLinter.php', @@ -179,7 +177,6 @@ 'ArcanistSummaryLintRenderer' => 'lint/renderer/ArcanistSummaryLintRenderer.php', 'ArcanistSvnHookPreCommitWorkflow' => 'workflow/ArcanistSvnHookPreCommitWorkflow.php', 'ArcanistTasksWorkflow' => 'workflow/ArcanistTasksWorkflow.php', - 'ArcanistTestCase' => 'infrastructure/testing/ArcanistTestCase.php', 'ArcanistTestResultParser' => 'unit/parser/ArcanistTestResultParser.php', 'ArcanistTestXHPASTLintSwitchHook' => 'lint/linter/__tests__/ArcanistTestXHPASTLintSwitchHook.php', 'ArcanistTextLinter' => 'lint/linter/ArcanistTextLinter.php', @@ -213,6 +210,8 @@ 'NoseTestEngine' => 'unit/engine/NoseTestEngine.php', 'PhpunitTestEngine' => 'unit/engine/PhpunitTestEngine.php', 'PhpunitTestEngineTestCase' => 'unit/engine/__tests__/PhpunitTestEngineTestCase.php', + 'PhutilTestCase' => 'unit/engine/phutil/PhutilTestCase.php', + 'PhutilTestCaseTestCase' => 'unit/engine/phutil/testcase/PhutilTestCaseTestCase.php', 'PhutilUnitTestEngine' => 'unit/engine/PhutilUnitTestEngine.php', 'PhutilUnitTestEngineTestCase' => 'unit/engine/__tests__/PhutilUnitTestEngineTestCase.php', 'PytestTestEngine' => 'unit/engine/PytestTestEngine.php', @@ -225,15 +224,15 @@ 'ArcanistAmendWorkflow' => 'ArcanistWorkflow', 'ArcanistAnoidWorkflow' => 'ArcanistWorkflow', 'ArcanistBackoutWorkflow' => 'ArcanistWorkflow', - 'ArcanistBaseCommitParserTestCase' => 'ArcanistTestCase', + 'ArcanistBaseCommitParserTestCase' => 'PhutilTestCase', 'ArcanistBaseUnitTestEngine' => 'ArcanistUnitTestEngine', 'ArcanistBaseWorkflow' => 'ArcanistWorkflow', 'ArcanistBaseXHPASTLinter' => 'ArcanistFutureLinter', 'ArcanistBookmarkWorkflow' => 'ArcanistFeatureWorkflow', 'ArcanistBranchWorkflow' => 'ArcanistFeatureWorkflow', - 'ArcanistBritishTestCase' => 'ArcanistTestCase', + 'ArcanistBritishTestCase' => 'PhutilTestCase', 'ArcanistBrowseWorkflow' => 'ArcanistWorkflow', - 'ArcanistBundleTestCase' => 'ArcanistTestCase', + 'ArcanistBundleTestCase' => 'PhutilTestCase', 'ArcanistCSSLintLinter' => 'ArcanistExternalLinter', 'ArcanistCSSLintLinterTestCase' => 'ArcanistExternalLinterTestCase', 'ArcanistCSharpLinter' => 'ArcanistLinter', @@ -248,7 +247,7 @@ 'ArcanistClosureLinterTestCase' => 'ArcanistExternalLinterTestCase', 'ArcanistCoffeeLintLinter' => 'ArcanistExternalLinter', 'ArcanistCoffeeLintLinterTestCase' => 'ArcanistExternalLinterTestCase', - 'ArcanistCommentRemoverTestCase' => 'ArcanistTestCase', + 'ArcanistCommentRemoverTestCase' => 'PhutilTestCase', 'ArcanistCommitLinter' => 'ArcanistLinter', 'ArcanistCommitLinterTestCase' => 'ArcanistLinterTestCase', 'ArcanistCommitWorkflow' => 'ArcanistWorkflow', @@ -262,8 +261,8 @@ 'ArcanistCppcheckLinterTestCase' => 'ArcanistExternalLinterTestCase', 'ArcanistCpplintLinter' => 'ArcanistExternalLinter', 'ArcanistCpplintLinterTestCase' => 'ArcanistExternalLinterTestCase', - 'ArcanistDiffParserTestCase' => 'ArcanistTestCase', - 'ArcanistDiffUtilsTestCase' => 'ArcanistTestCase', + 'ArcanistDiffParserTestCase' => 'PhutilTestCase', + 'ArcanistDiffUtilsTestCase' => 'PhutilTestCase', 'ArcanistDiffWorkflow' => 'ArcanistWorkflow', 'ArcanistDifferentialCommitMessageParserException' => 'Exception', 'ArcanistDifferentialDependencyGraph' => 'AbstractDirectedGraph', @@ -287,7 +286,7 @@ 'ArcanistGoLintLinter' => 'ArcanistExternalLinter', 'ArcanistGoLintLinterTestCase' => 'ArcanistExternalLinterTestCase', 'ArcanistGoTestResultParser' => 'ArcanistTestResultParser', - 'ArcanistGoTestResultParserTestCase' => 'ArcanistTestCase', + 'ArcanistGoTestResultParserTestCase' => 'PhutilTestCase', 'ArcanistHLintLinter' => 'ArcanistExternalLinter', 'ArcanistHLintLinterTestCase' => 'ArcanistExternalLinterTestCase', 'ArcanistHelpWorkflow' => 'ArcanistWorkflow', @@ -309,11 +308,11 @@ 'ArcanistLiberateWorkflow' => 'ArcanistWorkflow', 'ArcanistLibraryTestCase' => 'PhutilLibraryTestCase', 'ArcanistLintWorkflow' => 'ArcanistWorkflow', - 'ArcanistLinterTestCase' => 'ArcanistPhutilTestCase', + 'ArcanistLinterTestCase' => 'PhutilTestCase', 'ArcanistLintersWorkflow' => 'ArcanistWorkflow', 'ArcanistListWorkflow' => 'ArcanistWorkflow', 'ArcanistMercurialAPI' => 'ArcanistRepositoryAPI', - 'ArcanistMercurialParserTestCase' => 'ArcanistTestCase', + 'ArcanistMercurialParserTestCase' => 'PhutilTestCase', 'ArcanistMergeConflictLinter' => 'ArcanistLinter', 'ArcanistMergeConflictLinterTestCase' => 'ArcanistLinterTestCase', 'ArcanistMissingLinterException' => 'Exception', @@ -333,7 +332,6 @@ 'ArcanistPhpunitTestResultParser' => 'ArcanistTestResultParser', 'ArcanistPhrequentWorkflow' => 'ArcanistWorkflow', 'ArcanistPhutilLibraryLinter' => 'ArcanistLinter', - 'ArcanistPhutilTestCaseTestCase' => 'ArcanistPhutilTestCase', 'ArcanistPhutilTestSkippedException' => 'Exception', 'ArcanistPhutilTestTerminatedException' => 'Exception', 'ArcanistPhutilXHPASTLinter' => 'ArcanistBaseXHPASTLinter', @@ -344,8 +342,8 @@ 'ArcanistPyFlakesLinterTestCase' => 'ArcanistExternalLinterTestCase', 'ArcanistPyLintLinter' => 'ArcanistLinter', 'ArcanistPyLintLinterTestCase' => 'ArcanistExternalLinterTestCase', - 'ArcanistRepositoryAPIMiscTestCase' => 'ArcanistTestCase', - 'ArcanistRepositoryAPIStateTestCase' => 'ArcanistTestCase', + 'ArcanistRepositoryAPIMiscTestCase' => 'PhutilTestCase', + 'ArcanistRepositoryAPIStateTestCase' => 'PhutilTestCase', 'ArcanistRevertWorkflow' => 'ArcanistWorkflow', 'ArcanistRuboCopLinter' => 'ArcanistExternalLinter', 'ArcanistRuboCopLinterTestCase' => 'ArcanistExternalLinterTestCase', @@ -364,7 +362,6 @@ 'ArcanistSummaryLintRenderer' => 'ArcanistLintRenderer', 'ArcanistSvnHookPreCommitWorkflow' => 'ArcanistWorkflow', 'ArcanistTasksWorkflow' => 'ArcanistWorkflow', - 'ArcanistTestCase' => 'ArcanistPhutilTestCase', 'ArcanistTestXHPASTLintSwitchHook' => 'ArcanistXHPASTLintSwitchHook', 'ArcanistTextLinter' => 'ArcanistLinter', 'ArcanistTextLinterTestCase' => 'ArcanistLinterTestCase', @@ -381,7 +378,7 @@ 'ArcanistVersionWorkflow' => 'ArcanistWorkflow', 'ArcanistWhichWorkflow' => 'ArcanistWorkflow', 'ArcanistWorkflow' => 'Phobject', - 'ArcanistXHPASTLintNamingHookTestCase' => 'ArcanistTestCase', + 'ArcanistXHPASTLintNamingHookTestCase' => 'PhutilTestCase', 'ArcanistXHPASTLinter' => 'ArcanistBaseXHPASTLinter', 'ArcanistXHPASTLinterTestCase' => 'ArcanistLinterTestCase', 'ArcanistXMLLinter' => 'ArcanistLinter', @@ -389,11 +386,12 @@ 'CSharpToolsTestEngine' => 'XUnitTestEngine', 'NoseTestEngine' => 'ArcanistUnitTestEngine', 'PhpunitTestEngine' => 'ArcanistUnitTestEngine', - 'PhpunitTestEngineTestCase' => 'ArcanistTestCase', + 'PhpunitTestEngineTestCase' => 'PhutilTestCase', + 'PhutilTestCaseTestCase' => 'PhutilTestCase', 'PhutilUnitTestEngine' => 'ArcanistUnitTestEngine', - 'PhutilUnitTestEngineTestCase' => 'ArcanistTestCase', + 'PhutilUnitTestEngineTestCase' => 'PhutilTestCase', 'PytestTestEngine' => 'ArcanistUnitTestEngine', 'XUnitTestEngine' => 'ArcanistUnitTestEngine', - 'XUnitTestResultParserTestCase' => 'ArcanistTestCase', + 'XUnitTestResultParserTestCase' => 'PhutilTestCase', ), )); diff --git a/src/configuration/__tests__/ArcanistBritishTestCase.php b/src/configuration/__tests__/ArcanistBritishTestCase.php --- a/src/configuration/__tests__/ArcanistBritishTestCase.php +++ b/src/configuration/__tests__/ArcanistBritishTestCase.php @@ -1,6 +1,6 @@ assertCommandCompletion( diff --git a/src/difference/__tests__/ArcanistDiffUtilsTestCase.php b/src/difference/__tests__/ArcanistDiffUtilsTestCase.php --- a/src/difference/__tests__/ArcanistDiffUtilsTestCase.php +++ b/src/difference/__tests__/ArcanistDiffUtilsTestCase.php @@ -3,7 +3,7 @@ /** * Test cases for @{class:ArcanistDiffUtils}. */ -final class ArcanistDiffUtilsTestCase extends ArcanistTestCase { +final class ArcanistDiffUtilsTestCase extends PhutilTestCase { public function testLevenshtein() { $tests = array( diff --git a/src/infrastructure/testing/ArcanistTestCase.php b/src/infrastructure/testing/ArcanistTestCase.php deleted file mode 100644 --- a/src/infrastructure/testing/ArcanistTestCase.php +++ /dev/null @@ -1,13 +0,0 @@ -getResourcePath($name)); diff --git a/src/parser/__tests__/ArcanistCommentRemoverTestCase.php b/src/parser/__tests__/ArcanistCommentRemoverTestCase.php --- a/src/parser/__tests__/ArcanistCommentRemoverTestCase.php +++ b/src/parser/__tests__/ArcanistCommentRemoverTestCase.php @@ -1,6 +1,6 @@ setEnableCoverage($enable_coverage); - $test_case->setProjectRoot($project_root); + $test_case->setWorkingCopy($this->getWorkingCopy()); + if ($this->getPaths()) { $test_case->setPaths($this->getPaths()); } @@ -71,7 +72,7 @@ $symbols = id(new PhutilSymbolLoader()) ->setType('class') - ->setAncestorClass('ArcanistPhutilTestCase') + ->setAncestorClass('PhutilTestCase') ->setConcreteOnly(true) ->selectSymbolsWithoutLoading(); @@ -153,7 +154,7 @@ } } - // Look for any class that extends ArcanistPhutilTestCase inside a + // Look for any class that extends PhutilTestCase inside a // __tests__ directory in any parent directory of every affected file. // // The idea is that "infrastructure/__tests__/" tests defines general tests @@ -171,7 +172,7 @@ ->setType('class') ->setLibrary($library) ->setPathPrefix(($path ? $path.'/' : '').'__tests__/') - ->setAncestorClass('ArcanistPhutilTestCase') + ->setAncestorClass('PhutilTestCase') ->setConcreteOnly(true) ->selectAndLoadSymbols(); diff --git a/src/unit/engine/XUnitTestEngine.php b/src/unit/engine/XUnitTestEngine.php --- a/src/unit/engine/XUnitTestEngine.php +++ b/src/unit/engine/XUnitTestEngine.php @@ -89,7 +89,6 @@ * @return array Array of test results. */ public function run() { - $this->loadEnvironment(); if ($this->getRunAllTests()) { diff --git a/src/unit/engine/__tests__/PhpunitTestEngineTestCase.php b/src/unit/engine/__tests__/PhpunitTestEngineTestCase.php --- a/src/unit/engine/__tests__/PhpunitTestEngineTestCase.php +++ b/src/unit/engine/__tests__/PhpunitTestEngineTestCase.php @@ -3,7 +3,7 @@ /** * Tests for @{class:PhpunitTestEngine}. */ -final class PhpunitTestEngineTestCase extends ArcanistTestCase { +final class PhpunitTestEngineTestCase extends PhutilTestCase { public function testSearchLocations() { $path = '/path/to/some/file/X.php'; diff --git a/src/unit/engine/__tests__/PhutilUnitTestEngineTestCase.php b/src/unit/engine/__tests__/PhutilUnitTestEngineTestCase.php --- a/src/unit/engine/__tests__/PhutilUnitTestEngineTestCase.php +++ b/src/unit/engine/__tests__/PhutilUnitTestEngineTestCase.php @@ -3,7 +3,7 @@ /** * Very meta test for @{class:PhutilUnitTestEngine}. */ -final class PhutilUnitTestEngineTestCase extends ArcanistTestCase { +final class PhutilUnitTestEngineTestCase extends PhutilTestCase { private static $allTestsCounter = 0; private static $oneTestCounter = 0; @@ -67,7 +67,7 @@ public function testFailSkip() { $failed = 0; $skipped = 0; - $test_case = new ArcanistPhutilTestCaseTestCase(); + $test_case = new PhutilTestCaseTestCase(); foreach ($test_case->run() as $result) { if ($result->getResult() == ArcanistUnitTestResult::RESULT_FAIL) { $failed++; diff --git a/src/unit/engine/phutil/ArcanistPhutilTestCase.php b/src/unit/engine/phutil/PhutilTestCase.php rename from src/unit/engine/phutil/ArcanistPhutilTestCase.php rename to src/unit/engine/phutil/PhutilTestCase.php --- a/src/unit/engine/phutil/ArcanistPhutilTestCase.php +++ b/src/unit/engine/phutil/PhutilTestCase.php @@ -8,7 +8,7 @@ * @task hook Hooks for Setup and Teardown * @task internal Internals */ -abstract class ArcanistPhutilTestCase { +abstract class PhutilTestCase { private $assertions = 0; private $runningTest; @@ -16,7 +16,7 @@ private $results = array(); private $enableCoverage; private $coverage = array(); - private $projectRoot; + private $workingCopy; private $paths; private $renderer; @@ -358,7 +358,7 @@ * This hook is invoked once, before any test cases execute. It gives you * an opportunity to perform setup steps for the entire suite of test cases. * - * @param list List of test cases to be run. + * @param list List of test cases to be run. * @return void * @task hook */ @@ -370,7 +370,7 @@ /** * This hook is invoked once, after all test cases execute. * - * @param list List of test cases that ran. + * @param list List of test cases that ran. * @return void * @task hook */ @@ -560,7 +560,9 @@ $coverage = array(); foreach ($result as $file => $report) { - if (strncmp($file, $this->projectRoot, strlen($this->projectRoot))) { + $project_root = $this->getProjectRoot(); + + if (strncmp($file, $project_root, strlen($project_root))) { continue; } @@ -583,7 +585,7 @@ $str .= 'N'; // Not executable. } } - $coverage[substr($file, strlen($this->projectRoot) + 1)] = $str; + $coverage[substr($file, strlen($this->getProjectRoot()) + 1)] = $str; } // Only keep coverage information for files modified by the change. In @@ -603,18 +605,40 @@ } } - final public function setProjectRoot($project_root) { - $this->projectRoot = $project_root; + final public function getWorkingCopy() { + return $this->workingCopy; + } + + final public function setWorkingCopy( + ArcanistWorkingCopyIdentity $working_copy) { + + $this->workingCopy = $working_copy; return $this; } + final public function getProjectRoot() { + // TODO: What if $this->workingCopy isn't set. + return $this->getWorkingCopy()->getProjectRoot(); + } + final public function setPaths(array $paths) { $this->paths = $paths; return $this; } - protected function getLink($method) { - return null; + final protected function getLink($method) { + $base_uri = $this + ->getWorkingCopy() + ->getProjectConfig('phabricator.uri'); + + $uri = id(new PhutilURI($base_uri)) + ->setPath("/diffusion/symbol/{$method}/") + ->setQueryParam('context', get_class($this)) + ->setQueryParam('jump', 'true') + ->setQueryParam('lang', 'php') + ->setQueryParam('repositories', ''); + + return (string)$uri; } public function setRenderer(ArcanistUnitRenderer $renderer) { diff --git a/src/unit/engine/phutil/testcase/ArcanistPhutilTestCaseTestCase.php b/src/unit/engine/phutil/testcase/PhutilTestCaseTestCase.php rename from src/unit/engine/phutil/testcase/ArcanistPhutilTestCaseTestCase.php rename to src/unit/engine/phutil/testcase/PhutilTestCaseTestCase.php --- a/src/unit/engine/phutil/testcase/ArcanistPhutilTestCaseTestCase.php +++ b/src/unit/engine/phutil/testcase/PhutilTestCaseTestCase.php @@ -3,7 +3,7 @@ /** * Test for @{class:PhutilUnitTestEngineTestCase}. */ -final class ArcanistPhutilTestCaseTestCase extends ArcanistPhutilTestCase { +final class PhutilTestCaseTestCase extends PhutilTestCase { public function testFail() { $this->assertFailure(pht('This test is expected to fail.')); diff --git a/src/unit/parser/__tests__/ArcanistGoTestResultParserTestCase.php b/src/unit/parser/__tests__/ArcanistGoTestResultParserTestCase.php --- a/src/unit/parser/__tests__/ArcanistGoTestResultParserTestCase.php +++ b/src/unit/parser/__tests__/ArcanistGoTestResultParserTestCase.php @@ -3,7 +3,7 @@ /** * Test for @{class:ArcanistGoTestResultParser}. */ -final class ArcanistGoTestResultParserTestCase extends ArcanistTestCase { +final class ArcanistGoTestResultParserTestCase extends PhutilTestCase { public function testSingleTestCaseSuccessful() { $stubbed_results = Filesystem::readFile( diff --git a/src/unit/parser/__tests__/XUnitTestResultParserTestCase.php b/src/unit/parser/__tests__/XUnitTestResultParserTestCase.php --- a/src/unit/parser/__tests__/XUnitTestResultParserTestCase.php +++ b/src/unit/parser/__tests__/XUnitTestResultParserTestCase.php @@ -3,7 +3,7 @@ /** * Test for @{class:ArcanistXUnitTestResultParser}. */ -final class XUnitTestResultParserTestCase extends ArcanistTestCase { +final class XUnitTestResultParserTestCase extends PhutilTestCase { public function testAcceptsNoTestsInput() { $stubbed_results = Filesystem::readFile(