$rules + ['standard' => true]); $result = HookManager::applyFiltersWithLegacyName(self::STANDARD, self::LEGACY, ['base' => true]); $this->assertSame(['base' => true, 'standard' => true], $result); } public function test_legacy_name_subscriber_still_receives_value(): void { HookManager::addFilter(self::LEGACY, fn (array $rules) => $rules + ['legacy' => true]); $result = HookManager::applyFiltersWithLegacyName(self::STANDARD, self::LEGACY, ['base' => true]); $this->assertSame( ['base' => true, 'legacy' => true], $result, '구 이름을 구독 중인 확장이 개명으로 조용히 멈춰서는 안 된다', ); } public function test_both_names_apply_in_order(): void { HookManager::addFilter(self::STANDARD, fn (array $r) => [...$r, 'standard']); HookManager::addFilter(self::LEGACY, fn (array $r) => [...$r, 'legacy']); $result = HookManager::applyFiltersWithLegacyName(self::STANDARD, self::LEGACY, ['base']); $this->assertSame(['base', 'standard', 'legacy'], $result, '표준 이름 결과에 구 이름이 이어 적용된다'); } public function test_no_subscriber_returns_value_unchanged(): void { $result = HookManager::applyFiltersWithLegacyName(self::STANDARD, self::LEGACY, ['base' => true]); $this->assertSame(['base' => true], $result); } public function test_extra_arguments_reach_both_names(): void { $seen = []; HookManager::addFilter(self::STANDARD, function (array $r, string $id) use (&$seen) { $seen['standard'] = $id; return $r; }); HookManager::addFilter(self::LEGACY, function (array $r, string $id) use (&$seen) { $seen['legacy'] = $id; return $r; }); HookManager::applyFiltersWithLegacyName(self::STANDARD, self::LEGACY, [], 'probe-plugin'); $this->assertSame(['standard' => 'probe-plugin', 'legacy' => 'probe-plugin'], $seen); } }