96 lines
3.3 KiB
Plaintext
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) == 提案状态::已取消, "提案应该已取消");
|
|
}
|
|
|
|
// 运行所有测试
|
|
函数 运行所有测试() {
|
|
测试创建提案();
|
|
测试投票();
|
|
测试执行提案();
|
|
测试取消提案();
|
|
}
|
|
}
|