decode('{"a":1}'); $this->assertSame(['a' => 1], $decoded); } public function test_it_decodes_fenced_json(): void { $decoder = new LlmJsonDecoder; $decoded = $decoder->decode("```json\n{\"a\":2}\n```"); $this->assertSame(['a' => 2], $decoded); } public function test_it_extracts_json_from_mixed_text(): void { $decoder = new LlmJsonDecoder; $decoded = $decoder->decode("noise before {\"a\":3} noise after"); $this->assertSame(['a' => 3], $decoded); } public function test_it_returns_null_on_invalid_json(): void { $decoder = new LlmJsonDecoder; $this->assertNull($decoder->decode('no json here')); } }