'use strict'; /** * 「卡密管理 → 添加卡密 / 导出卡密」依赖显隐契约。 * * 这两个表单的依赖显隐由两层协作完成,两层必须对「键 → 默认值 → 操作符」保持完全一致: * 1) 服务端预判:deps_visible() + is_known_dep_key() + default_form_value(),渲染期就把不满足 * 依赖的 标成 display:none,避免首帧把导入提示全部铺开; * 2) 前端求值:行内脚本 evalDeps(),在 DOMContentLoaded 与 change 时求值。 * * 历史故障(本测试要锁死的行为): * - 判定键未登记 → 服务端把该条件当作「满足」,与 JS 结果错配(例如自定义卡密的两条导入提示同时铺开); * - 字段名拼进 CSS 选择器 → 含方括号的 vip_exchange[time] 让选择器抛异常并被 catch 吞掉, * 依赖行永久停在初始状态。 * * 这里不重写求值逻辑:直接抽取并执行源码里的行内脚本,用真实 dep 数组驱动它。 */ const assert = require('node:assert/strict'); const fs = require('node:fs'); const path = require('node:path'); const test = require('node:test'); const vm = require('node:vm'); const root = path.resolve(__dirname, '..', '..'); // PayChargeCards 已按关注点拆成 flat sibling traits。契约按方法名切片,依赖「类体 + trait 体」 // 在同一文本里保持原有相邻顺序,因此这里按固定顺序把壳类与三个 trait 文件拼接后再切片: // 壳类(render_charge_cards_page / 动作 / 数据辅助) // → List(render_list / list_query_args) // → Assets(print_assets 的