NAC_Blockchain/charter-std-zh/tests/test_governance.ch

96 lines
3.3 KiB
Plaintext

///! 治理模块中文测试
///! 测试治理协议的所有功能
使用 ../governance/governance;
合约 治理测试 {
私有 治理: 治理基础;
构造函数() {
让 治理代币 = 地址::从十六进制("0x1234567890123456789012345678901234567890");
治理 = 治理基础::新建(治理代币, 1000 * (10 ** 18), 51, 3);
}
// 测试1: 创建提案
函数 测试创建提案() {
让 提案者 = 消息::发送者();
让 目标 = 地址::从十六进制("0x2345678901234567890123456789012345678901");
让 调用数据 = 字节::从十六进制("0x12345678");
让 描述 = "测试提案";
// 创建前
让 提案数量前 = 治理.提案数量();
// 执行创建
让 提案ID = 治理.提案(目标, 0, 调用数据, 描述);
// 创建后
让 提案数量后 = 治理.提案数量();
要求(提案数量后 == 提案数量前 + 1, "提案数量应增加");
要求(治理.提案状态(提案ID) == 提案状态::待处理, "提案状态应为待处理");
}
// 测试2: 投票
函数 测试投票() {
让 投票者 = 消息::发送者();
// 先创建提案
让 目标 = 地址::从十六进制("0x2345678901234567890123456789012345678901");
让 提案ID = 治理.提案(目标, 0, 字节::从十六进制("0x12345678"), "测试提案");
// 投票前
要求(治理.是否已投票(提案ID, 投票者) == 假, "不应该已投票");
// 执行投票(赞成)
治理.投票(提案ID, 真);
// 投票后
要求(治理.是否已投票(提案ID, 投票者) == 真, "应该已投票");
让 (赞成票, 反对票, 弃权票) = 治理.提案票数(提案ID);
要求(赞成票 > 0, "赞成票应大于0");
}
// 测试3: 执行提案
函数 测试执行提案() {
// 先创建提案
让 目标 = 地址::从十六进制("0x2345678901234567890123456789012345678901");
让 提案ID = 治理.提案(目标, 0, 字节::从十六进制("0x12345678"), "测试提案");
// 投票(假设有足够的票数)
治理.投票(提案ID, 真);
// 等待投票期结束(这里需要模拟时间推进)
// ...
// 执行提案
治理.执行(提案ID);
// 验证
要求(治理.提案状态(提案ID) == 提案状态::已执行, "提案应该已执行");
}
// 测试4: 取消提案
函数 测试取消提案() {
// 先创建提案
让 目标 = 地址::从十六进制("0x2345678901234567890123456789012345678901");
让 提案ID = 治理.提案(目标, 0, 字节::从十六进制("0x12345678"), "测试提案");
// 取消前
要求(治理.提案状态(提案ID) == 提案状态::待处理, "提案应该待处理");
// 执行取消
治理.取消(提案ID);
// 取消后
要求(治理.提案状态(提案ID) == 提案状态::已取消, "提案应该已取消");
}
// 运行所有测试
函数 运行所有测试() {
测试创建提案();
测试投票();
测试执行提案();
测试取消提案();
}
}