账号:'.$a.',密码:'.$p.',地区:'.$region.',检测时间:2026-11-01 09:01:02

'; } public function test_legacy_nested_paragraphs_preserve_exact_copy_values_and_timestamps(): void { $html = '

免费苹果账号(用于使用小火箭、shadowrocket):

' .$this->row('person+&tag@example.invalid', 'p<&"\'! $0'); $r = AppleIdArticleLayout::prepare($html); self::assertNotNull($r); self::assertSame('person+&tag@example.invalid', $r['accounts'][0]['account']); self::assertSame('p<&"\'! $0', $r['accounts'][0]['password']); self::assertSame('2026-11-01 09:01:02', $r['accounts'][0]['checked_at']); self::assertSame(['美区' => 1], $r['regions']); } public function test_duplicate_accounts_and_regions_remain_in_original_order(): void { $r = AppleIdArticleLayout::prepare('

免费苹果账号

'.$this->row('same@example.invalid', 'first', '香港').$this->row('same@example.invalid', 'second', '香港').$this->row('third@example.invalid', '0', '未知')); self::assertCount(3, $r['accounts']); self::assertSame(['first', 'second', '0'], array_column($r['accounts'], 'password')); self::assertSame(['香港' => 2, '未知' => 1], $r['regions']); } public function test_identical_app_store_warnings_merge_but_supplementary_content_remains(): void { $warning = '

⚠️ 使用免费共享苹果账号必须从App Store登录,千万不要登录「iCloud」。

'; $html = '

免费苹果账号

额外说明

'.str_repeat($warning, 3).$this->row('a@example.invalid', 'example').'

iOS教程

'; $r = AppleIdArticleLayout::prepare($html); self::assertCount(1, $r['warnings']); self::assertStringContainsString('iCloud', $r['warnings'][0]); self::assertStringContainsString('额外说明', $r['intro']); self::assertStringContainsString('href="/client/ios"', $r['outro']); } public function test_incomplete_extra_or_unknown_copy_structures_use_legacy_fallback(): void { $html = '

免费苹果账号

'.$this->row('a@example.invalid', 'example'); self::assertNull(AppleIdArticleLayout::prepare($html.'

附加字段

')); self::assertNull(AppleIdArticleLayout::prepare(str_replace('密码:', '未知字段:', $html))); self::assertNull(AppleIdArticleLayout::prepare('

免费苹果账号

'.$this->row('a@example.invalid', 'example').'
')); self::assertNull(AppleIdArticleLayout::prepare('

普通文章

')); } public function test_source_html_is_not_modified_and_recommendation_slot_is_not_repeated(): void { $html = '

免费苹果账号

'.$this->row('a@example.invalid', 'example'); $before = $html; $r = AppleIdArticleLayout::prepare($html); self::assertSame($before, $html); self::assertStringNotContainsString('fna-airport-recommendations', $r['intro'].$r['outro']); } public function test_missing_region_or_check_time_does_not_drop_an_account_or_invent_a_time(): void { $html = '

免费苹果账号

'.str_replace(['地区:美区', '2026-11-01 09:01:02'], ['地区:', ''], $this->row('a@example.invalid', 'example')); $r = AppleIdArticleLayout::prepare($html); self::assertCount(1, $r['accounts']); self::assertSame('未注明', $r['accounts'][0]['region']); self::assertSame('', $r['accounts'][0]['checked_at']); } public function test_empty_historical_update_has_no_invented_accounts(): void { $r = AppleIdArticleLayout::prepare('

免费苹果账号

必须从App Store登录,千万不要登录iCloud。

'); self::assertNotNull($r); self::assertSame([], $r['accounts']); self::assertSame([], $r['regions']); self::assertCount(1, $r['warnings']); self::assertNull(AppleIdArticleLayout::prepare('

免费苹果账号

账号:example@example.invalid,密码:example

')); self::assertNull(AppleIdArticleLayout::prepare('

免费苹果ID说明

')); } }