From 937dd5e006c3aa1cca14fb1d2ddfb76bafc77a34 Mon Sep 17 00:00:00 2001 From: Guy Sartorelli <36352093+GuySartorelli@users.noreply.github.com> Date: Fri, 19 May 2023 11:13:53 +1200 Subject: [PATCH] FIX Correctly clear extensions after each scenario (#241) --- src/Context/FixtureContext.php | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/src/Context/FixtureContext.php b/src/Context/FixtureContext.php index 198da845..8616f67f 100644 --- a/src/Context/FixtureContext.php +++ b/src/Context/FixtureContext.php @@ -69,6 +69,11 @@ class FixtureContext implements Context */ protected $activatedConfigFiles = array(); + /** + * @var string[][] Tracks any extensions that have been added to classes + */ + protected $addedExtensions = array(); + /** * @var array Stores the asset tuples. */ @@ -660,6 +665,10 @@ class_exists($extension ?? '') && is_subclass_of($extension, Extension::class), /** @var Extensible $targetClass */ $targetClass = $this->convertTypeToClass($class); $targetClass::add_extension($extension); + if (!array_key_exists($targetClass, $this->addedExtensions)) { + $this->addedExtensions[$targetClass] = []; + } + $this->addedExtensions[$targetClass][] = $extension; // Write config for this extension too... $snakedExtension = strtolower(str_replace('\\', '-', $extension ?? '') ?? ''); @@ -793,6 +802,7 @@ public function aRecordWasLastEditedRelative($type, $id, $mod, $time) public function afterResetConfig(AfterScenarioScope $event) { $this->clearConfigFiles(); + $this->clearExtensions(); // Flush $this->getMainContext()->visit('/?flush'); } @@ -951,6 +961,17 @@ protected function joinPaths() return join('/', $paths); } + protected function clearExtensions() + { + foreach ($this->addedExtensions as $targetClass => $extensions) { + foreach ($extensions as $extension) { + /** @var Extensible $targetClass */ + $targetClass::remove_extension($extension); + } + } + $this->addedExtensions = []; + } + protected function clearConfigFiles() { // No files to cleanup