账号:'.$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说明
'));
}
}