# -*- coding: utf-8 -*- """ 测试鲜明轮播图系统 (Test Vivid Banner Carousel System) 验证首屏 4 张轮播图的鲜明度、专业业务实体感、无AI味、CSS通透遮罩以及全端结构完整性。 """ import os import re import unittest ROOT_DIR = os.path.abspath(os.path.join(os.path.dirname(__file__), "..")) BANNER_DIR = os.path.join(ROOT_DIR, "public", "assets", "addons", "official", "images", "banners") CSS_PATH = os.path.join(ROOT_DIR, "public", "assets", "addons", "official", "css", "modern_nhc.css") PC_HOME_PATH = os.path.join(ROOT_DIR, "addons", "official", "view", "web", "official_home", "index.html") M_HOME_PATH = os.path.join(ROOT_DIR, "addons", "official", "view", "web", "official_home", "index_e.html") class VividBannerCarouselTest(unittest.TestCase): """验证鲜明高质感轮播图组件""" def test_01_banner_files_exist_and_non_empty(self): """1. 验证 4 张核心轮播图资源物理存在且大小合理""" banners = ["banner_lead", "banner_craft", "banner_agent", "banner_matrix"] for b in banners: svg_file = os.path.join(BANNER_DIR, f"{b}.svg") jpg_file = os.path.join(BANNER_DIR, f"{b}.jpg") # 必须至少有一种高质感格式存在,且文件大小大于 2KB exists = False if os.path.exists(svg_file) and os.path.getsize(svg_file) > 2048: exists = True elif os.path.exists(jpg_file) and os.path.getsize(jpg_file) > 2048: exists = True self.assertTrue(exists, f"轮播图文件不存在或过小: {b}") def test_02_css_gradient_mask_not_obscuring_right_visual(self): """2. 验证 CSS 渐变遮罩优化:右侧区域必须保持通透,严禁在 50% 处覆盖 >90% 重度白雾""" with open(CSS_PATH, "r", encoding="utf-8") as f: css_content = f.read() # 检查 4 个 slide 主题 for i in range(1, 5): theme_class = f".nhc-slide-theme-{i}" self.assertIn(theme_class, css_content, f"CSS 中缺少主题定义: {theme_class}") # 检查是否去除了原本在 50% 覆盖 0.92 白色的遮罩问题 # 原写法: rgba(255, 255, 255, 0.92) 50% # 优化后右侧主体应通透,不再出现 50% 处 0.92 白 self.assertNotIn("rgba(255, 255, 255, 0.92) 50%", css_content, "CSS 仍保留 50% 处 92% 重度白色遮罩,导致右侧鲜明视窗被严重冲淡泛白") def test_03_banner_rich_content_and_vivid_colors(self): """3. 验证轮播图包含真实工业级软件要素与鲜明品牌色彩 (科技蓝 #2563EB, 辅助青 #06B6D4, 紫 #7C3AED)""" svg_banners = { "banner_lead": ["2563EB", "06B6D4", "QPS", "微服务"], "banner_craft": ["2563EB", "06B6D4", "小程序", "API"], "banner_agent": ["7C3AED", "2563EB", "RAG", "Agent"], "banner_matrix": ["2563EB", "POS", "ERP", "SaaS"] } for b, expected_keywords in svg_banners.items(): svg_file = os.path.join(BANNER_DIR, f"{b}.svg") if os.path.exists(svg_file): with open(svg_file, "r", encoding="utf-8") as f: content = f.read() for kw in expected_keywords: self.assertTrue( kw.lower() in content.lower(), f"轮播图 {b}.svg 缺少业务要素或鲜明特征词: {kw}" ) def test_04_pc_and_mobile_template_integrity(self): """4. 验证 PC 与移动端模板幻灯片数量均为 4,包含对应的主题类名""" for page_path in [PC_HOME_PATH, M_HOME_PATH]: with open(page_path, "r", encoding="utf-8") as f: html = f.read() for i in range(1, 5): self.assertIn(f"nhc-slide-theme-{i}", html, f"页面缺少主题类 nhc-slide-theme-{i}: {page_path}") # 必须包含 4 个幻灯片标识 self.assertEqual(len(re.findall(r'nhc-slide-theme-\d', html)), 4, f"幻灯片数量不等于 4: {page_path}") if __name__ == "__main__": unittest.main()