diff --git a/src/unit/engine/PhutilUnitTestEngine.php b/src/unit/engine/PhutilUnitTestEngine.php --- a/src/unit/engine/PhutilUnitTestEngine.php +++ b/src/unit/engine/PhutilUnitTestEngine.php @@ -197,20 +197,21 @@ continue; } - if ($path == $library_root) { - $paths[$library_name.':.'] = array( - 'library' => $library_name, - 'path' => '__tests__/', - ); - continue; + foreach (Filesystem::walkToRoot($path, $library_root) as $subpath) { + if ($subpath == $library_root) { + $paths[$library_name.':.'] = array( + 'library' => $library_name, + 'path' => '__tests__/', + ); + } else { + $library_subpath = Filesystem::readablePath($subpath, $library_root); + + $paths[$library_name.':'.$library_subpath] = array( + 'library' => $library_name, + 'path' => $library_subpath.'/__tests__/', + ); + } } - - do { - $paths[$library_name.':'.$library_path] = array( - 'library' => $library_name, - 'path' => $library_path.'/__tests__/', - ); - } while (($library_path = dirname($library_path)) != '.'); } return $paths; 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 @@ -142,6 +142,7 @@ dirname(dirname(__FILE__)).'/__tests__/', dirname(dirname(dirname(__FILE__))).'/__tests__/', + phutil_get_library_root('arcanist').'/__tests__/', ), ), 'normal directory' => array( @@ -151,25 +152,26 @@ array( dirname(dirname(__FILE__)).'/__tests__/', dirname(dirname(dirname(__FILE__))).'/__tests__/', + phutil_get_library_root('arcanist').'/__tests__/', ), ), 'library root' => array( - array(phutil_get_library_root()), - array(phutil_get_library_root().'/__tests__/'), + array(phutil_get_library_root('arcanist')), + array(phutil_get_library_root('arcanist').'/__tests__/'), ), ); $test_engine = id(new PhutilUnitTestEngine()) ->setWorkingCopy($this->getWorkingCopy()); + $library = phutil_get_current_library_name(); + $library_root = phutil_get_library_root($library); + foreach ($tests as $name => $test) { - list($paths, $tests) = $test; + list($paths, $test_paths) = $test; $expected = array(); - foreach ($tests as $path) { - $library_root = phutil_get_library_root_for_path($path); - $library = phutil_get_library_name_for_root($library_root); - + foreach ($test_paths as $path) { $expected[] = array( 'library' => $library, 'path' => Filesystem::readablePath($path, $library_root),