mirror of
https://github.com/moodle/moodle.git
synced 2025-01-18 14:03:52 +01:00
MDL-66903 core: Introduce \core_component::reset to replace hacks
Traditionally we have done this using reflection and it would be better to do this in a 'proper' fashion in case we ever need to change how it works.
This commit is contained in:
parent
9e71503ab3
commit
ee5ac3f1f3
@ -251,7 +251,6 @@ class core_component {
|
||||
return $file;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Initialise caches, always call before accessing self:: caches.
|
||||
*/
|
||||
@ -371,6 +370,17 @@ class core_component {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Reset the initialisation of the component utility.
|
||||
*
|
||||
* Note: It should not be necessary to call this in regular code.
|
||||
* Please only use it where strictly required.
|
||||
*/
|
||||
public static function reset(): void {
|
||||
// The autoloader will re-initialise if plugintypes is null.
|
||||
self::$plugintypes = null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Are we in developer debug mode?
|
||||
*
|
||||
|
@ -87,8 +87,9 @@ abstract class advanced_testcase extends base_testcase {
|
||||
// Reset global state after test and test failure.
|
||||
$CFG = phpunit_util::get_global_backup('CFG');
|
||||
$DB = phpunit_util::get_global_backup('DB');
|
||||
// This is _hacky_. We need to reset the autoloader, and this is the only way to do so right now.
|
||||
(new ReflectionProperty(\core_component::class, 'plugintypes'))->setValue(null, null);
|
||||
|
||||
// We need to reset the autoloader.
|
||||
\core_component::reset();
|
||||
}
|
||||
|
||||
if (isset($e)) {
|
||||
|
@ -48,9 +48,7 @@ final class component_test extends advanced_testcase {
|
||||
$psr4namespaces->setAccessible(true);
|
||||
$psr4namespaces->setValue(null, $this->oldpsr4namespaces);
|
||||
|
||||
$plugintypes = new ReflectionProperty(\core_component::class, 'plugintypes');
|
||||
$plugintypes->setAccessible(true);
|
||||
$plugintypes->setValue(null, null);
|
||||
\core_component::reset();
|
||||
}
|
||||
|
||||
public function test_get_core_subsystems() {
|
||||
@ -915,7 +913,7 @@ final class component_test extends advanced_testcase {
|
||||
// We have to override the dirroot and libdir, and then reset the plugintypes property.
|
||||
$CFG->dirroot = $vfileroot->url();
|
||||
$CFG->libdir = $vfileroot->url() . '/lib';
|
||||
(new ReflectionProperty('core_component', 'plugintypes'))->setValue(null, null);
|
||||
\core_component::reset();
|
||||
|
||||
// Existing classes do not break.
|
||||
$this->assertTrue(
|
||||
|
Loading…
x
Reference in New Issue
Block a user