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

104 lines
3.4 KiB
Plaintext

///! ACC-721中文标准测试
///! 测试ACC-721 NFT协议的所有功能
使用 ../asset/acc721;
合约 ACC721测试 {
私有 nft: ACC721基础;
构造函数() {
nft = ACC721基础::新建("测试NFT", "TNFT");
}
// 测试1: 基本信息
函数 测试基本信息() {
要求(nft.名称() == "测试NFT", "名称错误");
要求(nft.符号() == "TNFT", "符号错误");
}
// 测试2: 铸造NFT
函数 测试铸造() {
让 接收者 = 消息::发送者();
让 代币ID = 哈希::从十六进制("0x1234567890123456789012345678901234567890123456789012345678901234");
// 铸造前
要求(nft.总供应量() == 0, "初始供应量应为0");
// 执行铸造
nft.铸造(接收者, 代币ID);
// 铸造后
要求(nft.总供应量() == 1, "供应量应为1");
要求(nft.所有者(代币ID) == 接收者, "所有者错误");
要求(nft.持有量(接收者) == 1, "持有量错误");
}
// 测试3: 转移NFT
函数 测试转移() {
让 发送者 = 消息::发送者();
让 接收者 = 地址::从十六进制("0x1234567890123456789012345678901234567890");
让 代币ID = 哈希::从十六进制("0x1234567890123456789012345678901234567890123456789012345678901234");
// 先铸造
nft.铸造(发送者, 代币ID);
// 转移前
让 发送者余额前 = nft.持有量(发送者);
让 接收者余额前 = nft.持有量(接收者);
// 执行转移
nft.转移从(发送者, 接收者, 代币ID);
// 转移后
要求(nft.所有者(代币ID) == 接收者, "所有者错误");
要求(nft.持有量(发送者) == 发送者余额前 - 1, "发送者余额错误");
要求(nft.持有量(接收者) == 接收者余额前 + 1, "接收者余额错误");
}
// 测试4: 授权NFT
函数 测试授权() {
让 所有者 = 消息::发送者();
让 授权者 = 地址::从十六进制("0x1234567890123456789012345678901234567890");
让 代币ID = 哈希::从十六进制("0x1234567890123456789012345678901234567890123456789012345678901234");
// 先铸造
nft.铸造(所有者, 代币ID);
// 执行授权
nft.授权(授权者, 代币ID);
// 验证
要求(nft.获取授权(代币ID) == 授权者, "授权地址错误");
}
// 测试5: 销毁NFT
函数 测试销毁() {
让 所有者 = 消息::发送者();
让 代币ID = 哈希::从十六进制("0x1234567890123456789012345678901234567890123456789012345678901234");
// 先铸造
nft.铸造(所有者, 代币ID);
// 销毁前
让 供应量前 = nft.总供应量();
让 余额前 = nft.持有量(所有者);
// 执行销毁
nft.销毁(代币ID);
// 销毁后
要求(nft.总供应量() == 供应量前 - 1, "供应量错误");
要求(nft.持有量(所有者) == 余额前 - 1, "余额错误");
要求(nft.存在(代币ID) == 假, "NFT应该不存在");
}
// 运行所有测试
函数 运行所有测试() {
测试基本信息();
测试铸造();
测试转移();
测试授权();
测试销毁();
}
}