$mirror->id, DiviAdapters::mirrors()); sort($ids); $expected = DiviReference::expected(); self::assertSame($ids, array_keys($expected)); foreach ($expected as $id => $hash) { self::assertMatchesRegularExpression('/^[0-9a-f]{64}$/', $hash, $id); self::assertNotNull(DiviReference::readSource($id, (string) DiviReference::sourceDir()), $id); } } public function testWritesAndReadsExpectedFingerprintsSorted(): void { $file = (string) tempnam(sys_get_temp_dir(), 'lit'); try { DiviReference::writeExpected(['b' => str_repeat('b', 64), 'a' => str_repeat('a', 64)], $file); self::assertSame(['a' => str_repeat('a', 64), 'b' => str_repeat('b', 64)], DiviReference::expected($file)); self::assertStringEndsWith("\n", (string) file_get_contents($file)); } finally { unlink($file); } } public function testMissingOrBrokenFileMeansNoExpectations(): void { self::assertSame([], DiviReference::expected('/nonexistent/fingerprints.json')); } }