initialize(); $app->http->name('home'); $app->lang->load($root . 'app/home/lang/zh-cn.php'); $template = new think\Template([ 'view_path' => $root . 'app/home/view/', 'cache_path' => $root . 'runtime/homepage-test/', 'tpl_cache' => false, ]); $vars = [ 'seo' => ['title' => 'EVUS 中文登记服务', 'description' => '首页本地预览', 'keywords' => 'EVUS'], 'logo_icon' => '', 'asset_version' => 'preview', 'menu_url' => 'index/index', 'footer' => '', 'phone' => '', 'base_path' => '/evus', ]; foreach ([[], [['id' => 7, 'title' => '', 'create_time' => '2026-10-29']]] as $news) { ob_start(); $template->fetch('index/index', $vars + ['data' => $news]); $html = ob_get_clean(); preg_match('~~s', $html, $header); $homepageNavigation = str_replace('aria-current="page"', '', $header[0]); preg_match_all('~]*>(.*?)~s', $header[0], $menus); preg_match_all('~href="([^"]+)"~', $menus[1][0], $desktopLinks); preg_match_all('~href="([^"]+)"~', $menus[1][1], $mobileLinks); $desktopLinks[1][] = (string) url('home/user/order'); if (count($mobileLinks[1]) !== 8 || $desktopLinks[1] !== $mobileLinks[1]) { throw new RuntimeException('Homepage desktop and mobile menus must share all eight entries in order'); } if (str_contains($html, 'https://visa.evus.cn')) { throw new RuntimeException('Unfinished US visa website must not be linked from the homepage'); } if (substr_count($html, 'src="/static/home/images/logo_113.png"') !== 2 || !str_contains($html, 'href="/static/home/images/evus-icon.png"')) { throw new RuntimeException('Original EVUS logo and default site icon must render'); } foreach (['home/detail/index', 'home/lookup/index', 'home/esta/index', 'home/news/index', 'home/user/order'] as $route) { if (!str_contains(strtolower($html), strtolower((string) url($route)))) { throw new RuntimeException('Missing existing route: ' . $route); } } if (str_contains($html, '')) { throw new RuntimeException('News titles must be escaped'); } if (!str_contains($html, '') || !str_contains($html, 'aria-label="手机导航"')) { throw new RuntimeException('Mobile navigation needs a closed native disclosure'); } if (!str_contains($html, '济南经纬九州出入境服务有限公司') || !str_contains($html, '鲁ICP备18006241号-8') || !str_contains($html, 'https://beian.miit.gov.cn/')) { throw new RuntimeException('Original company and filing link must render without backend footer data'); } if (!$news) { file_put_contents($root . 'runtime/homepage-preview.html', $html); } else { file_put_contents($root . 'runtime/homepage-news-preview.html', $html); } } ob_start(); $template->fetch('index/index', array_replace($vars, ['footer' => '

Configured company footer

', 'logo_icon' => '/configured-icon.png', 'data' => []])); $configuredHtml = ob_get_clean(); if (!str_contains($configuredHtml, '

Configured company footer

') || str_contains($configuredHtml, '鲁ICP备18006241号-8')) { throw new RuntimeException('Configured footer must take precedence without duplicate company details'); } if (!str_contains($configuredHtml, 'href="/configured-icon.png"')) { throw new RuntimeException('Configured site icon must retain precedence'); } ob_start(); $template->fetch('index/screen', []); $screenHtml = ob_get_clean(); if (!str_contains($screenHtml, 'href="' . url('home/detail/index') . '"')) { throw new RuntimeException('Display page must link to the current EVUS registration route'); } foreach (['detail/index' => 'detail/index', 'lookup/index' => 'lookup/index', 'news/detail' => 'news/index', 'esta/index' => 'esta/index', 'user/order_esta' => 'user/order'] as $current => $active) { ob_start(); $template->fetch('public/home_menu', array_replace($vars, ['menu_url' => $current])); $navigation = ob_get_clean(); preg_match('~~s', $navigation, $innerHeader); if (str_replace('aria-current="page"', '', $innerHeader[0]) !== $homepageNavigation) { throw new RuntimeException('Homepage and inner navigation must match apart from the active page'); } $activeLink = 'href="' . url('home/' . $active) . '" aria-current="page"'; if (substr_count($navigation, $activeLink) !== 2) { throw new RuntimeException('Desktop and mobile navigation must highlight: ' . $current); } foreach ([(string) url('home/esta/index'), 'class="ac-mobile-menu"', 'id="ac-mobile-menu-dismiss"'] as $required) { if (!str_contains($navigation, $required)) { throw new RuntimeException('Shared navigation must retain: ' . $required); } } } echo "PASS: homepage, shared navigation active states, legacy routes, menu, escaping and footer\n";