104 lines
3.4 KiB
Plaintext
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应该不存在");
|
|
}
|
|
|
|
// 运行所有测试
|
|
函数 运行所有测试() {
|
|
测试基本信息();
|
|
测试铸造();
|
|
测试转移();
|
|
测试授权();
|
|
测试销毁();
|
|
}
|
|
}
|