// StellarX 星垣GUI框架 - 测试用例 // // 当前阶段测试入口说明(2026-04): // 1. KEY1:旧页签链路 + Table 超界残留回归 // - 目标:验证 TabControl 重复激活同一页签、切页、关页后的快照/清理链是否稳定。 // - 预期: // * 外部重复激活当前页签,不再扰动已激活页的快照链。 // * 页签 1 中 Table 超出页区域的部分,在切页或关闭页签时不会残留。 // * 触发正常全量重绘后,不应出现额外残影或层级错乱。 // // 2. KEY2:公开布局 API 首个迁移样例 // - 目标:验证新的 AxisSizePolicy / AxisAlignPolicy 公开接口在真实场景里可用。 // - 预期: // * 32 位选择区中的“位号 + 位按钮”作为单元整体位移,窗口拉伸后保持对齐。 // * 位按钮点击、位取反、左移、右移、一键置 0/1、签名切换,会统一刷新十六进制、 // 十进制、上次值、本次值和 initData。 // * 顶层五个区块在正常拉伸/最大化后继续铺满窗口,不再依赖旧双锚点硬凑。 // * 当前更偏重横向铺满验证;极窄窗口下功能区是否进一步自适应,不作为本阶段硬指标。 // // 3. KEY3:旧业务大场景保留用例 // - 目标:保留历史业务页示例,观察老场景在新主线下是否出现明显倒退。 // - 预期: // * 登录页、TabControl、旧业务页基本行为保持可运行。 // * 当前不作为本阶段主回归集,不要求覆盖新的布局 API 或 overlay 专项。 // // 4. KEY4:Dialog / MessageBox 专项回归 // - 目标:验证模态/非模态对话框、遮挡交互、关闭后 hover 恢复、拖拽 resize 等链路。 // - 预期: // * 非模态 Dialog 遮挡底层按钮时,不应出现 hover/tooltip 穿透或残留。 // * 模态 Dialog 打开后拖拽窗口,标题、关闭按钮和底层恢复链保持稳定。 // * 对话框关闭后,底层按钮 hover 能及时恢复。 // - 备注:当前它更适合作为 Dialog 专项补充,不纳入每轮主集。 // // 5. KEY5:第二阶段专项主回归 // - 目标:覆盖三层 Canvas、TabControl、Tooltip、overlay、Table、页码与分页按钮等主线风险点。 // - 预期: // * 三层 Canvas 嵌套下,深层按钮的 hover / press / release / tooltip 都能正确刷新。 // * Window / Canvas / TabControl 的 overlay 补画与 coverage 链闭合,不再出现遮挡错层。 // * TabControl 页签按钮与页面层级正确;页签 tooltip 不会再被页面盖掉。 // * Table 分页按钮、页码标签、与上层浮层相交时的重绘链保持正确。 // // 6. KEY6:已实现但主回归未覆盖的枚举/分支补充 // - 目标:补充 TabPlacement::Right、Button 圆/椭圆/禁用态、TextBox 圆角形状、 // 以及 YesNo / RetryCancel / AbortRetryIgnore 消息框类型。 // - 预期: // * 右侧页签布局、切页、页内按钮和输入框正常。 // * 圆形/椭圆按钮命中区域符合形状,禁用按钮不触发点击回调。 // * 剩余 MessageBox 类型按钮结果链正常,非模态关闭不残留。 // // 当前阶段建议主回归集:KEY1 + KEY2 + KEY5 // Dialog / MessageBox 补充专项:KEY4 // 实现分支补充专项:KEY6 #include"StellarX.h" #include #ifndef KEY #define KEY 6 #endif // 测试用例统一使用最新布局 API,避免继续依赖旧 setAnchor() 兼容层。 // 这些 helper 只服务 z-testDome:命名带 SxTest 前缀,避免被误认为框架公开接口。 static void SxTestSetDesignX(Control* control) { if (!control) return; control->setHorizontalAnchors(false, false); control->setHorizontalSizePolicy(StellarX::AxisSizePolicy::FixedSize); control->setHorizontalAlignPolicy(StellarX::AxisAlignPolicy::Start); } static void SxTestSetDesignY(Control* control) { if (!control) return; control->setVerticalAnchors(false, false); control->setVerticalSizePolicy(StellarX::AxisSizePolicy::FixedSize); control->setVerticalAlignPolicy(StellarX::AxisAlignPolicy::Start); } static void SxTestSetStretchX(Control* control) { if (!control) return; control->setHorizontalAnchors(true, true); control->setHorizontalSizePolicy(StellarX::AxisSizePolicy::Stretch); control->setHorizontalAlignPolicy(StellarX::AxisAlignPolicy::Start); SxTestSetDesignY(control); } static void SxTestSetLeftFixed(Control* control) { if (!control) return; control->setHorizontalAnchors(true, false); control->setHorizontalSizePolicy(StellarX::AxisSizePolicy::FixedSize); control->setHorizontalAlignPolicy(StellarX::AxisAlignPolicy::Start); SxTestSetDesignY(control); } static void SxTestSetRightFixed(Control* control) { if (!control) return; control->setHorizontalAnchors(false, true); control->setHorizontalSizePolicy(StellarX::AxisSizePolicy::FixedSize); control->setHorizontalAlignPolicy(StellarX::AxisAlignPolicy::End); SxTestSetDesignY(control); } static void SxTestSetTopFixed(Control* control) { if (!control) return; SxTestSetDesignX(control); control->setVerticalAnchors(true, false); control->setVerticalSizePolicy(StellarX::AxisSizePolicy::FixedSize); control->setVerticalAlignPolicy(StellarX::AxisAlignPolicy::Start); } static void SxTestSetBottomFixed(Control* control) { if (!control) return; SxTestSetDesignX(control); control->setVerticalAnchors(false, true); control->setVerticalSizePolicy(StellarX::AxisSizePolicy::FixedSize); control->setVerticalAlignPolicy(StellarX::AxisAlignPolicy::End); } static void SxTestSetStretchY(Control* control) { if (!control) return; SxTestSetDesignX(control); control->setVerticalAnchors(true, true); control->setVerticalSizePolicy(StellarX::AxisSizePolicy::Stretch); control->setVerticalAlignPolicy(StellarX::AxisAlignPolicy::Start); } #if 6 == KEY int main() { StellarX::SxLogger::setGBK(); StellarX::SxLogger::Get().enableConsole(true); StellarX::SxLogger::Get().setMinLevel(StellarX::SxLogLevel::Debug); StellarX::SxLogger::Get().setLanguage(StellarX::SxLogLanguage::ZhCN); Window win(1120, 760, 1, RGB(246, 248, 251), "StellarX KEY6 分支覆盖补充"); const COLORREF panelColor = RGB(230, 238, 248); const COLORREF shapeColor = RGB(244, 235, 218); const COLORREF tabColor = RGB(226, 242, 235); const COLORREF msgColor = RGB(240, 229, 245); const COLORREF hoverColor = RGB(255, 225, 92); const COLORREF trueColor = RGB(238, 142, 104); const COLORREF falseColor = RGB(247, 248, 250); auto configureButton = [&](Button* button, const std::string& tooltip) { button->enableTooltip(true); button->setTooltipDelay(120); button->setTooltipText(tooltip); }; auto makeButton = [&](int x, int y, int w, int h, const std::string& text) { auto button = std::make_unique