assertStringContainsString('function bestEffortFailureMessage(string $taskId, string $target): string', $source); $this->assertStringContainsString('lang("task_{$taskId}")', $source); $this->assertStringContainsString("lang('warning_best_effort_task_failed', ['task' => \$display])", $source); // 실패 분기가 새 조립 함수를 부른다 — 언어팩 전용 키를 직접 부르는 옛 줄은 남아 있지 않다 $this->assertStringContainsString('$warnMsg = bestEffortFailureMessage((string) $taskId, (string) $target);', $source); $this->assertStringNotContainsString("lang('warning_language_pack_install_partial', ['identifier' => (string) \$target])", $source); } /** * 문구 키가 `:task` 치환 자리를 갖고, best-effort 작업 3종의 라벨 키가 양 로케일에 있다. * * @effects installer_best_effort_message_names_the_task */ #[Test] public function 문구_키와_작업_라벨_키가_양_로케일에_있다(): void { foreach (['ko', 'en'] as $locale) { $messages = require base_path("public/install/lang/{$locale}.php"); $this->assertStringContainsString(':task', $messages['warning_best_effort_task_failed'] ?? '', "{$locale}: :task 치환 자리가 없다"); foreach (['task_static_publish', 'task_config_cache', 'task_language_pack_install'] as $key) { $this->assertNotEmpty($messages[$key] ?? null, "{$locale}: {$key} 라벨이 없다"); } } } }